ESP8266—“ICACHE_FLASH_ATTR”宏——解釋含義


const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 

這種 ICACHE 開頭的宏作的用就是因為esp8266的ram有限,所以在啟動的時候就不可能把所有的數據都載入ram,只能是先載入必要的數據,其他數據保留在Flash中,在需要的時候讀取。esp8266的固件有5個有效段,分別是:.data,.rodata,.bss,.text,.irom0.text,(這些都是從編譯好的elf文件中提取的)其中 .data,.rodata,.bss,.text 這四個段在啟動的時候被載入內存,.irom0.text 則通過內存映射的方式訪問,不會占用寶貴的ram。所以不是必要的數據都可以裝入 .irom0.text 這個段中以節省ram占用。另外需要注意的是,任何中斷函數都不可以存放在 .irom0.text 中,會crash!!!

#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text"))) #define ICACHE_RODATA_ATTR __attribute__((section(".irom.text"))) 

這兩個宏就是告訴編譯器數據的保存位置。變量用 ICACHE_RODATA_ATTR ,(切記變量必須是 const 類型的),函數用 ICACHE_FLASH_ATTR 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM