哪位高手用过FreeRTOS?对它的任务切换时间有了解吗?我做了一个时间测试,发现FreeRTOS的任务切换超长。 20

我建立了两个任务,一个优先级高,为3,一个优先级低,为2,以下称为“高任务”和“低任务”。高任务在收到一个由外部中断触发的信号时,在任务中将处理器外面一个IO端拉高,并立... 我建立了两个任务,一个优先级高,为3,一个优先级低,为2,以下称为“高任务”和“低任务”。
高任务在收到一个由外部中断触发的信号时,在任务中将处理器外面一个IO端拉高,并立即调用延时函数vTaskDelay()延时500ms。此函数中会利用软中断来进行任务切换,切换到低任务。低任务中,循环判断高任务是否已将IO口拉高,如果已经拉高,则立即将其拉低。低任务中不设延时。
现将测得的从IO端被拉高到IO端再回低的时间段作为测量结果,CPU主频是800MHZ,发现任务切换时间有40ms+,从理论上来说这是不可能的,但是不知道咋回事。求解答。
展开
 我来答
应试教育害了我
2015-09-21
知道答主
回答量:29
采纳率:0%
帮助的人:15.1万
展开全部
第一,你的低优先级任务也会调用vTaskDelay函数的吧?如果是,那么根本与切换没关系,因为它一般情况下还没睡眠完毕!
2、你的高优先级任务每次拉高IO时就睡眠500ms,那么问题来了,一般情况下你外部中断产生时它还在睡眠,你必须要等它睡眠完了它才拉高,所以还是跟1类似,根本不是切换时间长,而是你的任务还没睡醒!
追问
我的低优先级任务中不用vTaskDelay函数,用的信号量,任务本身不设延时,只是等待高任务执行好了发射一个信号量,然后他进入delay,这个时候肯定是直接就可以运行低任务的,有什么延时呢
money0_04c351c2
2014-08-28 · TA获得超过4142个赞
知道大有可为答主
回答量:5505
采纳率:49%
帮助的人:1603万
展开全部
什么硬件平台?
虽然没用过这个系统,但实时嵌入式操作系统的任务切换要是到了毫秒级别,这个系统就没人用了。更别提40毫秒。
应该有其他原因,查查说明书先~
追问
Altera的SoC,单步跟了一下,的确是在vTaskDelay()函数里面利用"swi 0"引发了调度,后进入低任务,拉低的IO。不知道为啥会这么长的时间,我之前测了一下ucosii的切换,800MHZCPU下两个us就搞定了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式