精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)戰(zhàn)經(jīng)驗(yàn) | Keil、IAR、CubeIDE 中變量不被初始化方法

STM32單片機(jī) ? 來(lái)源:未知 ? 2023-11-24 18:05 ? 次閱讀


關(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 屬性。


3.1. Arm Compiler 5 的操作


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


圖2.修改默認(rèn) linker file


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



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



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位。如下圖所示:



完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。


原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | Keil、IAR、CubeIDE 中變量不被初始化方法

文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Keil變量不被初始化方法

    有些時(shí)候在我們的應(yīng)用過(guò)程要求變量有連續(xù)性,或者現(xiàn)場(chǎng)保留,例如Bootloader跳轉(zhuǎn),某種原因的復(fù)位過(guò)程我們有些關(guān)鍵變量不能被初始化,在
    的頭像 發(fā)表于 08-30 11:47 ?199次閱讀
    <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>

    STM32F103RC變量初始化問(wèn)題求解

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

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

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

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

     對(duì)于數(shù)值類(lèi)型的變量往往初始化為0,但對(duì)于其他類(lèi)型的變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發(fā)表于 03-18 11:02 ?903次閱讀

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

    GPIO初始化時(shí)有時(shí)鐘配置、模式配置、輸出配置、復(fù)用配置,那么在編寫(xiě)初始化代碼時(shí),到底該按什么順序執(zhí)行呢?如果順序不當(dāng)那初始化過(guò)程可能會(huì)出現(xiàn)短暫的電平跳變。
    的頭像 發(fā)表于 02-22 11:07 ?1172次閱讀
    MCU單片機(jī)GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時(shí)有電平跳變?

    rtc時(shí)鐘如何在啟動(dòng)后會(huì)不被初始化為默認(rèn)值?

    ? 2.我有一部分?jǐn)?shù)據(jù)想保存在SRAM,軟件復(fù)位或者看門(mén)狗復(fù)位都不會(huì)被初始化,類(lèi)似于stm32的靜態(tài)SRAM。這個(gè)我看是可以實(shí)現(xiàn)的,但是我找不到相應(yīng)的例程。能夠提供幫助? 3.如果以上兩個(gè)問(wèn)題,我這里
    發(fā)表于 02-21 06:08

    dataflash的靜態(tài)變量初始化會(huì)變嗎,怎么改變變量的值?

    dataflash的靜態(tài)變量初始化會(huì)變嗎,怎么改變變量的值? 若系統(tǒng)啟動(dòng)初始化時(shí),不改變變量
    發(fā)表于 01-15 06:27

    使用SEGGER Embedded Studio編譯器發(fā)現(xiàn)變量無(wú)法自動(dòng)初始化

    使用SEGGER Embedded Studio編譯器發(fā)現(xiàn)變量無(wú)法自動(dòng)初始化, 例如聲明靜態(tài)變量static uint8_t i = 0;這種寫(xiě)法i成了靜態(tài)變量,但沒(méi)有
    發(fā)表于 01-11 14:21

    labview運(yùn)行后如何初始化

    LabVIEW是一款強(qiáng)大的圖形編程軟件,在運(yùn)行之前通常需要進(jìn)行一些初始化操作。本文將詳細(xì)介紹LabVIEW運(yùn)行前的初始化過(guò)程,并提供了一些常用的初始化
    的頭像 發(fā)表于 12-28 17:24 ?2072次閱讀

    自動(dòng)初始化機(jī)制原理詳解

    自動(dòng)初始化機(jī)制是指初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過(guò)宏定義的方式進(jìn)行申明,就會(huì)在系統(tǒng)啟動(dòng)過(guò)程中被執(zhí)行。這篇文章就來(lái)探索一下其中的奧秘, 簡(jiǎn)單理解其原理!
    的頭像 發(fā)表于 12-16 09:33 ?828次閱讀
    自動(dòng)<b class='flag-5'>初始化</b>機(jī)制原理詳解

    C語(yǔ)言編程時(shí),各種類(lèi)型的變量該如何初始化

    C語(yǔ)言編程時(shí),各種類(lèi)型的變量該如何初始化? 在C語(yǔ)言中,每個(gè)變量都需要在使用之前進(jìn)行初始化初始化是為
    的頭像 發(fā)表于 12-07 13:53 ?941次閱讀

    如何在博途環(huán)境下載但不重新初始化數(shù)據(jù)塊呢?

    現(xiàn)場(chǎng)設(shè)備運(yùn)行過(guò)程中有時(shí)候我們需要更改在線(xiàn)數(shù)據(jù)塊的結(jié)構(gòu)(比如增加一些變量),但是如果直接更改數(shù)據(jù)塊并下載會(huì)導(dǎo)致其重新初始化
    的頭像 發(fā)表于 11-10 09:25 ?1476次閱讀
    如何在博途環(huán)境下載但不重新<b class='flag-5'>初始化</b>數(shù)據(jù)塊呢?

    嵌入式全局變量初始化原理詳解

    全局變量初始值,是在哪里賦值的?
    的頭像 發(fā)表于 10-27 10:15 ?973次閱讀
    嵌入式全局<b class='flag-5'>變量</b>的<b class='flag-5'>初始化</b>原理詳解

    ST7789屏幕初始化的步驟

    st7789的屏幕構(gòu)建系統(tǒng)和配置 驅(qū)屏就是初始化 DC轉(zhuǎn)換和cs
    的頭像 發(fā)表于 10-16 09:27 ?4764次閱讀

    SD卡初始化及讀取程序

    電子發(fā)燒友網(wǎng)站提供《SD卡初始化及讀取程序.pdf》資料免費(fèi)下載
    發(fā)表于 10-13 09:50 ?2次下載
    SD卡<b class='flag-5'>初始化</b>及讀取程序