私は実際にESP8266 core for Arduinoを使用してESP8266上でソフトウェアを開発することは理解できません。関数呼び出し時にString
を渡すと、基本的に私のプログラムがクラッシュします。私は非常に長いString
でこの関数を呼び出すの二つの方法を試してみた文字列パラメータ直接変数と関数の呼び出し
void SimpleFunc(String str)
{
...
}
:私は、パラメータとしてString
と機能を持っています。 最初の方法新しいString
変数を作成し、それを渡すことです:
String veryLongString = "veeeerryyyy loooong ........."; //Much longer in reality!!!
SimpleFunc(veryLongString);
第二の方法直接String
を渡すことです:
SimpleFunc("veeeerryyyy loooong .........");
。 ... \ esp8266 \ 2.3.0 \コア\ esp8266 \ umm_malloc/umm_malloc.cライン::〜文字列()で1163
文字列で
umm_assimilate_up:ここでは、スタックの一部です。 .. \ esp8266の\ 2.3.0 \コア\ esp8266/WString.cppライン720
_umm_freeで... esp8266 2.3.0 \ \コア\ \ esp8266 \ umm_malloc/umm_malloc.cライン1287
無料... \ esp8266 \ 2.3.0 \ cores \ esp8266 \ umm_malloc/umm_malloc.c行1733
String ::〜String()at ... \ esp8266 \ 2.3.0 \ cores \ esp8266/WString.cpp行720
このように関数を呼び出す点で違いはありますか?最初のアプローチはなぜうまくいくのですか?あなたが参照
void foo(std::string const &str)
基礎となる文字のいかなるコピーが作成されていないことで、文字列を呼び出す場合
https://hackingmajenkoblog.wordpress.com/2016/02/04/the-evils-of-arduino-strings/ –