在使用ESP8266 跑freertos操作系統時,如果使用sprintf函數進行將其他數據轉換成字符串格式時,如果將存儲字符串的數組定義成局部數組會出現程序跑死然後重啓的問題。爲了避免程序跑死問題,需要將存儲字符串數組定義成全局數組或者局部數組用static關鍵字聲明。出現這種問題的原因是在線程切換時數組的地址偏移出現了問題,來回切換地址出現了問題。一般情況下我們定義成全局變量就不會出現這種問題,防止堆棧溢出。
還有一個出現重啓的原因是存儲字符串數據的數組定義的過小,通過sprintf函數的返回值來判斷需要給數組開闢多大的空間。
下面是例子:
#define BUFF_SIZE 9
uint8 signall[BUFF_SIZE]; //定義爲全局變量
len = sprintf(signall,"%d, %d", idx++, wifi_signal);