1,卡死在vPortRaiseBASEPRI函数里
static portFORCE_INLINE void vPortRaiseBASEPRI( void )
{
uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
__asm
{
/* Set BASEPRI to the max syscall priority to effect a critical
* section. */
/* *INDENT-OFF* */
msr basepri, ulNewBASEPRI
dsb
isb
/* *INDENT-ON* */
}
}
我找到的原因:创建的任务函数退出了。比如下面图片的示例,没有while循环,进入之后直接退出
2,内存优化
方法1:减少不必要的任务优先级1个优先级占用20B的空间
#define configMAX_PRIORITIES ( 16 )
3,硬件中断
优先考虑堆栈不足
一般的问题参考https://blog.csdn.net/weixin_43862847/article/details/105683634
分析的时候后,断点要打在hardfault_handler函数入口处,如果发现堆栈被破坏了,栈内PC指针指向非代码或者内存空间,优先考虑堆栈不足
注意:单步调试下水位线不一定准确,全速不出错才是真的没问题。