- 任务切换是在中断函数运行完后调用
- 前后台系统是从中断处返回继续运行,多任务不同,需要通过一次任务调度来决定返回的去向(可能是一个优先级更高的任务)
- 本例程略简单,如果是任务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
最新推荐文章于 2020-04-17 23:50:28 发布