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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哪位高手用过FreeRTOS?对它的任务切换时间有了解吗?我做了一个时间测试,发现FreeRTOS的任务切换超长。相关的知识,希望对你有一定的参考价值。

我建立了两个任务,一个优先级高,为3,一个优先级低,为2,以下称为“高任务”和“低任务”。
高任务在收到一个由外部中断触发的信号时,在任务中将处理器外面一个IO端拉高,并立即调用延时函数vTaskDelay()延时500ms。此函数中会利用软中断来进行任务切换,切换到低任务。低任务中,循环判断高任务是否已将IO口拉高,如果已经拉高,则立即将其拉低。低任务中不设延时。
现将测得的从IO端被拉高到IO端再回低的时间段作为测量结果,CPU主频是800MHZ,发现任务切换时间有40ms+,从理论上来说这是不可能的,但是不知道咋回事。求解答。

第一,你的低优先级任务也会调用vTaskDelay函数的吧?如果是,那么根本与切换没关系,因为它一般情况下还没睡眠完毕!
2、你的高优先级任务每次拉高IO时就睡眠500ms,那么问题来了,一般情况下你外部中断产生时它还在睡眠,你必须要等它睡眠完了它才拉高,所以还是跟1类似,根本不是切换时间长,而是你的任务还没睡醒!追问

我的低优先级任务中不用vTaskDelay函数,用的信号量,任务本身不设延时,只是等待高任务执行好了发射一个信号量,然后他进入delay,这个时候肯定是直接就可以运行低任务的,有什么延时呢

参考技术A 什么硬件平台?
虽然没用过这个系统,但实时嵌入式操作系统的任务切换要是到了毫秒级别,这个系统就没人用了。更别提40毫秒。
应该有其他原因,查查说明书先~追问

Altera的SoC,单步跟了一下,的确是在vTaskDelay()函数里面利用"swi 0"引发了调度,后进入低任务,拉低的IO。不知道为啥会这么长的时间,我之前测了一下ucosii的切换,800MHZCPU下两个us就搞定了

以上是关于哪位高手用过FreeRTOS?对它的任务切换时间有了解吗?我做了一个时间测试,发现FreeRTOS的任务切换超长。的主要内容,如果未能解决你的问题,请参考以下文章

STM32FreeRTOS 任务切换

FreeRTOS高级篇4---FreeRTOS任务切换分析

FreeRTOS高级篇4---FreeRTOS任务切换分析

FreeRTOS高级篇4---FreeRTOS任务切换分析

FreeRTOS高级篇4---FreeRTOS任务切换分析

FreeRtos学习笔记(10)任务切换原理刨析