ucosii两任务互发信号量,轮番执行怎么实现?

这个是我的代码,请高手帮忙解答。voidTask_LCD1(void*p_arg)//优先级为1{uint8_ti;(void)p_arg;while(1){////OS... 这个是我的代码,请高手帮忙解答。
void Task_LCD1(void *p_arg) //优先级为1
{
uint8_t i;
(void) p_arg;
while (1)
{
//
// OSMboxPend(Mbox2, 0, &err);
//
OSSemPend(Fun_Semp, 0, &err); //请求信号量
// OSSemPend(semlcd1, 0, (uint8_t*) &err);
LCD_Init();
for (i = 0; i < 8; i++)
{
WriteData(line_1[i]);
OSTimeDlyHMSM(0, 0, 2, 0);
}
OSTimeDlyHMSM(0, 0, 0, 500);
WriteCMD(0x06); //取消整屏左移
OSTimeDlyHMSM(0, 0, 0, 100);
WriteCMD(0x80 + 0x40 + 10);
OSTimeDlyHMSM(0, 0, 0, 100);
for (i = 0; i < 12; i++)
{
WriteData(line_2[i]);
OSTimeDlyHMSM(0, 0, 2, 0);
}
//
// OSMboxPost(Mbox1, (void*) 2);/*发消息给task2*/
OSSemPost(Fun_Semp);
OSTimeDlyHMSM(0, 0, 10, 0);
OSSemPend(Fun_Semp, 0, &err); //请求信号量
//
}
}

void Task_LCD2(void *p_arg) //优先级为2
{
uint8_t i;
(void) p_arg;
while (1)
{
// OSSemPend(semlcd2, 0, (uint8_t*) &err);
OSSemPend(Fun_Semp, 0, &err); //请求信号量
// OSMboxPend(Mbox1, 0, &err);
//
LCD_Init();
for (i = 0; i < 8; i++)
{
WriteData(line_3[i]);
OSTimeDlyHMSM(0, 0, 2, 0);
}
OSTimeDlyHMSM(0, 0, 0, 500);
WriteCMD(0x06); //取消整屏左移
OSTimeDlyHMSM(0, 0, 0, 100);
WriteCMD(0x80 + 0x40 + 10);
OSTimeDlyHMSM(0, 0, 0, 100);
for (i = 0; i < 12; i++)
{
WriteData(line_4[i]);
OSTimeDlyHMSM(0, 0, 2, 0);
}
//
// OSMboxPost(Mbox2, (void*) 1);
OSSemPost(Fun_Semp);
OSTimeDlyHMSM(0, 0, 10, 0);
OSSemPend(Fun_Semp, 0, &err); //请求信号量
//
}
}
展开
 我来答
IT_小绵羊
2013-08-09
知道答主
回答量:4
采纳率:0%
帮助的人:5.2万
展开全部
可以用一个更高优先级的任务来发信号量进行调度,跟你的需求可能不太一样,但是可以实现功能。
oak_shield
2013-07-25 · TA获得超过201个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:188万
展开全部
这信号量用得好啊,前无古人
如果Fun_Semp创建的时候初值为0,这2个任务就是自己把自己锁死了。
OSSemPend就已经访管挂起了,怎么可能跑到后面去OSSemPost呢
建议你去看看信号量的用法,基础太差,无法解释
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式