18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

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

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

STM32單片機 ? 來源:未知 ? 2023-11-24 18:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群



關(guān)鍵詞:不被初始化,編譯環(huán)境


目錄預覽

1、前言

2、IAR 實現(xiàn)變量不初始化方法

3、Keil 實現(xiàn)變量不被初始化方法

4、CubeIDE 實現(xiàn)變量不初始化方法


01

前言


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


02

IAR 實現(xiàn)變量不初始化方法


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



為了驗證是否執(zhí)行成功,可以考慮周期性讓系統(tǒng)復位,看變量的變化,比如下面的示例程序讓系統(tǒng)周期復位,會發(fā)現(xiàn)每次 Test_NoInit 數(shù)據(jù)都是在上次數(shù)據(jù)基礎(chǔ)上增加 10,而不是被初始化后的數(shù)據(jù)增加 10。



03

Keil 實現(xiàn)變量不被初始化方法


Keil 中沒有像 IAR 里面的這個關(guān)鍵字,而且會有版本的區(qū)別,下面分別介紹:


圖1.Keil 不同編譯版本


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


3.1. Arm Compiler 5 的操作


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


圖2.修改默認 linker file


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



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



3.2. Arm Compiler 6 的操作


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



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



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


圖3.Keil 幫助文件關(guān)于 zero initialized


04

CubeIDE 實現(xiàn)變量不初始化方法


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


圖4.劃分 RAM 區(qū)域


增加區(qū)域描述,并且加入?yún)^(qū)域名字:


圖5.區(qū)域描述,名字定義



定義變量到這個不初始化區(qū)域中:



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



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


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

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

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

    關(guān)注

    6071

    文章

    45265

    瀏覽量

    660750
  • STM32
    +關(guān)注

    關(guān)注

    2301

    文章

    11084

    瀏覽量

    369786

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何在RTT StudioKeil中一樣定義一個RAM區(qū)域,并該區(qū)域RAM上電復位是不會被初始化的(sct分散加載)?

    keil可以設(shè)置一個ram的區(qū)域,存放于該區(qū)域的數(shù)據(jù)上電或復位是不會初始化的,在kei的操作以及生成的sct文件如下: 在IAR
    發(fā)表于 09-29 06:49

    Linux服務器性能調(diào)優(yōu)的核心技巧和實戰(zhàn)經(jīng)驗

    如果你正在為這些問題頭疼,那么這篇文章就是為你準備的!作為一名擁有10年經(jīng)驗的運維工程師,我將毫無保留地分享Linux服務器性能調(diào)優(yōu)的核心技巧和實戰(zhàn)經(jīng)驗。
    的頭像 發(fā)表于 08-27 14:36 ?563次閱讀

    GraniStudio:IO初始化以及IO資源配置例程

    1.文件運行 導入工程 雙擊運行桌面GraniStudio.exe。 通過引導界面導入IO初始化以及IO資源配置例程,點擊導入按鈕。 打開IO初始化以及IO資源配置例程所在路徑,選中IO初始化以及
    的頭像 發(fā)表于 08-22 17:34 ?651次閱讀
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO資源配置例程

    GraniStudio:初始化例程

    1.文件運行 導入工程 雙擊運行桌面GraniStudio.exe。 通過引導界面導入初始化例程,點擊導入按鈕。 打開初始化例程所在路徑,選中初始化.gsp文件,點擊打開,完成導入。 2.功能
    的頭像 發(fā)表于 08-22 16:45 ?618次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據(jù)情況配置它們。因此我們定義一個IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此
    的頭像 發(fā)表于 07-16 16:26 ?984次閱讀

    IM 系列設(shè)備過載保護機制下界面初始化中斷的底層邏輯與解決方案

    一、過載保護機制與界面初始化的關(guān)聯(lián)基礎(chǔ) IM 系列設(shè)備的過載保護機制是保障設(shè)備安全運行的核心功能,其通過傳感器實時采集設(shè)備運行參數(shù),如電流、電壓、溫度、系統(tǒng)資源占用率等。一旦這些參數(shù)超出預設(shè)閾值
    的頭像 發(fā)表于 06-27 09:58 ?275次閱讀

    移動電源EMC整改:認證失敗到一次通過的實戰(zhàn)經(jīng)驗

    深圳南柯電子|移動電源EMC整改:認證失敗到一次通過的實戰(zhàn)經(jīng)驗
    的頭像 發(fā)表于 05-26 11:25 ?470次閱讀
    移動電源EMC整改:認證失敗到一次通過的<b class='flag-5'>實戰(zhàn)經(jīng)驗</b>

    使用jlink連接mcu查看日志,偶發(fā)重新初始化,部分線程未退出,變量錯位怎么解決?

    使用jlink連接mcu查看日志,偶發(fā)重新初始化,部分線程未退出,變量錯位。 串口1的線程是在main最后面。 未見初始化打印,就已經(jīng)發(fā)送數(shù)據(jù)了。并且發(fā)送的數(shù)據(jù)不對。感覺是重新初始化
    發(fā)表于 03-07 07:19

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

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

    提升開關(guān)電源效率的理論分析與實戰(zhàn)經(jīng)驗

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

    OMAP5912多媒體處理器初始化參考指南

    電子發(fā)燒友網(wǎng)站提供《OMAP5912多媒體處理器初始化參考指南.pdf》資料免費下載
    發(fā)表于 12-17 16:20 ?0次下載
    OMAP5912多媒體處理器<b class='flag-5'>初始化</b>參考指南

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

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

    segger編譯器初始化問題

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

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

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

    TMS320C6000 McBSP初始化

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