Nuvoton Keil技巧篇2 -- Cortex-M 变量初始化

        很多小伙伴使用新唐Cortex-M系列产品时,老是会忘记对变量进行初始化,比如指针、数组等,并认为系统默认就会给定义的变量初始化的。

        我们来验证看看,我们定义两个变量,一个全局变量u16ADCData0和一个局部变量u16ADCData1。

        如下工程所示,在debug模式下,地址分配情况:u16ADCData0指向地址0x20000068, u16ADCData1没有指向地址。

        通过打印的log信息来看,u16ADCData0 = 0x0000 ,u16ADCData1 = 0x40070000。很明显,局部变量u16ADCData1默认没有清零。

打开keil 配置发现优化等级选的是O3。

            我们来了解下优化等级的差异:

          O0:几乎不优化,断点可以任意打,任何变量都可以监测,调试阶段建议用这个等级。
          O1:轻度优化,有些代码打不了断点。
          O2:中度优化,Debug时代码有时会乱跳。
          O3:重度优化,代码编译后最省空间。

         我们把优化等级改成O0再测验证看看情况。

         在debug模式下,地址分配情况:u16ADCData0指向地址0x20000068, u16ADCData1指向地址0x20000240。

         通过打印的log信息来看,u16ADCData0 = 0x0000 ,u16ADCData1 = 0x0000 。

      综上验证结论:

      1、优化等级0时,为所有变量分配内存地址,全局变量和局部变量会进行自动清零。缺点是占用较大程序空间。

      2、优化等级3时,优化掉局部变量,不会为其分配内存地址,所以查不到内存地址。全局变量会自动清零,局部变量不会自动清零。这样不便于程序开发调试。好处是占用较小程序空间。

      3、建议所有变量都建议手动进行赋初值。

点击此处查看更多关于Nuvoton系列的技术干货吧!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值