chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(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è)段滿足是 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)注

    6078

    文章

    45565

    瀏覽量

    673270
  • STM32
    +關(guān)注

    關(guān)注

    2312

    文章

    11189

    瀏覽量

    374505

原文標(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)推薦
    熱點(diǎn)推薦

    ELF-RV112B RKNN模型加載與運(yùn)行時(shí)初始化

    ELF-RV112B RKNN模型加載與運(yùn)行時(shí)初始化
    的頭像 發(fā)表于 04-03 16:08 ?139次閱讀
    ELF-RV112B RKNN模型加載與運(yùn)行時(shí)<b class='flag-5'>初始化</b>

    如何在EtherCAT從站上增加模擬量輸入AI變量

    要在EtherCAT從站增加模擬量輸入AI變量,首先需更新從站設(shè)備程序,定義新的AI變量初始化。
    的頭像 發(fā)表于 03-11 16:30 ?211次閱讀
    如何在EtherCAT從站上增加模擬量輸入AI<b class='flag-5'>變量</b>

    PC強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制(一):C#的EtherCAT總線初始化(下)

    通過(guò)使用配置工具導(dǎo)出ZAR文件進(jìn)行EtherCAT總線初始化
    的頭像 發(fā)表于 02-05 10:00 ?2139次閱讀
    PC強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    MCU工程初始化,到底該不該交給工具?

    初始化 MCU特殊外設(shè)或硬件約束 工程驗(yàn)證和調(diào)試 結(jié)論 交給工具并不意味著放棄控制 而是讓工程師從重復(fù)操作解放出來(lái) 專(zhuān)注于不可自動(dòng)的高價(jià)值工作 審核編輯 黃宇
    的頭像 發(fā)表于 01-29 10:18 ?232次閱讀
    MCU工程<b class='flag-5'>初始化</b>,到底該不該交給工具?

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業(yè)以太網(wǎng)通信協(xié)議,廣泛應(yīng)用于工業(yè)自動(dòng)領(lǐng)域。其初始化過(guò)程是確保系統(tǒng)穩(wěn)定運(yùn)行
    的頭像 發(fā)表于 12-22 10:10 ?911次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    瀚海微SD NAND TF卡硬件識(shí)別與初始化類(lèi)問(wèn)題探討

    在瀚海微SD NAND/TF卡的實(shí)際應(yīng)用,硬件識(shí)別與初始化是保障設(shè)備正常運(yùn)行的首要環(huán)節(jié),該環(huán)節(jié)出現(xiàn)故障會(huì)直接導(dǎo)致存儲(chǔ)卡無(wú)法投入使用,尤其在工業(yè)控制、車(chē)載設(shè)備等關(guān)鍵場(chǎng)景,可能引發(fā)設(shè)備停機(jī)、數(shù)據(jù)丟失
    的頭像 發(fā)表于 11-18 09:58 ?757次閱讀
    瀚海微SD NAND  TF卡硬件識(shí)別與<b class='flag-5'>初始化</b>類(lèi)問(wèn)題探討

    使用J-Link Attach NXP S32K3導(dǎo)致對(duì)應(yīng)RAM區(qū)域被初始化成0xDEADBEEF

    IAR Embedded Workbench for Arm中使用J-Link Attach NXP S32K3的時(shí)候,會(huì)提示對(duì)應(yīng)RAM區(qū)域被初始化成0xDEADBEEF,導(dǎo)致對(duì)應(yīng)RAM區(qū)域的數(shù)據(jù)被“篡改”。
    的頭像 發(fā)表于 11-03 15:26 ?5551次閱讀
    使用J-Link Attach NXP S32K3導(dǎo)致對(duì)應(yīng)RAM區(qū)域被<b class='flag-5'>初始化</b>成0xDEADBEEF

    串口通信基石:Air8000下Modbus RTU串口初始化詳解!

    串口初始化是Modbus RTU通信穩(wěn)定可靠的關(guān)鍵起點(diǎn)。本篇深入剖析Air8000開(kāi)發(fā)板串口參數(shù)配置、初始化代碼實(shí)現(xiàn)及調(diào)試要點(diǎn),結(jié)合master_rtu示例,分享實(shí)際操作經(jīng)驗(yàn)與避坑
    的頭像 發(fā)表于 10-28 16:33 ?1752次閱讀
    串口通信基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>詳解!

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

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

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

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

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

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

    GraniStudio:初始化例程

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

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

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

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

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

    移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的實(shí)戰(zhàn)經(jīng)驗(yàn)

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