ESP8266-「ICACHE_FLASH_ATTR」マクロ - の意味の解釈

const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0};

void MyFun() ICACHE_FLASH_ATTR { } 

マクロは、このことは、すべてのデータがRAMにロードされたときに、必要なデータのみが最初にロードされ起動することは不可能であるので、ICACHEの使用開始は、ラムのesp8266ため制限されている、Flashで保持し、他のデータを作ります必要なときにお読みください。esp8266有効ファームウェア5つのセグメント、すなわち:.DATA、.rodataの、.bssの、の.text 、.irom0.text、( 抽出されたファイルのELFからコンパイルされた)前記.DATA、.rodataの、 .bssの、これらの4つのセグメントの.text .irom0.textは、メモリマッピングの仕方によってアクセスされ、起動時のメモリにロードされ、貴重なラムを取ることはありません。だから、データは、このセクションでは、占有ラムを保存するために.irom0.textにロードすることができる必要はありません。また、任意の割り込み機能は.irom0.textに保存することができないことに注意してクラッシュしてしまいます!

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

二つのマクロ位置データを保存するようコンパイラーに指示することです。変数は、関数ICACHE_FLASH_ATTRで、(定数変数の型を覚えておく必要があります)、ICACHE_RODATA_ATTR。

おすすめ

転載: www.cnblogs.com/CodeWorkerLiMing/p/11256391.html