在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

把指定代碼、常數或變量到某個特定地址的一個方法

麥辣雞腿堡 ? 來源:Microchip微芯 ? 作者:Microchip微芯 ? 2023-01-22 14:52 ? 次閱讀

問:如何指定代碼、常數或變量到某個特定的地址?

答:使用“#pragma psect”偽指令來把代碼、常數或變量放到你定制的psect。于是你就可以使用鏈接器選項來把這個定制的psect放到你想要的地址。Pragma psect的語法是:

#pragma psect original_psect=new_psect

這里的“original_psect”是標準的code、constant或變量原來位于的psect名稱,這個orignal psect名稱可以從map文件的symbol table里找到。 一個symbol table的示例:

__Lstrings strings 0008 __Lstringtable stringtable 0008

__Lstruct struct 0020 __Ltemp temp 0070

__Ltext text 0190 __Lvectors vectors 000B

__S0 (abs) 0800 __S1 (abs) 0190

_exit init 0004 _main text0 07FD

_serial const1 0009 intlevel0 intentry 0004

_serial const1 0009 ; 這個變量是這樣聲明的“const int serial = 5621;”

_serial是變量名加前下劃線,const1是psect名稱

這里在“const”后面有一個數字,也即“const1”,這個數字可以是任何數字,也就是說,它不一定是1。你可以使用“%%u”來代替這個數字,對于大部分的后面帶有數字的psect都可以這樣,除了rbss_x和rdata_x。因為rbss_x和rdata_x是每個bank的RAM變量,rbss_0代表bank 0,rbss_1代表bank 1,依此類推……

“new_psect”是你要定制的psect的名稱,可以使任意名稱,但是不能和標準psect同名。

示例,聲明把“serial”放到一個新的psect里去是這樣做的:

#pragma psect const%%u=fixed_serial

const int serial = 5621;

每一個“#pragma psect”偽指令應該是在一個獨立的文件中被聲明,也就是說,所有的在“#pragma psect”下面聲明的變量都會被放到新的定制psect中去。

// --File serial.c

#pragma psect const%%u=fixed_serial

const int serial = 5621;

// --End file

// --File serial.h

extern int serial;

// --End file

具體放置這個新的定制psect,你將需要加入一些額外的命令行選項。

-L-Pcustom_psect=addressh

這里'-L'是傳遞選項給鏈接器,'-P'是定位一個psect到特定的地址,'custom_psect'是你想要定位的psect的名稱,'addressh'是你想要定位到的16進制地址。例如:

PICC -16f877 main.c serial.c -L-Pfixed_serial=50h

對于'text' psect有一些特殊問題。一個類似于'#pragma psect text%%u=myPsect'的偽指令會把所有的text psect放置到單個用戶定制的psect里。而優化器一直認為每個psect只包含一個函數。這將會產生bank切換的錯誤。

要避免這個問題,可以對用戶定制psect名稱也使用'%%u'后綴,例如:

#pragma psect text%%u=myPsect%%u

這樣多個用戶定制的psect將被產生。

例如:

//file test.c

#pragma psect text%%u=myPsect%%u

void func()

{

}

void func2()

{

}

void main()

{

}

//end file

你可以從列表文件和map文件中看到下面這些信息

'func()' is in psect 'myPsect0'

'func1()' is in psect 'myPsect1'

'main()' is in psect 'myPsect2'

你于是就可以用'-L-P'選項給每一個psect清楚地分配地址。

所以,要把這些函數放到500h地址,你可以使用下面的編譯選項:

-L-PmyPsect0=500h,myPsect1,myPsect2

請注意-L-P 選項是沒有ROM頁邊界的檢查,你需要自己確保這個函數(psect)是不會超越頁邊界的,(譯者注:PICC要求每個函數都必須是在同一個ROM頁里的)。請查看使用說明書來得到更多關于'#pragma psect'的信息。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3669

    瀏覽量

    135265
  • 代碼
    +關注

    關注

    30

    文章

    4829

    瀏覽量

    69067
