《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPost
2013-12-12 12:53
225 查看
第五篇:完善的协作式的内核——OSTaskSemPost
//发送一个信号量,可以从任务或中断发送 void OSSemPost(unsigned char Index) { if(Sem[Index].OSEventType) //当要求的信号量是共享型 { Sem[Index].OSEventState=0x01; //使信号量有效 OSRdyTbl |=Sem [Index].OSTaskPendTbl; //使在等待该信号的所有任务就绪 Sem[Index].OSTaskPendTbl=0; //清空所有等待该信号的等待任务 } else //当要求的信号量为独占型 { unsigned char i; for (i = 0; i < OS_TASKS && !(Sem[Index].OSTaskPendTbl & (0x01<<i)); i++); if(i < OS_TASKS) //如果有任务需要 { Sem[Index].OSTaskPendTbl &= ~(0x01<<i); //从等待表中去除 OSRdyTbl |= 0x01<<i; //任务就绪 } else { Sem[Index].OSEventState =1; //使信号量有效 } } } //从任务发送一个信号量,并进行调度 void OSTaskSemPost(unsigned char Index) { OSSemPost(Index); OSSched(); }
相关文章推荐
- 《建立一个属于自己的AVR的RTOS》笔记——OSStartTask
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSuspend
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPend
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskResume
- 《建立一个属于自己的AVR的RTOS》笔记——OSTaskCreate
- 《建立一个属于自己的AVR的RTOS》笔记——OSSemCreate
- 《建立一个属于自己的AVR的RTOS》笔记——时间片轮番调度
- 《建立一个属于自己的AVR的RTOS》笔记——时钟节拍中断对比
- 《建立一个属于自己的AVR的RTOS》笔记——任务调度对比
- 《建立一个属于自己的AVR的RTOS》笔记——AVR中断
- 《建立一个属于自己的AVR的RTOS》笔记——完善的占先式内核
- 51操作系统学习笔记(四):建立一个属于自己的AVR的RTOS(2)
- 51操作系统学习笔记(三):建立一个属于自己的AVR的RTOS(1)
- 《建立一个属于自己的AVR的RTOS》笔记——OSSched
- 《建立一个属于自己的AVR的RTOS》笔记——引言、资料下载
- 《建立一个属于自己的AVR的RTOS》笔记——任务切换全过程
- 《建立一个属于自己的AVR的RTOS》笔记——OSTimeDly
- 建立一个属于自己的AVR的RTOS(转)
- 建立一个属于自己的AVR的RTOS
- 51操作系统学习笔记(五):建立一个属于自己的AVR的RTOS(3)