OpenEdv-开源电子网

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

请教原子哥一个关于UCOS的任务调度分配的问题,会不会有我说的这种情况出现呢?如果会的话,有什么更好的解决办法,请教!谢谢!

[复制链接]

18

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2012-8-27
在线时间
21 小时
发表于 2012-11-5 00:22:07 | 显示全部楼层 |阅读模式

在战舰的第55试验中,UCOS消息列队等试验中,在main_task()和flags_task()任务中都用到LCD_ShowString()函数,这两个任务属于不同的优先级的。
main_task的优先级是4,flags_task的优先级是3,请问有没有可能main_task任务在执行到写LCD时写到一半时,来个任务切换,切换到flags_task任务里执行了,而这时也会写
LCD,那么就会使LCD的屏显出问题了。
在你的这个试验程序里是不会出现,因为这两个时间都错开比较大。我想问的是由于一个低优先级的任务本身执行的时间比较长,而且由于在循环的写LCD,而高优先级任务有可能执行了2次,低优先级任务一次都未执行完成,这样的切换造成这样的问题呢?如果有,怎么解决呢?谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2012-11-5 09:37:16 | 显示全部楼层
高优先级任务有可能执行了2次,低优先级任务一次都未执行完成,这个完全会发生的。

将低任务挂起的时候大于高优先的任务时间的二倍以上就好了。

main_task的优先级是4,flags_task的优先级是3,请问有没有可能main_task任务在执行到写LCD时写到一半时,来个任务切换,切换到flags_task任务里执行了,而这时也会写
LCD,那么就会使LCD的屏显出问题了。

这个你需要设置信号量,从而使任务可以根据信号量的状态来判断何时访问共享资源。
建议你,还是先看看UCOS的书籍先。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

18

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2012-8-27
在线时间
21 小时
 楼主| 发表于 2012-11-5 09:54:22 | 显示全部楼层
回复【2楼】wolfdong7:
---------------------------------
是的,你讲的很对。
如果低优先级任务有挂起的话,那就安排好时间可避免这个问题发生。
只是如果任务梢多时,就有可能会计算不那么精确,所以最好的方法就你所说的,LCD是一个外设,在最开始建立一个信号量,在写LCD之前查看信号量资源是否可用。
多谢解答。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 04:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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