91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第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

    文章

    3808

    瀏覽量

    138086
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70761
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    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 ?7097次閱讀
    全局<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 ?835次閱讀

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

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

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

    在JavaScript中,我們可以通過多種方法來判斷數組中是否包含某個特定的值。以下是些常
    的頭像 發表于 11-30 16:21 ?2332次閱讀
    主站蜘蛛池模板: 激情五月综合 | 午夜在线视频观看版 | 四虎网址大全 | 成 人色 网 站 欧美大片在线观看 | 午夜影院网页 | 奇米奇米 | 欧美又粗又长又湿又黄的视频 | 69老司机亚洲精品一区 | 国产乱人视频在线看 | 高级毛片| 2021天天操 | 日本一区免费在线观看 | 性中国videosex国产孕妇 | 色老板在线视频一区二区 | 午夜精品久视频在线观看 | 一级毛片aaaaaa免费看 | 国产精品资源手机在线播放 | 视频在线高清完整免费观看 | 福利视频一区二区 | 久久夜色精品 | 欧美综合色区 | 163黄页网又粗又长又舒服 | 巨乳色在线观看 | 亚洲免费影视 | 欧美在线观看视频一区 | 日韩在线视频免费观看 | 美女扒开尿囗给男生桶爽 | 国产午夜精品久久久久 | 成人综合色站 | 免费视频在线视频观看1 | 色吧五月天 | 免费视频爰爱太爽了 | 免费视频在线播放 | 35qao强力打造免费上线高清 | 久久久午夜毛片免费 | 李老汉的性生生活2 | bt天堂在线www种子搜索 | 噜噜噜噜天天狠狠 | 91大神精品视频 | 欧美性精品videofree | 操日韩 |