STM32学习笔记之__attribute__ ((at())绝对定位分析
STM32也會(huì)遇到這樣的絕對(duì)定位的問(wèn)題如下:
uint8_t ? UART_RX_BUF[1024] ? __attribute__ ((at(0X20001000))); ? //就是將串口接收的數(shù)據(jù)定位到RAM中起始地址為0X20001000;
?
絕對(duì)定位要么定位到flash、要么定位到RAM,這里我們將定位在flash進(jìn)行說(shuō)明。
?
MDK如何實(shí)現(xiàn)將數(shù)據(jù)存儲(chǔ)到FLASH指定地址?
? ? ? 我們?cè)跓洈?shù)據(jù)的時(shí)候,一般是從0x08000000開(kāi)始按照順序燒錄到flash里面的,如何讓數(shù)據(jù)能夠定義到絕對(duì)地址如0800F000,就必須保證文件內(nèi)數(shù)據(jù)也是存儲(chǔ)在該地址,為了實(shí)現(xiàn)這個(gè)目的,MDK在生成文件時(shí)會(huì)填充0x00字段,從而確保能夠?qū)?shù)據(jù)定義到
?
從實(shí)際情況也能驗(yàn)證這個(gè)原理,我以我的測(cè)試代碼為例:
const u16 gFlashDefValue4[512] __attribute__((at(0x0800F000))) =??{0x1111, 0x1111, 0x1111, 0x0111, 0x0111,0x0111};
可以看到Code+ReadOnly= 15236+47228 = 62464
而gFlashDefValue4占絕對(duì)地址F000+512*2 = 62464
從生成的BIN文件也可以證實(shí)該觀點(diǎn):
如果你自己查看生成文件也可以發(fā)現(xiàn)中間填充了大量的0x00.但有一點(diǎn)要注意,?FLASH定義絕對(duì)地址時(shí)要考慮ZI-Data的長(zhǎng)度,否則可能會(huì)導(dǎo)致FLASH溢出。
轉(zhuǎn)載于:https://www.cnblogs.com/jiangzhaowei/p/9264365.html
總結(jié)
以上是生活随笔為你收集整理的STM32学习笔记之__attribute__ ((at())绝对定位分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决nginx负载均衡高可用keepal
- 下一篇: 文件上传三种方式