STM32单片机,禁止系统启动时的变量初始化。
来源:互联网 发布:java开源的cms 编辑:程序博客网 时间:2024/06/16 18:58
使用这个功能是在IAP在线升级时需要用的。
最初使用在EEPROM或者FLASH存储一个标志位。程序跳转到BootLoader,BootLoader来判断是否需要升级。这样是可以用的,但是这样有个弊端:如果升级中出现问题,或者其他原因,导致主程序无法正常运行,看门狗咬死程序,程序复位。这样子的话,程序会一直在 引导--引导程序检测到不需要IAP--跳转到应用程序--看门狗咬死--复位--引导,进入死循环,程序判断不了应用程序已经坏掉。只能去现场来进行调试设备。
使用,禁止系统启动时的变量初始化。在BootLoader与应用程序,都在同一个地址定义相同的变量,在非断电初始化的时候,此变量是不会复位的。在BootLoader中,每初始化一次,对此变量+1,在应用程序当中赋值为0。当次变量大于一定的数值的时候,则认为应用程序有问题,重新进行IAP。当应用程序收到升级指令的时候,直接把这个变量赋值为相应的值。
STM32的开发环境有两种IAR与KEIL,这两种的禁止系统启动时的变量初始化的方式也是不同的。
方法如下:
IAR
直接定义变量: 在什么地址:
__no_init u16 Fg_Noinit@0x20000000;
如果不是IAP使用的话,可以这样:
_no_init u16 Fg_Noinit;
KEIL的方式略微复杂一些:
首先要在Target中对RAM做配置
NoInit某个地址范围
之后定义变量
__attribute__((at(0x20000000))) u8 Noinit;
阅读全文
0 0
- STM32单片机,禁止系统启动时的变量初始化。
- 51单片机定时器中断函数中变量初始化的问题
- 对于stm32单片机的
- 如何在系统启动时处理非平台的初始化操作
- 网络子系统初始化--系统启动时初始化
- STM32串口中断实验总结函数的初始化必须在变量的初始化之后在进行!
- STM32 串口初始化时的BUG
- stm32的I2C_Config初始化
- 51单片机有关变量及初始化问题
- 单片机的变量存储
- stm32变量的定义
- android系统启动时属性初始化过程
- JAVAWEB系统启动时,初始化配置文件信息
- STM32笔记----RTC的初始化
- STM32-M3系统启动
- STM32系统启动文件分析
- 我的单片机方法论2之STM32单片机特别篇
- stm32单片机数据传输的一些问题。
- 基础练习 龟兔赛跑预测
- 设计模式知识连载(14)---工厂方法模式:
- Spring 事物机制总结
- 总结 2017-12-12
- tab切换原生js新手
- STM32单片机,禁止系统启动时的变量初始化。
- JCrontab简单入门实例
- linux公钥私钥互联
- C语言基础
- 欢迎使用CSDN-markdown编辑器
- active dstat cmd
- AlertDialog自定义单选功能
- SSO-C#跨域单点登录(二)
- Glide(二)Request队列管理