程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C語言中 “_at()” 特殊地址定位詳解

C語言中 “_at()” 特殊地址定位詳解

編輯:關於C++

C語言中 “_at()” 特殊地址定位詳解。本站提示廣大學習愛好者:(C語言中 “_at()” 特殊地址定位詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C語言中 “_at()” 特殊地址定位詳解正文


C語言中 “_at()” 特殊地址定位詳解

作者:木十化

這篇文章主要介紹了C語言中 “_at()” 特殊地址定位詳解的相關資料,需要的朋友可以參考下

C語言中 “_at()” 特殊地址定位詳解

在keil裡面,有一個特殊地址定位的指令,就是將一個變量或常量定位到一個指定的地址上面

指令為 __at ,使用方法如下

int variable __at(0x8000) = 100;

意為將variable變量定位到0x8000這個地址。

指令的目的是告訴鏈接器將指定地址定位到某個地址裡面,在使用該功能的時候需要注意一點的是,地址的范圍需要符合單片機的datasheet給出的地址映射表,

注意,如果地址超出了flash的最大范圍,程序將無法得到這個值,例如一個256Kflash的芯片,在使用功能__at指令的時候,地址就不要超過256*1024了,否則你是找不到這個變量的。

下面以MB9AF310系列芯片為例,講一下關於芯片的flash在內存中的映射,

如圖,flash被映射到了0x00000000這個地址上,以0x00100000結束,但是仍然需要看具體芯片的flash是多大的,這個地址只是310系列芯片的地址映射,如果超出了實際的地址,仍然不能找到變量。

keil的鏈接器最後會把變量放到生成文件的相應地址中去,在燒錄的時候,如果是BIN文件,文件的字節地址會和flash的地址一一對應。用戶定義的變量將被燒錄到相應的flash的物理地址中。以上都是在沒有MMU的情況的關於地址映射的解釋,如果啟用了MMU,情況也許會不一樣,畢竟多了一層虛擬地址,實際上還能不能使用__at指令,我也不知道,後續筆者會繼續鑽研,更多關於__at指令的說明,可以直接在keil的幫助文件中找到。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved