關(guān)鍵詞:不被初始化,編譯環(huán)境
目錄預(yù)覽
1、前言
2、IAR 實(shí)現(xiàn)變量不初始化方法
3、Keil 實(shí)現(xiàn)變量不被初始化方法
4、CubeIDE 實(shí)現(xiàn)變量不初始化方法
01
前言
有些時(shí)候在我們的應(yīng)用過(guò)程中要求變量有連續(xù)性,或者現(xiàn)場(chǎng)保留,例如 Bootloader 跳轉(zhuǎn),某種原因的復(fù)位過(guò)程中我們有些關(guān)鍵變量不能被初始化,在不同的編譯環(huán)境下有不同的設(shè)置,本文就這個(gè)操作做總結(jié),分別介紹使用 Keil,IAR 和 CubeIDE 的操作方法,本文中所用芯片為STM32G431RBT6。
02
IAR 實(shí)現(xiàn)變量不初始化方法
IAR 實(shí)現(xiàn)相對(duì)簡(jiǎn)單,直接使用“__no_init”這個(gè)關(guān)鍵字即可,也就是在變量前面進(jìn)行修飾:
為了驗(yàn)證是否執(zhí)行成功,可以考慮周期性讓系統(tǒng)復(fù)位,看變量的變化,比如下面的示例程序讓系統(tǒng)周期復(fù)位,會(huì)發(fā)現(xiàn)每次 Test_NoInit 數(shù)據(jù)都是在上次數(shù)據(jù)基礎(chǔ)上增加 10,而不是被初始化后的數(shù)據(jù)增加 10。
03
Keil 實(shí)現(xiàn)變量不被初始化方法
Keil 中沒(méi)有像 IAR 里面的這個(gè)關(guān)鍵字,而且會(huì)有版本的區(qū)別,下面分別介紹:
圖1.Keil 不同編譯版本
為了防止未初始化的變量被初始化為 0,要將未初始化的變量放在一個(gè)特殊段內(nèi),這個(gè)段滿(mǎn)足是 ZI 數(shù)據(jù)段(.bss),它的執(zhí)行域(region)具有 UNINIT 屬性。
修改工程的 linker file 文件,*.sct 文件
圖2.修改默認(rèn) linker file
這邊將 RAM 劃分兩個(gè)區(qū)間,其中 RW_IRAM2 就是我們要的變量不初始化區(qū)域,屬性為UNINIT,定義一個(gè) region 名字 NO_INIT.
3.2. Arm Compiler 6 的操作
在 AC6 上面需要加入.bss 這個(gè) ZI 定義,如下的 sct 文件修改:
變量定義到 section 部分,AC5 和 AC6 也是有區(qū)別的,不再支持 zero_init 這個(gè)修飾,如下定義:
對(duì)于版本 AC5 和 AC6 具體區(qū)別可以參考 Keil 幫助文件中的描述:
圖3.Keil 幫助文件關(guān)于 zero initialized
04
CubeIDE 實(shí)現(xiàn)變量不初始化方法
CubeIDE 的實(shí)現(xiàn)和 Keil 有類(lèi)似的操作,需要修改 linker file 文件*.ld。首先對(duì) RAM 進(jìn)行劃分,劃分出不初始化的 RAM 區(qū)域:
圖4.劃分 RAM 區(qū)域
增加區(qū)域描述,并且加入?yún)^(qū)域名字:
圖5.區(qū)域描述,名字定義
定義變量到這個(gè)不初始化區(qū)域中:
另外,還提醒一點(diǎn),有些 STM32 系列有專(zhuān)門(mén)針對(duì)特定 RAM 區(qū)復(fù)位后是否會(huì)被初始化的 Option 配置位。比方 STM32L4 系列,想讓 SRAM2 變量不被初始化,得配置選項(xiàng)字節(jié)中的 SRAM2_RST位。如下圖所示:
原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | Keil、IAR、CubeIDE 中變量不被初始化方法
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
單片機(jī)
+關(guān)注
關(guān)注
6023文章
44376瀏覽量
628444 -
STM32
+關(guān)注
關(guān)注
2258文章
10828瀏覽量
352499
原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | Keil、IAR、CubeIDE 中變量不被初始化方法
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論