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单片机】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663595
  • STM32
    +关注

    关注

    2305

    文章

    11121

    浏览量

    371170

原文标题:实战经验 | Keil、IAR、CubeIDE 中变量不被初始化方法

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    串口初始化是Modbus RTU通信稳定可靠的关键起点。本篇深入剖析Air8000开发板串口参数配置、初始化代码实现及调试要点,结合master_rtu示例,分享实际操作经验与避坑
    的头像 发表于 10-28 16:33 1442次阅读
    串口通信基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>详解!

    如何在RTT StudioKeil中一样定义一个RAM区域,并该区域RAM上电复位是不会被初始化的(sct分散加载)?

    keil可以设置一个ram的区域,存放于该区域的数据上电或复位是不会初始化的,在kei的操作以及生成的sct文件如下: 在IAR
    发表于 09-29 06:49

    Linux服务器性能调优的核心技巧和实战经验

    如果你正在为这些问题头疼,那么这篇文章就是为你准备的!作为一名拥有10年经验的运维工程师,我将毫无保留地分享Linux服务器性能调优的核心技巧和实战经验
    的头像 发表于 08-27 14:36 720次阅读

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

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入IO初始化以及IO资源配置例程,点击导入按钮。 打开IO初始化以及IO资源配置例程所在路径,选中IO初始化以及
    的头像 发表于 08-22 17:34 746次阅读
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO资源配置例程

    GraniStudio:初始化例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入初始化例程,点击导入按钮。 打开初始化例程所在路径,选中初始化.gsp文件,点击打开,完成导入。 2.功能
    的头像 发表于 08-22 16:45 705次阅读
    GraniStudio:<b class='flag-5'>初始化</b>例程

    定义IO初始化结构体

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构体类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此
    的头像 发表于 07-16 16:26 1108次阅读

    IM 系列设备过载保护机制下界面初始化中断的底层逻辑与解决方案

    一、过载保护机制与界面初始化的关联基础 IM 系列设备的过载保护机制是保障设备安全运行的核心功能,其通过传感器实时采集设备运行参数,如电流、电压、温度、系统资源占用率等。一旦这些参数超出预设阈值
    的头像 发表于 06-27 09:58 367次阅读

    移动电源EMC整改:认证失败到一次通过的实战经验

    深圳南柯电子|移动电源EMC整改:认证失败到一次通过的实战经验
    的头像 发表于 05-26 11:25 573次阅读
    移动电源EMC整改:认证失败到一次通过的<b class='flag-5'>实战经验</b>

    使用jlink连接mcu查看日志,偶发重新初始化,部分线程未退出,变量错位怎么解决?

    使用jlink连接mcu查看日志,偶发重新初始化,部分线程未退出,变量错位。 串口1的线程是在main最后面。 未见初始化打印,就已经发送数据了。并且发送的数据不对。感觉是重新初始化
    发表于 03-07 07:19

    EE-359:ADSP-CM40x启动时间优化和器件初始化

    电子发烧友网站提供《EE-359:ADSP-CM40x启动时间优化和器件初始化.pdf》资料免费下载
    发表于 01-13 16:33 0次下载
    EE-359:ADSP-CM40x启动时间优化和器件<b class='flag-5'>初始化</b>

    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 1802次阅读
    提升开关电源效率的理论分析与<b class='flag-5'>实战经验</b>

    OMAP5912多媒体处理器初始化参考指南

    电子发烧友网站提供《OMAP5912多媒体处理器初始化参考指南.pdf》资料免费下载
    发表于 12-17 16:20 0次下载
    OMAP5912多媒体处理器<b class='flag-5'>初始化</b>参考指南

    STM32F407 MCU使用SD NAND 不断电初始化失效解决方案

    STM32F407微控制器单元(MCU)与SD NAND的结合提供了强大的存储解决方案。然而,不断电初始化失效问题可能会导致系统稳定性和数据完整性受损。我们将STM32F407与SD NAND集成时可能遇到的初始化问题,并提供专业的解决方案。
    的头像 发表于 12-11 10:51 1481次阅读
    STM32F407 MCU使用SD NAND 不断电<b class='flag-5'>初始化</b>失效解决方案

    segger编译器初始化问题

    的图; 2.第二张图是该变量在文件的所有操作,第一行是初始化,该行代码在初始化部分最后一个,执行完就是主循环了; 3.第2,3行也是对变量
    发表于 12-09 18:06