Arduino上のString クラス関数を使う便利さと心配ごと [arduino]
Arduino上にStringクラス関数があることを知らない人は多いと思います。また良く知る人たちは、メモリリークのことを心配して使いたがらない人も多いと思います。
弊社では、3GIMのサンプルプログラムを作成したなかでは、ほとんど文字配列ではなく、Stringクラス関数を利用するようになりました。まわりからは、メモリリークが起きやすい、つまりメモリがどんどん増えて行ってプログラムが中断するなどと注意するようにと助言されました。
しかし現時点、多くのサンプルスケッチを作成しては、数か月も動かしているなかでは、特にメモリリークで困ったことはありません。
こんななかで、以下のサイトを発見しました。ただし、このサイトは、2009年に書かれたもので、メモリリークでの問題点を指摘し、改善策を上げたものです。
http://todotani.cocolog-nifty.com/…/2009/06/arduino-texitst…
最新のArduino IDEで、この中のプログラムを起動させましたが、メモリが増えていることはありませんでした。
新たなIDEでは、改善されているようです。
もし、良かったら、文字処理で苦労されている方々には、このStringクラス関数をご利用されたら如何でしょうか?
■文字列宣言
String str;
String str="3GIM & 3Gshield";
■文字列検索
String str="abcdefg";
str.indexOf("bc"); 1
※ 検索できた場合は、0以上の数値
検索できなかった場合は、-1
■文字列置換
String str="ab cd ef gh";
※ 空白文字を"-"に全て置換
str.replace("","-"); str="ab-ce-ef-gh";
■文字列連結
String str="abcd";
str.concat("efgh"); str="abcdefgh";
または
str=str+"efth";
■文字列を文字配列に変換
char buf[100];
String str="abcdef";
int len=str.length(); // 文字列長さ
str.toCharArray(buf,len);
■文字列切だし
String str="abcdefgh";
str.substring(3); 戻り値:”defgh";
str.substring(3,6); 戻り値:” def";
■文字列(先頭と末尾のスペース抜き)
String str=" abc def gh ";
str.trim(); str="abc def gh";
■文字列を数値化
String str=“12.345”;
float f= str.toFloat(); f=12.345;
int i=str.toInt(); i=12;
■数値を文字列化
float f = 12.345;
String str = String(f); str=“12.34";
■ UART通信処理の常套アルゴリズム
ここで、iemSerial は、 通信のUARTシリアル通信ポート
▼応答(レスポンス)待機状態
while(!iemSerial.available() && (millis() –tim)
弊社では、3GIMのサンプルプログラムを作成したなかでは、ほとんど文字配列ではなく、Stringクラス関数を利用するようになりました。まわりからは、メモリリークが起きやすい、つまりメモリがどんどん増えて行ってプログラムが中断するなどと注意するようにと助言されました。
しかし現時点、多くのサンプルスケッチを作成しては、数か月も動かしているなかでは、特にメモリリークで困ったことはありません。
こんななかで、以下のサイトを発見しました。ただし、このサイトは、2009年に書かれたもので、メモリリークでの問題点を指摘し、改善策を上げたものです。
http://todotani.cocolog-nifty.com/…/2009/06/arduino-texitst…
最新のArduino IDEで、この中のプログラムを起動させましたが、メモリが増えていることはありませんでした。
新たなIDEでは、改善されているようです。
もし、良かったら、文字処理で苦労されている方々には、このStringクラス関数をご利用されたら如何でしょうか?
■文字列宣言
String str;
String str="3GIM & 3Gshield";
■文字列検索
String str="abcdefg";
str.indexOf("bc"); 1
※ 検索できた場合は、0以上の数値
検索できなかった場合は、-1
■文字列置換
String str="ab cd ef gh";
※ 空白文字を"-"に全て置換
str.replace("","-"); str="ab-ce-ef-gh";
■文字列連結
String str="abcd";
str.concat("efgh"); str="abcdefgh";
または
str=str+"efth";
■文字列を文字配列に変換
char buf[100];
String str="abcdef";
int len=str.length(); // 文字列長さ
str.toCharArray(buf,len);
■文字列切だし
String str="abcdefgh";
str.substring(3); 戻り値:”defgh";
str.substring(3,6); 戻り値:” def";
■文字列(先頭と末尾のスペース抜き)
String str=" abc def gh ";
str.trim(); str="abc def gh";
■文字列を数値化
String str=“12.345”;
float f= str.toFloat(); f=12.345;
int i=str.toInt(); i=12;
■数値を文字列化
float f = 12.345;
String str = String(f); str=“12.34";
■ UART通信処理の常套アルゴリズム
ここで、iemSerial は、 通信のUARTシリアル通信ポート
▼応答(レスポンス)待機状態
while(!iemSerial.available() && (millis() –tim)
2015-09-10 17:04
nice!(0)
コメント(0)
トラックバック(0)
コメント 0