ESP8266 core for Arduino을 사용하는 ESP8266에서 소프트웨어를 개발하는 것이 실제로 이해가 안되는 문제가 발생했습니다. 함수를 호출 할 때 String
을 전달하면 기본적으로 프로그램이 중단됩니다.String 매개 변수가 직접 변수 대 변수 인 함수 호출
void SimpleFunc(String str)
{
...
}
내가 String
매우 긴으로이 함수를 호출하는 두 가지 방법을 시도 : 나는 매개 변수로 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 라인 1,287
자유 at ... \ 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/ –