在使用FreeRTOS的过程中,我们会发现一个函数分为带FromISR和不带FromISR的。这也是FreeRTOS中一再强调的!!在中断中必须调用函数名以FromISR结尾的函数。
具体了解请看FreeRTOS学习笔记——中断与任务切换:https://www.sohu.com/a/253256697_774177,我就不复制转载了。
因此在我编写的代码中我会读取IPSR(中断程序状态寄存器)的值来判断当前是否处理中断状态。
/* read out IPSR register*/
register uint32_t __regIPSR __ASM("ipsr");
例如:
xTaskGetTickCount (FromISR)用于获取系统当前运行的时钟节拍数。
/*
*********************************************************************************************************
* 函 数 名: OS_getOSSysTick
* 功能说明: returns OS based system tick value.
* 形 参: 无
* 返 回 值: time stamp in ms, based on the OS time
*********************************************************************************************************
*/
uint32_t

本文探讨了FreeRTOS中带FromISR与不带FromISR函数的区别,解释了如何通过检查IPSR寄存器来判断当前是否处于中断状态,并提供了一个自定义函数OS_getOSSysTick的具体实现,用于根据不同情况调用正确的时钟节拍获取函数。
最低0.47元/天 解锁文章
677

被折叠的 条评论
为什么被折叠?



