《建立一个属于自己的AVR的RTOS》笔记——OSSched
2013-12-12 11:03
381 查看
第四篇:只有延时服务的协作式的内核——OSSched
![](http://img.blog.csdn.net/20131212105427593)
![](http://img.blog.csdn.net/20131212105552328)
![](http://img.blog.csdn.net/20131212105730343)
![](http://img.blog.csdn.net/20131212105839750)
任务切换的核心操作:
入栈——>保存SP——>查找最高任务——>装载SP——>出栈——>中断返回
//进行任务调度 void OSSched(void) { // 根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况 PUSH_ALL; TCB[OSTaskRunningPrio].OSTaskStackTop=SP; //将正在运行的任务的堆栈底保存 unsigned char OSNextTaskID; //在现有堆栈上开设新的空间 for (OSNextTaskID = 0; //进行任务调度 OSNextTaskID < OS_TASKS && !(OSRdyTbl & (0x01<<OSNextTaskID)); OSNextTaskID++); OSTaskRunningPrio = OSNextTaskID ; cli(); //保护堆栈转换 SP=TCB[OSTaskRunningPrio].OSTaskStackTop; sei(); //根据中断时的出栈次序 POP_ALL; //中断时出栈完成 }
任务切换的核心操作:
入栈——>保存SP——>查找最高任务——>装载SP——>出栈——>中断返回
相关文章推荐
- 《建立一个属于自己的AVR的RTOS》笔记——时间片轮番调度
- 《建立一个属于自己的AVR的RTOS》笔记——OSStartTask
- 《建立一个属于自己的AVR的RTOS》笔记——时钟节拍中断对比
- 51操作系统学习笔记(三):建立一个属于自己的AVR的RTOS(1)
- 《建立一个属于自己的AVR的RTOS》笔记——任务调度对比
- 51操作系统学习笔记(四):建立一个属于自己的AVR的RTOS(2)
- 《建立一个属于自己的AVR的RTOS》笔记——AVR中断
- 《建立一个属于自己的AVR的RTOS》笔记——完善的占先式内核
- 《建立一个属于自己的AVR的RTOS》笔记——任务切换全过程
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSuspend
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPend
- 《建立一个属于自己的AVR的RTOS》笔记——引言、资料下载
- 《建立一个属于自己的AVR的RTOS》笔记——OSTimeDly
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskResume
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskCreate
- 《建立一个属于自己的AVR的RTOS》笔记——OSSemCreate
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPost
- 建立一个属于自己的AVR的RTOS
- 51操作系统学习笔记(五):建立一个属于自己的AVR的RTOS(3)
- 建立一个属于自己的AVR的RTOS(转)