jplzl10000 发表于 2024-1-4 19:35:46

ucos-ii 进入到 App_Fault_ISR

RT,在F030CC上面跑了个ucos-ii。运行一段时间就进入到 App_Fault_ISR 这个死机了。

奇怪的是,只有全速运行才会进入,在debug模式下,F11单步就一直不会进入到这个异常中。
这种情况,是没有移植好,还是应用代码有问题呀

yklstudent 发表于 2024-1-4 20:51:50

简化应用代码跑看看是否还会存在死机问题

eric2013 发表于 2024-1-5 08:42:26

这种的一般是延迟类API没有正常执行导致的。

可以所有外设初始化都注释掉,并且仅创建一个任务测试。

jplzl10000 发表于 2024-1-5 09:04:44

yklstudent 发表于 2024-1-4 20:51
简化应用代码跑看看是否还会存在死机问题
搞个测试代码不会有问题。现在发现可能是TIM3/TIM16 这2个定时器触发的问题。
F5运行时,在等待这个sys_sem1信号量时会进入到 App_Fault_ISR。
而sys_sem1这个信号量是在 TIM16 的中断函数 BSP_IntHandler_tim16 里面调用函数发出来的。
把断点打在 OSSemPost(sys_sem1); 这个OSSemPost()函数里面的话,都不会死机了,都能顺利等待sys_sem1的发送。
但只要是F5运行,就会死



eric2013 发表于 2024-1-6 09:49:36

jplzl10000 发表于 2024-1-5 09:04
搞个测试代码不会有问题。现在发现可能是TIM3/TIM16 这2个定时器触发的问题。
F5运行时,在等待这个sys_ ...

设置NVIC的重点优先级分组为4, 即仅有抢占优先级,你的这个定时器中断设置为最高的0级抢占优先级。

如果这样还有问题,你的这个信号量处理逻辑有问题。我看你的截图里面还有手动SemSet这种操作。

jplzl10000 发表于 2024-1-18 21:13:27

eric2013 发表于 2024-1-6 09:49
设置NVIC的重点优先级分组为4, 即仅有抢占优先级,你的这个定时器中断设置为最高的0级抢占优先级。

...

堆栈问题啊;P调用任务创建时栈顶参数给错了。栈是向下生长的。结果有个任务实际上就只分配了一个单位的堆栈

eric2013 发表于 2024-1-19 08:52:55

jplzl10000 发表于 2024-1-18 21:13
堆栈问题啊调用任务创建时栈顶参数给错了。栈是向下生长的。结果有个任务实际上就只分配了一个单位的 ...

这操作。。。
页: [1]
查看完整版本: ucos-ii 进入到 App_Fault_ISR