一、Arm CompilerV5
1.定義變量時(shí),使用編譯器擴(kuò)展屬性__attribute__((section(“name”), zero_init))來將變量放入指定段中。其中section(“name”)選擇一個(gè)指定的段,zero_init告訴編譯器將變量放入ZI段。
uint32_t phy_link_init_flag __attribute__((section("NO_INIT"), zero_init));
在分散加載文件中,定義名為NO_INIT的段。注意該段所在的可執(zhí)行域要具有UNINIT屬性。
LR_IROM1 0x00000000 0x00080000 { ; load region size_region 從0扇區(qū)開始
ER_IROM1 0x00000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x10000000 0x0000F000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x1000F000 UNINIT 0x00001000 {
.ANY (NO_INIT)
}
}
二、Arm CompilerV6
1.定義變量時(shí),使用編譯器擴(kuò)展屬性__attribute__((section(“name”)))來將變量放入指定段中。其中section(“name”)選擇一個(gè)指定的段。
uint32_t phy_link_init_flag __attribute__((section(".bss.NO_INIT")));
2.在分散加載文件中,定義名為.bss.NO_INIT的段,其中前綴.bss是必須的,并且只能為小寫。這個(gè)前綴表明該數(shù)據(jù)段具有ZI屬性。注意該段所在的可執(zhí)行域要具有UNINIT屬性
LR_IROM1 0x00000000 0x00080000 { ; load region size_region 從0扇區(qū)開始
ER_IROM1 0x00000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x10000000 0x0000F000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x1000F000 UNINIT 0x00001000 {
.ANY (.bss.NO_INIT)
}
}
3. Arm? Compiler 6 如何將數(shù)據(jù)放入指定位置
Arm? Compiler 5 支持at(address)擴(kuò)展指令,但是在Arm? Compiler 6 中是不支持的,第3節(jié)給出了解決方案,使用__attribute__((section(“.ARM.__at_address”)))來代替at(address)擴(kuò)展指令,本節(jié)描述如何實(shí)施。
定義變量,使用編譯器擴(kuò)展屬性使用:
int my_peripheral __attribute__((section(".ARM.__at_0x10000000"))) = 0;
在分散加載文件中,定義名為.ARM.__at_0x10000000的段:文章來源:http://www.zghlxwxcb.cn/news/detail-858383.html
LR_1 0x040000 ; load region starts at 0x40000
{ ; start of execution region descriptions
ER_RO 0x040000 ; load address = execution address
{
*(+RO +RW) ; all RO sections (must include section with initial entry point)
}
}
LR_2 0x01000000
{
ER_ZI +0 UNINIT
{
*(.bss)
}
}
LR_3 0x10000000
{
ER_PERIPHERAL 0x10000000 UNINIT
{
*(.ARM.__at_0x10000000)
}
}
參考鏈接:添加鏈接描述文章來源地址http://www.zghlxwxcb.cn/news/detail-858383.html
到了這里,關(guān)于Keil MDK下如何設(shè)置非零初始化變量 及變量指定位置- Arm CompilerV5 和 V6區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!