NVIC_SystemReset,上电复位(BOD),看门狗复位的差异
在开发过程中,采用了NXP的LPC1857芯片,并使用FreeRtos进行任务管理。
IAP方式:采用UBOOT+APP方式进行软件架构。
问题描述:
1. 出现堆栈溢出,造成程序飞。
2. 使用NVIC_SystemReset实现APP跳转到UBOOT时,连续多次跳转,容易出现MCU崩溃。
解决办法:
1. 堆栈溢出的问题。
-- 起因:对分配失败(malloc)的缓存进行了赋值。
-- 解决办法:修改程序,检查所有malloc分配缓存的处理。
2. APP跳转到UBOOT时,连续多次跳转,容易出现MCU崩溃的问题。这个比较麻烦,详细说明如下。
针对问题2的解决办法:
1. 采用NVIC_SystemReset无效。
__set_FAULTMASK(1);NVIC_SystemReset();
2. 由于采用了FreeRtos,添加PSP和MSP初始化处理,无效。
__set_PSP(*(__IO uint32_t *)run_addr); __set_CONTROL(0);__set_MSP(*(__IO uint32_t *)run_addr);__set_FAULTMASK(1);NVIC_SystemReset();
3. core_cm3.h源码中,NVIC_SystemReset函数实现:
__DSB(); /* Ensure all outstanding memory accesses includedbuffered write are completed before reset */SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */__DSB(); /* Ensure completion of memory access */
通过分析源码,复位操作对应为:SYSRESETREQ
4. 《Cortex-M3权威指南》说明SYSRESETREQ由芯片厂商自定义:
5. 查询LPC1857的SYSRESETREQ可以看到:“The ARM Cortex-M3 SYSRESETREQ triggers a peripheral reset PERIPH_RST.”
6. 通过查看LPC1857的Reset output configuration,可以看到PERIPH_RST是一个不完全复位。其中不包括CREG_RST。
7. 为了安全,我们应该做的是CORE_RST,包括:PERIPH_RST + WWDT_RST + CREG_RST。
8. 但是,CORE_RST触发源,仅包括:上电复位 / 看门狗复位 / 外部复位脚(external_rest_pin)。
总结:(针对LPC1857芯片)
1. NVIC_SystemReset,仅为PERIPH_RST。
2. PERIPH_RST,对FreeRtos系统下的程序跳转操作,不安全。
3. 如需安全,则需要实现CORE_RST。从目前来看,只能通过看门狗超时实现。
NVIC_SystemReset,上电复位(BOD),看门狗复位的差异相关推荐
- STM32的复位方式:硬件复位、软件复位(看门狗复位和系统复位)
STM32的复位方式:硬件复位.软件复位(看门狗复位和系统复位). 1.硬件复位: 硬件复位通过给NRST引脚输入低电平复位单片机. 2.看门狗复位: 独立看门狗和窗口看门狗. (1)独立看门狗 ST ...
- STM32,软复位,上电复位,看门狗复位对芯片IO状态的影响?
这个问题比较重要. 有网友问: 大家好,我是做工业控制的,我想问一下STM32如何实现看门狗复位不初始化RAM区,因为是做控制的所以我们想实现CPU热复位后系统能接着原来的流程走,动作开出能不受看门狗 ...
- 如何判断设备是上电复位还是软复位(主动调用复位接口或者看门狗复位,W600)
有客户要在一种场景中要知道复位原因,需要区别开芯片是上电复位还是看门狗复位.因为 w600的芯片没有类似的寄存器来存储这个复位原因,于是就想了个办法来实现它.经测试,是可行的. 大致原理就是在一块程序 ...
- 窗口看门狗的作用是什么?窗口看门狗复位分析
一,窗口看门狗介绍 独立看门狗的喂狗范围 0-X(X由预分频器和重装载值决定,最大值为0xFFF) 独立看门狗相关介绍:传送门:独立看门狗 相比于独立看门狗,窗口看门狗限定了喂狗时间段(由喂狗上限和喂 ...
- stm32 看门狗 BKP(HAL库)
(一)概述 stm32有两个看门狗:硬件看门狗(LSI 40KHz,时间精度不高)和窗口看门狗(APB1). (二)硬件看门狗实现代码 IWDG_HandleTypeDef hiwdg;// 硬件看门 ...
- STM32F10xx中独立看门狗(IWDG)和窗口看门狗(WWDG)介绍
本文大部分内容只用到了键盘的3个按键-你懂的 . 简单总结,Markdown了解一下,推荐. 1.看门狗电路介绍 看门狗电路(watchdog timer),又称监控电路.百度百科解释的很详细: 在由 ...
- ARM 看门狗机制 [包括MTK] 【1】
watchdog一般是一个硬件模块(其实可以当做是一个定时器),其作用是,在嵌入式操作系统中,很多应用情况是系统长期运行且无人看守,导致程序跑飞,所以难免怕万一出现系统死机,那就悲剧了,这时,watc ...
- STM32 待机模式与看门狗和谐相处
由于在standby mode,看门狗仍然能继续工作,但是其他时钟都关闭了,没法喂狗,这样会导致mcu不停复位.网上找的方法如下:1. 开启RTC,定期喂狗后再次睡眠.该方法视乎可行,但是不够省电. ...
- java线程看门狗,ARM之看门狗~! - junjun - JavaEye技术网站 - 小陈的日志 - 网易...
看门狗(watchdog)包括一个4分频的预分频器和一个32位的计数器,时钟通过预分频器输入定时器.定时器递减计数,递减的最小值为0XFF.如果设置一个小于0XFF的值,系统会将0XFF装入计数器,因 ...
最新文章
- 18个让程序员流泪的瞬间,已笑喷,哈哈哈哈哈哈!
- matlab 设置最大并行数_浅析线程池参数设置
- 8 张图,看你是否理解 Java
- Jenkins FTP 上传
- 分页控件 实战 Post篇
- ProxyChains
- dbunit java_java - 错误地抛出了Java DBUnit AmbiguousTableNameException - 堆栈内存溢出
- Bootstrap研究3-基础html元素
- js $.inArray
- 机器学习作业班_python实现支持向量机
- 怎样学好计算机——计算机达人成长之路(23)
- Python 数学建模算法与应用(持续更新)
- Win11中文包下载失败?Win11无法安装中文包语言包解决方法
- sed 替换字符串以变量形式
- Mac 上如何使用burpsuite(以谷歌浏览器为例)
- 视频教程-计算机二级(VB)-计算机等级考试
- “JSON parse error: Unexpected character (‘\“‘ (code 34)): was expecting comma to separate Object ent
- 计算机控制原理 实验,计算机控制原理实验-直流电机实验
- Java生成微信群组图标
- GateWay的介绍与使用