OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3660|回复: 5

UCOSIII 试验10-2信号量 LCD显示问题

[复制链接]

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2019-12-27
在线时间
27 小时
发表于 2020-4-13 16:37:55 | 显示全部楼层 |阅读模式
void task1_task(void *p_arg)
{
        OS_ERR err;
        u8 task1_str[]="First task Running!";
        while(1)
        {
                printf("\r\nèÎÎñ1:\r\n");
                LCD_Fill(0,150,100,300,RED);
                OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);         //ÇëÇóDÅoÅá¿
                memcpy(share_resource,task1_str,sizeof(task1_str)); //Ïò12Ïí×êÔ′Çø¿½±′êy¾Y
                delay_ms(200);
                printf("%s\r\n",share_resource);        //′®¿úêä3ö12Ïí×êÔ′Çøêy¾Y       
                OSSemPost (&MY_SEM,OS_OPT_POST_1,&err);                                //·¢ËíDÅoÅá¿
                LED0=!LED0;
                OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err);   //Ñóê±1s
        }
}
void task2_task(void *p_arg)
{       
        OS_ERR err;
        u8 task2_str[]="Second task Running!";
        while(1)
        {
                printf("\r\nèÎÎñ2:\r\n");
                LCD_Fill(0,150,100,300,BLUE);
                OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);         //ÇëÇóDÅoÅá¿
                memcpy(share_resource,task2_str,sizeof(task2_str));        //Ïò12Ïí×êÔ′Çø¿½±′êy¾Y
                delay_ms(200);
                printf("%s\r\n",share_resource);        //′®¿úêä3ö12Ïí×êÔ′Çøêy¾Y               
                OSSemPost (&MY_SEM,OS_OPT_POST_1,&err);                                //·¢ËíDÅoÅá¿
                LED1=!LED1;
                OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err);   //Ñóê±1s
        }
}
void task3_task(void *p_arg)
{       
        OS_ERR err;
        u8 task3_str[]="Third task Running!";
        while(1)
        {
                printf("\r\nèÎÎñ3:\r\n");
                LCD_Fill(0,150,100,300,GREEN);
                OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);         //ÇëÇóDÅoÅá¿
                memcpy(share_resource,task3_str,sizeof(task3_str));        //Ïò12Ïí×êÔ′Çø¿½±′êy¾Y
                delay_ms(200);
                printf("%s\r\n",share_resource);        //′®¿úêä3ö12Ïí×êÔ′Çøêy¾Y               
                OSSemPost (&MY_SEM,OS_OPT_POST_1,&err);                                //·¢ËíDÅoÅá¿
//                LED1=!LED1;
                OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err);   //Ñóê±1s
        }
}
任务123优先级分别是345!
创建三个任务在LCD同一区域显示颜色 试验结果是LCD按红绿蓝显示但是时间间隔并不是2秒而是红绿一闪而过只有绿色显示两秒!
为什么?
怎么解决??
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5556

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10449
金钱
10449
注册时间
2017-2-18
在线时间
1890 小时
发表于 2020-4-13 22:25:07 | 显示全部楼层
看着像探索板的代码
你可以试试附件的代码(没用屏)打开串口助手时间戳观察下
不是探索板的话移植下

例10-2 UCOSIII使用信号量访问共享资源区.rar

5.64 MB, 下载次数: 157

回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2019-12-27
在线时间
27 小时
 楼主| 发表于 2020-4-14 10:05:38 | 显示全部楼层
peng1554 发表于 2020-4-13 22:25
看着像探索板的代码
你可以试试附件的代码(没用屏)打开串口助手时间戳观察下
不是探索板的话移植下

我查看了时间戳任务之间的间隔提示相差0.2秒左右  是不是任务一执行后空闲的的CPU执行下一任务导致任务1的LCD显示区被任务二覆盖 所以不会正常的间隔两秒显示?
回复 支持 反对

使用道具 举报

109

主题

5556

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10449
金钱
10449
注册时间
2017-2-18
在线时间
1890 小时
发表于 2020-4-14 15:43:03 | 显示全部楼层
ruopan 发表于 2020-4-14 10:05
我查看了时间戳任务之间的间隔提示相差0.2秒左右  是不是任务一执行后空闲的的CPU执行下一任务导致任务1 ...

不是。正常来说两个任务会各自差不多隔2s执行一次任务,毕竟延时函数阻塞了任务
你那边重新解压例程看下
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2019-12-27
在线时间
27 小时
 楼主| 发表于 2020-4-15 16:50:52 | 显示全部楼层
peng1554 发表于 2020-4-14 15:43
不是。正常来说两个任务会各自差不多隔2s执行一次任务,毕竟延时函数阻塞了任务
你那边重新解压例程看下

我明白问题在哪里了谢谢
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-1-14
在线时间
6 小时
发表于 2020-8-30 09:09:32 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 19:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表