STM32學習筆記之__attribute__ ((at())絕對定位分析


STM32也會遇到這樣的絕對定位的問題如下:

uint8_t   UART_RX_BUF[1024]   __attribute__ ((at(0X20001000)));   //就是將串口接收的數據定位到RAM中起始地址為0X20001000;

 

絕對定位要么定位到flash、要么定位到RAM,這里我們將定位在flash進行說明。

 

MDK如何實現將數據存儲到FLASH指定地址?

      我們在燒錄數據的時候,一般是從0x08000000開始按照順序燒錄到flash里面的,如何讓數據能夠定義到絕對地址如0800F000,就必須保證文件內數據也是存儲在該地址,為了實現這個目的,MDK在生成文件時會填充0x00字段,從而確保能夠將數據定義到

 

從實際情況也能驗證這個原理,我以我的測試代碼為例:

const u16 gFlashDefValue4[512] __attribute__((at(0x0800F000))) =  {0x1111, 0x1111, 0x1111, 0x0111, 0x0111,0x0111};


可以看到Code+ReadOnly= 15236+47228 = 62464
gFlashDefValue4占絕對地址F000+512*2 = 62464

從生成的BIN文件也可以證實該觀點:



如果你自己查看生成文件也可以發現中間填充了大量的0x00.但有一點要注意, FLASH定義絕對地址時要考慮ZI-Data的長度,否則可能會導致FLASH溢出。


免責聲明!

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



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