吴忠躺衫网络科技有限公司

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

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

3天內不再提示

實戰經驗 | Keil、IAR、CubeIDE 中變量不被初始化方法

STM32單片機 ? 來源:未知 ? 2023-11-24 18:05 ? 次閱讀


關鍵詞:不被初始化,編譯環境


目錄預覽

1、前言

2、IAR 實現變量不初始化方法

3、Keil 實現變量不被初始化方法

4、CubeIDE 實現變量不初始化方法


01

前言


有些時候在我們的應用過程中要求變量有連續性,或者現場保留,例如 Bootloader 跳轉,某種原因的復位過程中我們有些關鍵變量不能被初始化,在不同的編譯環境下有不同的設置,本文就這個操作做總結,分別介紹使用 Keil,IAR 和 CubeIDE 的操作方法,本文中所用芯片STM32G431RBT6。


02

IAR 實現變量不初始化方法


IAR 實現相對簡單,直接使用“__no_init”這個關鍵字即可,也就是在變量前面進行修飾:



為了驗證是否執行成功,可以考慮周期性讓系統復位,看變量的變化,比如下面的示例程序讓系統周期復位,會發現每次 Test_NoInit 數據都是在上次數據基礎上增加 10,而不是被初始化后的數據增加 10。



03

Keil 實現變量不被初始化方法


Keil 中沒有像 IAR 里面的這個關鍵字,而且會有版本的區別,下面分別介紹:


圖1.Keil 不同編譯版本


為了防止未初始化的變量被初始化為 0,要將未初始化的變量放在一個特殊段內,這個段滿足是 ZI 數據段(.bss),它的執行域(region)具有 UNINIT 屬性。


3.1. Arm Compiler 5 的操作


修改工程的 linker file 文件,*.sct 文件


圖2.修改默認 linker file


這邊將 RAM 劃分兩個區間,其中 RW_IRAM2 就是我們要的變量不初始化區域,屬性為UNINIT,定義一個 region 名字 NO_INIT.



變量定義到這個 section,這邊 AC5 要用到 zero_init 這個修飾。



3.2. Arm Compiler 6 的操作


在 AC6 上面需要加入.bss 這個 ZI 定義,如下的 sct 文件修改:



變量定義到 section 部分,AC5 和 AC6 也是有區別的,不再支持 zero_init 這個修飾,如下定義:



對于版本 AC5 和 AC6 具體區別可以參考 Keil 幫助文件中的描述:


圖3.Keil 幫助文件關于 zero initialized


04

CubeIDE 實現變量不初始化方法


CubeIDE 的實現和 Keil 有類似的操作,需要修改 linker file 文件*.ld。首先對 RAM 進行劃分,劃分出不初始化的 RAM 區域:


圖4.劃分 RAM 區域


增加區域描述,并且加入區域名字:


圖5.區域描述,名字定義



定義變量到這個不初始化區域中:



另外,還提醒一點,有些 STM32 系列有專門針對特定 RAM 區復位后是否會被初始化的 Option 配置位。比方 STM32L4 系列,想讓 SRAM2 變量不被初始化,得配置選項字節中的 SRAM2_RST位。如下圖所示:



完整內容請點擊“閱讀原文”下載原文檔。


原文標題:實戰經驗 | Keil、IAR、CubeIDE 中變量不被初始化方法

文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

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

    關注

    6043

    文章

    44622

    瀏覽量

    638529
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357555

