在使用ESP8266 跑freertos操作系統(tǒng)時(shí),如果使用sPRintf函數(shù)進(jìn)行將其他數(shù)據(jù)轉(zhuǎn)換成字符串格式時(shí),如果將存儲(chǔ)字符串的數(shù)組定義成局部數(shù)組會(huì)出現(xiàn)程序跑死然后重啟的問(wèn)題。為了避免程序跑死問(wèn)題,需要將存儲(chǔ)字符串?dāng)?shù)組定義成全局?jǐn)?shù)組或者局部數(shù)組用static關(guān)鍵字聲明。出現(xiàn)這種問(wèn)題的原因是在線程切換時(shí)數(shù)組的地址偏移出現(xiàn)了問(wèn)題,來(lái)回切換地址出現(xiàn)了問(wèn)題。一般情況下我們定義成全局變量就不會(huì)出現(xiàn)這種問(wèn)題,防止堆棧溢出。
還有一個(gè)出現(xiàn)重啟的原因是存儲(chǔ)字符串?dāng)?shù)據(jù)的數(shù)組定義的過(guò)小,通過(guò)sprintf函數(shù)的返回值來(lái)判斷需要給數(shù)組開辟多大的空間。
下面是例子:
#define BUFF_SIZE 9
uint8 signall[BUFF_SIZE]; //定義為全局變量
len = sprintf(signall,"%d, %d", idx++, wifi_signal);
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注