收藏 人收藏

    評論

    相關推薦

    softune如何變量定義在指定RAM地址

    你好,請問如何變量定義在指定RAM地址? 例如
    發表于 01-18 10:48

    TC275如何將指定變量放在指定地址中?

    如何在代碼中以及Lcf_Gnuc.lsl如何修改,能夠將某個變量放在指定地址中,能否給示例
    發表于 02-06 08:08

    IAR小課堂 | 如何將組函數變量放在特定段內

    本文描述了在不使用多個#pragma location指令的情況下,在指定的段中放置多個函數變量的兩種方法。討論可以使用#pragma location將
    發表于 12-11 10:02

    如何在特定地址放置變量

    如何在特定地址放置變量? - spartan3e - microblaze - SDK 14.2
    發表于 04-06 15:02

    有辦法802.1as的協議報文隊列指定某個特定的qos隊列中去嗎

    按照手冊執行qbv的測試時,發現802.1as的協議報文也會被qbv的門控限制住,那么請問是否有辦法802.1as的協議報文隊列指定某個特定的qos隊列中,避免被誤傷?
    發表于 12-31 07:28

    MuonRiber studio中怎么變量定義在指定地址

    MuonRiber studio中我怎么變量定義在指定地址,或是怎么變量定義在
    發表于 09-14 06:36

    如何在Keil中將函數變量編譯到指定地址

    如何在Keil中將函數變量編譯到指定地址在Keil 中將函數變量編譯到
    發表于 10-19 06:51

    IAR中如何定向數組和函數放在指定地址單元

    定義函數到RAM區域,增快程序代碼的執行速度。所以在這些場合我們會去思考如何指定段數組或者函數到
    發表于 09-15 17:35 ?7次下載
    IAR中如何定向<b class='flag-5'>把</b>數組和函數放在<b class='flag-5'>指定</b>的<b class='flag-5'>地址</b>單元

    全局變量和成員變量的區別分析

    成員變量指定維度的成員變量,用于標識某個維度成員。簡介由 Analysis Services 內部使用的值,以標識某個維度成員。Membe
    發表于 12-11 13:50 ?6931次閱讀
    全局<b class='flag-5'>變量</b>和成員<b class='flag-5'>變量</b>的區別分析

    如何將變量存儲在指定內存地址 (基于Keil MDK-ARM)

    如何將變量存儲在指定內存地址(基于Keil MDK-ARM)
    的頭像 發表于 02-29 16:32 ?1.6w次閱讀
    如何將<b class='flag-5'>變量</b>存儲在<b class='flag-5'>指定</b>內存<b class='flag-5'>地址</b> (基于Keil MDK-ARM)

    Keil中指定代碼段與常量在Flash中地址方法

    圖 分配代碼文件到Flash指定位置方法 在.sct文件中指定代碼輸出文件(.o格式)到Flash
    發表于 11-20 14:36 ?20次下載
    Keil中<b class='flag-5'>指定</b><b class='flag-5'>代碼</b>段與常量在Flash中<b class='flag-5'>地址</b><b class='flag-5'>方法</b>

    【STM32CubeIDE】將變量定義到指定地址

    使用Keil在使用Keil編寫程序的時候我們可以很輕松的將變量定義到指定地址uint8_t array[1024] __attribute__((at(0x20010000
    發表于 12-27 19:08 ?28次下載
    【STM32CubeIDE】將<b class='flag-5'>變量</b>定義到<b class='flag-5'>指定</b><b class='flag-5'>地址</b>

    映射位到某個RAM變量方法

    問:我想訪問某個字節中的單個位,但是當我嘗試用絕對變量結構定義變量時,例如: static bit bitvar @ ((unsign
    的頭像 發表于 01-22 15:11 ?666次閱讀

    基于IAR指定RL78程序地址空間說明

    基于IAR實現C文件指定地址存放&函數指定地址存放,定義變量指定
    的頭像 發表于 06-19 15:24 ?2902次閱讀
    基于IAR<b class='flag-5'>指定</b>RL78程序<b class='flag-5'>地址</b>空間說明

    js中如何判斷數組中包含某個特定的值

    在JavaScript中,我們可以通過多種方法來判斷數組中是否包含某個特定的值。以下是些常
    的頭像 發表于 11-30 16:21 ?1868次閱讀
    主站蜘蛛池模板: 特黄aaaaa日本大片免费看 | 一区二区三区四区视频在线 | 日本三级带日本三级带黄首页 | 亚洲人成在线精品不卡网 | 日本高清中文字幕在线观穿线视频 | 女人张开双腿让男人桶完整 | 69女poren60| 人人看人人做人人爱精品 | 六月婷婷七月丁香 | 国色天香精品亚洲精品 | 国产美女在线精品免费观看 | 在线观看精品国产福利片100 | 国产精品美女久久久久网站 | 欧美性喷潮 | 又粗又大又猛又爽免费视频 | 三级天堂 | 妹子干综合网 | 色老头网站久久网 | 国产精品久久久久影视不卡 | 999毛片| 成人在线视频网址 | 一级毛片无毒不卡直接观看 | 开心色xxxx| 亚洲v视频 | 深深激情网 | 中文字幕一区精品欧美 | 亚洲精品老司机综合影院 | 天天夜天干天天爽 | 久久美女免费视频 | 天天操天天爽天天射 | 午夜伦伦 | 欧美猛性 | 韩国理论三级在线观看视频 | 欧美第一网站 | 国内黄色一级片 | 亚洲欧美4444kkkk | 精品卡1卡2卡三卡免费网站视频 | 精品久久久久久中文字幕欧美 | 真实女人寂寞偷人视频 | 免费的黄色毛片 | 亚洲成人高清 |