完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序中有三个任务task1,task2,task3,分别让三个二极管闪烁,其优先级为分别5,6,7,调试了半天,有些疑惑:
1)当系统开始运行时,会先执行task1,再调用到task2,当执行完task2后会产生一次切换,此时由于task1的优先级高于task3,那这样就会继续执行task1,这样 task3没有机会执行,但事实不是这样的,三个二极管都闪烁了,这是什么情况; 2)我考虑到,可能跟程序中的延时有关,我调节延时时间,当task1中延时时间小于5ms时,task2和task3均不执行; 3)当我调节task2的延时时间小于5ms时,task1执行,此时task3不执行; 创建任务的代码和任务接口函数如下: 从上面的调试过程可以看出低优先级的任务应该是利用高优先级的任务的延时间隙完成任务的,当延时间隙太小时,就会一直执行最高优先级的任务,参考了网上一些资料,好像说是跟UCOSII的时钟节拍有关,但想知道系统到底是怎么解决的,还有那个延时时间分界点5ms到底跟什么有关,求大神指导,希望原子哥能够帮忙解决疑惑,感激不尽 |
|
相关推荐
5个回答
|
|
|
|
|
|
不小心点错了,该贴还没有解决,希望大神帮忙解释一下,谢谢
|
|
|
|
|
|
|
|
谢谢原子哥回复,我的困惑:
1)你说的时间延时是指OSTimeDly()吗?这不就是UCOSII中的吗?uCOSII中包括时间管理的几个函数:OSTimeDly(),OSTimeDlyResume();任务控制表OS_TCB中OSTCBDly用来保存OSTimeDly()中断之前的状态;时钟节拍函数OSTimTick()用来递减OSTCBDly的值,当其为0时,延时也就结束,此时任务进入就绪表中,这应该就是时间管理的过程吧? 2)对于我上面提出的问题3,我有新的理解:不应该存在这两种时间延时,其实应该理解为两种不同的时间延时的表达方式,其最终目的都是为了让高优先级的任务延时,从而可以进行任务切换,使低优先级的任务也可以执行,即其中的delay_ms(n)应该是可以写成OSTimeDly(m)的,不知道这样理解对不对。如果是这样的,想问原子哥那种延时方式好像一些; 3)新的困惑:高优先级的任务要延时,让任务可以切换,使低优先级工作,那这个延时时间的时长是怎么确定的呢?其怎样取值才比较合理了? 望原子哥解惑,感激不尽 |
|
|
|
个人感觉emWin的函数比uCOs多,但是学习uCOs比emWin更长知识!
|
|
|
|
只有小组成员才能发言,加入小组>>
695 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:30 , Processed in 1.086486 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号