前些天跟随正点原子学习freertos的过程中遇到一个问题,当时在网上查找了很久也没有找到解决的方法。后来,通过阅读.C文件找到原因。在此,分享出来,希望可以帮助到有需要的朋友。
在任务挂起与恢复中,
configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); 遇到port.c中的该语句报错,本想着是中断管理优先级的问题,但优先级并没有发生冲突。
后来,在阅读中断函数的代码发现,我错误使用了包含freertos的vTaskdelay()的延时函数。在正点原子老师讲课提到在中断不调用vTaskdelay作为延时函数。在中断中只能使用freertos中带有ISR的函数。
在正点原子提供的delay.c中delay_ms是包含vTaskdelay的。所以不能使用,否则会导致程序卡在configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
警示:以后在使用别人的模块化的函数要注意仔细阅读,否则容易出现一些意想不到的事情。
希望可以帮助到有需要的朋友们。