C語言中 “_at()” 特殊地址定位詳解
C語言中 “_at()” 特殊地址定位詳解
在keil里面,有一個特殊地址定位的指令,就是將一個變量或常量定位到一個指定的地址上面
指令為 __at ,使用方法如下
int variable __at(0x8000) = 100;
意為將variable變量定位到0x8000這個地址。
指令的目的是告訴鏈接器將指定地址定位到某個地址里面,在使用該功能的時候需要注意一點(diǎn)的是,地址的范圍需要符合單片機(jī)的datasheet給出的地址映射表,
注意,如果地址超出了flash的最大范圍,程序?qū)o法得到這個值,例如一個256Kflash的芯片,在使用功能__at指令的時候,地址就不要超過256*1024了,否則你是找不到這個變量的。
下面以MB9AF310系列芯片為例,講一下關(guān)于芯片的flash在內(nèi)存中的映射,

如圖,flash被映射到了0x00000000這個地址上,以0x00100000結(jié)束,但是仍然需要看具體芯片的flash是多大的,這個地址只是310系列芯片的地址映射,如果超出了實(shí)際的地址,仍然不能找到變量。
keil的鏈接器最后會把變量放到生成文件的相應(yīng)地址中去,在燒錄的時候,如果是BIN文件,文件的字節(jié)地址會和flash的地址一一對應(yīng)。用戶定義的變量將被燒錄到相應(yīng)的flash的物理地址中。以上都是在沒有MMU的情況的關(guān)于地址映射的解釋,如果啟用了MMU,情況也許會不一樣,畢竟多了一層虛擬地址,實(shí)際上還能不能使用__at指令,我也不知道,后續(xù)筆者會繼續(xù)鉆研,更多關(guān)于__at指令的說明,可以直接在keil的幫助文件中找到。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Cocos2d-x UI開發(fā)之場景切換代碼實(shí)例
這篇文章主要介紹了Cocos2d-x UI開發(fā)之場景切換代碼實(shí)例,cocos2d-x中的場景切換是通過導(dǎo)演類調(diào)用相應(yīng)的方法完成的,本文通過代碼和詳細(xì)注釋來說明,需要的朋友可以參考下2014-09-09
C++數(shù)據(jù)結(jié)構(gòu)之哈希表的實(shí)現(xiàn)
哈希表,即散列表,可以快速地存儲和查詢記錄。這篇文章主要為大家詳細(xì)介紹了C++數(shù)據(jù)結(jié)構(gòu)中哈希表的實(shí)現(xiàn),感興趣的小伙伴可以了解一下2023-03-03
C++ push方法與push_back方法的使用與區(qū)別
這篇文章主要介紹了C++ push方法與push_back方法的使用與區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
C語言中typedef的用法以及#define區(qū)別詳解
這篇文章主要給大家介紹了關(guān)于C語言中typedef用法以及#define區(qū)別的相關(guān)資料,typedef 是用來定義一種類型的新別名的,它不同于宏(#define),不是簡單的字符串替換。而#define只是簡單的字符串替換(原地擴(kuò)展),需要的朋友可以參考下2021-07-07
C語言菜鳥基礎(chǔ)教程之單精度浮點(diǎn)數(shù)與雙精度浮點(diǎn)數(shù)
在C語言中,單精度浮點(diǎn)數(shù)(float)和雙精度浮點(diǎn)數(shù)(double)類型都是用來儲存實(shí)數(shù)的,雙精度是用記憶較多,有效數(shù)字較多,數(shù)值范圍較大。2017-10-10
QT編寫地圖實(shí)現(xiàn)設(shè)備點(diǎn)位的示例代碼
在地圖應(yīng)用的相關(guān)項目中,在地圖上標(biāo)識一些設(shè)備點(diǎn),并對點(diǎn)進(jìn)行交互這個功能用的最多的,于是需要一套機(jī)制可以動態(tài)的添加、刪除、清空、重置。本文將詳細(xì)介紹這些功能如何實(shí)現(xiàn),需要的可以參考一下2022-01-01

