您的位置:首页 > 其它

《建立一个属于自己的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();
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: