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); //请求信号量
//
}
} 展开
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); //请求信号量
//
}
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询