Arduino pro mini にてRTCや外付けのEEPROMを使ったプログラムを書いているのですが
String(val, base)の結果がうまく出ません。
文字列(str)の文字数を2桁のHEXで別の文字列に格納しようとしています。
c
1~略~ 2 String str = "test"; 3 String sLen = String( (int)str.length(), HEX); 4 if (sLen.length() == 1) 5 sLen = "0" + sLen; 6 7 Serial.print("sLen:"); 8 Serial.println(sLen); 9 Serial.flush();
上記プログラムを単体で動作させると正常に動作出来るのですが、
全く同じ文を今作成しているものに組み込むとString(val, base) の結果をprintしても何も表示されません。
(sLen:が出力される)
またsLenが何表示されないプログラム内の全く別のソースを一部削ると正常に動作します。
(sLen:04が出力される)
このことからメモリーリーク等を疑っているのですが
何か確認できる方法はありますでしょうか。
追記:
正常に動作出来る状態(本来必要なソースを削った状態)から
上記ソースの最後にprintを一行追加した所、また値が何も表示されなくなりました。
Serial.print("sLen:"); Serial.println(sLen); Serial.print("sLen2:"); // 追記したらsLenが何も表示されない Serial.flush();
コンパイル時のメッセージでは
最大30720バイトのフラッシュメモリのうち、スケッチが19632バイト(63%)を使っています。 最大2048バイトのRAMのうち、グローバル変数が1452バイト(70%)を使っていて、ローカル変数で596バイト使うことができます。 ~中略~ Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
と表示されています。
開発環境:Windows10 ArduinoIDE
Arduino pro mini 3.3V 8MHz
追記1 2018/04/19
以下のソースを追記した所
やはりStringの結果が返ってきていないように見えます。
別のString変数 cmd に "@"、 str文字数、strの文字列、 "/A" を格納し
シリアルにて出力させてみたところ
strの文字数の部分のみ表示されませんでした。
c
1~略~ 2 String cmd = ""; 3 String str = "test"; 4 String sLen = String( (int)str.length(), HEX); 5 if (sLen.length() == 1) 6 sLen = "0" + sLen; 7 8 Serial.print("sLen:"); 9 Serial.println(sLen); 10 Serial.flush(); 11 12 cmd += "@"; 13 cmd += sLen; 14 cmd += str; 15 cmd += "/A"; 16 17 debugSerial.print("cmd:"); 18 debugSerial.println(cmd); 19 debugSerial.flush();
出力結果
cmd:@test/A
追記2 2018/04/19
グローバル変数で結構な量を配列で定義していたものを一時的に減らした所
正常動作することを確認しました。
どうもこの辺りがあやしいのかもしれません。
ちなみにその時のコンパイル後のメッセージは
最大30720バイトのフラッシュメモリのうち、スケッチが19624バイト(63%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1166バイト(56%)を使っていて、ローカル変数で882バイト使うことができます。
となっていました。
もうちょっと調べてみようと思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/19 00:43