- 任务切换是在中断函数运行完后调用
- 前后台系统是从中断处返回继续运行,多任务不同,需要通过一次任务调度来决定返回的去向(可能是一个优先级更高的任务)
- 本例程略简单,如果是任务1下个就是任务2;如果是任务2下个就是任务1;
- 例程:
/********************************************************* * 函数名: void OSSched(void); * 描述 :任务调度 * 输入 :无 * 输出 :无 * 返回 :无 * 调用 :内部调用 **********************************************************/ void OSSched(void) { if(OSTCBCurPtr == OSRdyList[0].HeadPtr) { OSTCBHighRdyPtr = OSRdyList[1].HeadPtr; } else { OSTCBHighRdyPtr = OSRdyList[0].HeadPtr; } OS_TASK_SW(); //触发PendSV异常 } /* ************************************************************************************************************************ * 宏定义 ************************************************************************************************************************ */ #ifndef NVIC_INT_CTRL #define NVIC_INT_CTRL *((CPU_REG32 *)0xE000ED04) /* 中断控制及状态寄存器 SCB_ICSR */ #endif #ifndef NVIC_PENDSVSET #define NVIC_PENDSVSET 0x10000000 /* 触发PendSV异常的值 Bit28:PENDSVSET */ #endif #define OS_TASK_SW() NVIC_INT_CTRL = NVIC_PENDSVSET #define OSIntCtxSw() NVIC_INT_CTRL = NVIC_PENDSVSET - 总结:无
【10】从0到1教你写uC/OS-III————>任务切换OSSched
最新推荐文章于 2024-08-17 13:42:58 发布
本文详细解析了在嵌入式系统中,任务调度的具体实现方式,包括如何通过中断函数完成任务切换,以及前后台系统与多任务之间的区别。通过具体例程展示了任务调度函数的工作流程,介绍了触发PendSV异常进行任务切换的底层机制。
344

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