原文標題:實戰經驗 | Keil、IAR、CubeIDE 中變量不被初始化方法

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-88:使用21xx編譯器在C初始化變量

    電子發燒友網站提供《EE-88:使用21xx編譯器在C初始化變量.pdf》資料免費下載
    發表于 01-13 15:54 ?0次下載
    EE-88:使用21xx編譯器在C<b class='flag-5'>中</b><b class='flag-5'>初始化</b><b class='flag-5'>變量</b>

    提升開關電源效率的理論分析與實戰經驗

    在這里有電源技術干貨、電源行業發展趨勢分析、最新電源產品介紹、眾多電源達人與您分享電源技術經驗,關注我們,與中國電源行業共成長! 提升開關電源效率的理論分析與實戰經驗 引言 開關電源設計,為獲得
    的頭像 發表于 01-09 10:04 ?339次閱讀
    提升開關電源效率的理論分析與<b class='flag-5'>實戰經驗</b>

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結合提供了強大的存儲解決方案。然而,不斷電初始化失效問題可能會導致系統穩定性和數據完整性受損。我們將STM32F407與SD NAND集成時可能遇到的初始化問題,并提供專業的解決方案。
    的頭像 發表于 12-11 10:51 ?436次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問題

    的圖; 2.第二張圖是該變量在文件的所有操作,第一行是初始化,該行代碼在初始化部分最后一個,執行完就是主循環了; 3.第2,3行也是對變量
    發表于 12-09 18:06

    基于旋轉平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對于視覺慣性里程計(VIO)至關重要,因為不良的初始化會嚴重降低姿態精度。
    的頭像 發表于 11-01 10:16 ?438次閱讀
    基于旋轉平移解耦框架的視覺慣性<b class='flag-5'>初始化</b><b class='flag-5'>方法</b>

    TMS320C6000 McBSP初始化

    電子發燒友網站提供《TMS320C6000 McBSP初始化.pdf》資料免費下載
    發表于 10-26 10:10 ?0次下載
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>

    視頻引擎初始化失敗怎么回事

    視頻引擎初始化失敗是一個常見的技術問題,它可能由多種原因引起,包括軟件沖突、硬件問題、驅動程序問題、系統設置錯誤等。要解決這個問題,需要對可能的原因進行詳細的分析和診斷。 1. 軟件沖突 1.1
    的頭像 發表于 09-18 18:18 ?1558次閱讀

    Keil變量不被初始化方法

    有些時候在我們的應用過程要求變量有連續性,或者現場保留,例如Bootloader跳轉,某種原因的復位過程我們有些關鍵變量不能被初始化,在
    的頭像 發表于 08-30 11:47 ?815次閱讀
    <b class='flag-5'>Keil</b><b class='flag-5'>中</b><b class='flag-5'>變量</b><b class='flag-5'>不被</b><b class='flag-5'>初始化</b><b class='flag-5'>方法</b>

    初始化IO口為外部中斷線的時候,最先初始化的會被后初始化的覆蓋掉為什么?

    初始化IO口為外部中斷線的時候,比如GPIOA6與GPIOB6先后初始化為外部中斷,最先初始化的會被后初始化的覆蓋掉,不知道是為什么?
    發表于 05-14 08:26

    STM32CubeIDE+FreeRtos+LWIP初始化不通過怎么解決?

    MX_LAIP_Init就過不去。調試代碼,發現HAL_Delay();函數出現錯誤。上網查了下,也有人碰到過,重構解決。然后還是過不去,調試發現創建任務時又出現了問題,卡在添加新鏈表上,不知道原因。大家這么用的時候,有沒有碰到過類似的問題,或者初始化的應該注意什么。
    發表于 04-15 07:42

    STM32F103RC變量初始化問題求解

    Test0變量的值一直是0x03,并且無法被初始化其他值。 例如:ArryTest[7]的地址為0x20000200,Test0 的地址為0x2000020e,則Test0 的值無法被修改,一直為0x03. 有哪位朋友遇到過這樣的問題沒有?
    發表于 04-10 07:35

    使用STM32CubeIDE初始化STM32407的SPI1(PB3)初始化失敗的原因?怎么解決?

    使用STM32CubeIDE初始化STM32407的SPI1(PB3)初始化失敗,有人知道原因嗎?
    發表于 03-25 07:50

    字符型、指針型等變量等該如何初始化

     對于數值類型的變量往往初始化為0,但對于其他類型的變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發表于 03-18 11:02 ?1621次閱讀

    MCU單片機GPIO初始化該按什么順序配置?為什么初始化時有電平跳變?

    GPIO初始化時有時鐘配置、模式配置、輸出配置、復用配置,那么在編寫初始化代碼時,到底該按什么順序執行呢?如果順序不當那初始化過程可能會出現短暫的電平跳變。
    的頭像 發表于 02-22 11:07 ?1658次閱讀
    MCU單片機GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時有電平跳變?

    rtc時鐘如何在啟動后會不被初始化為默認值?

    ? 2.我有一部分數據想保存在SRAM,軟件復位或者看門狗復位都不會被初始化,類似于stm32的靜態SRAM。這個我看是可以實現的,但是我找不到相應的例程。能夠提供幫助? 3.如果以上兩個問題,我這里
    發表于 02-21 06:08
    赌百家乐2号破解| 陆川县| 百家乐真人荷官| 英山县| 百家乐赌场娱乐城| 金城百家乐官网玩法| 百家乐出庄几率| 百家乐官网翻天粤语版| 大发888娱乐场 d188| 宝龙百家乐娱乐城| 百家乐官网的玩法视频| 百家乐赌场| 速博百家乐官网的玩法技巧和规则| 皇冠网新2| 打百家乐纯打庄的方法| 百家乐官网大钱赢小钱| 六合彩开奖查询| 百家乐二十一点| 百家乐官网跟路技巧| bet365地址| 百家乐破解方法技巧| 哪个百家乐官网网站信誉好| 888真人娱乐城| 怎么看百家乐的路| 免费下百家乐官网赌博软件| 六合彩开奖结果直播| A8百家乐娱乐网| 都坊百家乐官网的玩法技巧和规则| 岳阳县| 永利高a1| 爱拼百家乐现金网| 历史百家乐官网路单图| 澳门百家乐论坛| 威尼斯人娱乐城平台打不开| 百家乐视频双扣游戏| 博天堂百家乐官网官网| 凯里市| 大发888手机客户端| 历史百家乐路单图| 网上百家乐官网指| 足球百家乐官网投注|