中级会员
- 积分
- 279
- 金钱
- 279
- 注册时间
- 2021-2-5
- 在线时间
- 133 小时
|
程序分为三个部分,IAP, APP, 备份区域。同时还将内部FLASH模拟EEPROM进行使用,存储升级的相关参数以及其它信息。现象: 现在的问题是设备不升级就没有问题,升级成功直接跳到app没问题,升级失败调用备份程序也没问题。 但是一旦升级成功,不论是软件重启还是硬件重启,都会将程序卡死,
参考: 卡死的位置都在同一个函数里面,也就是获取所有参数信息的Getalldata,这个函数的作用就是将flash里面存储的参数读取出来供判断,为了规避干扰,我将整个过程设置为临界保护段,但是退出临界区的时候,直接卡死
疑惑: 问题是因为 uxCriticalNesting 这个变量是一个非常大的值,导致无法退出,这是我怎么都想不明白的,因为这个值在任务调度器的调度函数里面已经初始化为0了,怎么会被改变呢? 我的临界区也是成对使用的,同时这个临界区使用是在任务调度之后,此时uxCriticalNesting 已经被赋值为0了
个人思考:思考1、首先这个临界区并不是把所有中断都屏蔽的,中断优先级在0 ~ 4直接是无法打断的, 思考2、升级成功之后并重启才会出问题,期间失败去调用备份都不会出现这个问题,那升级过程中到底改变了什么未知的部分,因为所有内存部分都是规划好的 思考点3、程序卡死之后,我将IAP以及APP的Getalldata都屏蔽了,程序正常运行,但是加上之后又卡死
|
|