KEIL环境下STM32L476工程定义非零初始化变量

编译器V6.22

工程配置

在这里插入图片描述

.sct文件代码修改

STM32L476内存64位对齐

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x0000A000  {    ; load region size_region
  ER_IROM1 0x08000000 0x0000A000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  MY_IRAM 0x20000000 UNINIT 0x00000004  {  ; RW data
   *(.bss.NoInit)
  }
  RW_IRAM1 0x20000008 0x00017FF8  {  ; RW data
   .ANY (+RW +ZI)
  }

  RW_IRAM2 0x10000000 0x00008000  {
   .ANY (+RW +ZI)
  }
}

变量应用

uint32_t g_JumpInit __attribute__((section(".bss.NoInit")));
if(g_JumpInit == 0xAA553344)
{
	// 。。。
}

作用

在RAM中创建一个不会被初始化的区域,保证断电重启后变量不会被清除

应用场景

可作为BOOT程序与APP程序共享区域使用

使用原因

最近在开发一款Keil环境下的STM32L476项目,库函数为HAL库,实现BOOT升级APP程序功能,需要一个标志位在启动进入BOOT程序时判断直接跳转APP还是升级程序;
刚开始使用内部Flash,测试发现在BOOT程序中读写擦除一切正常,跳转APP程序后经常出现写入失败情况,原因最终并未查找到;
现改为非零初始化变量实现此需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值