项目场景:
`提示:FreeRTOS Priority 引起的assert问题
问题描述
提示:这里描述项目中遇到的问题:
当时在CM3平台timer0 callback中调用xQueueSendFromISR函数,导致assert 发生。如下图所示
原因分析:
1、查看port.c 得到死机的原因,如下
2、从上图可知是 Priority 优先级出了问题,由于用的是timer0 的callback,查看平台中对timer0 中断的IRQn_Type 定义,
freeRTOS 中允许中断嵌套的优先级如下图,优先级0~4 是不允许中断调用FreeRTOS 中的API函数。
3、从 https://blog.csdn.net/sinat_23338865/article/details/52640028 补充一下 优先级的一些知识,在此引用原文,如有不妥之处,请联系我删除,感谢。
解决方案:
调用原生API 重新设定timer0 的优先级
NVIC_SetPriority(Timer0_IRQn, 5);
心得,遇到问题不要慌,抽丝剥茧方可想到好的办法。