哪位高手用过FreeRTOS?对它的任务切换时间有了解吗?我做了一个时间测试,发现FreeRTOS的任务切换超长。
发布网友
发布时间:2022-04-23 13:08
我来回答
共2个回答
热心网友
时间:2023-10-14 21:47
第一,你的低优先级任务也会调用vTaskDelay函数的吧?如果是,那么根本与切换没关系,因为它一般情况下还没睡眠完毕!
2、你的高优先级任务每次拉高IO时就睡眠500ms,那么问题来了,一般情况下你外部中断产生时它还在睡眠,你必须要等它睡眠完了它才拉高,所以还是跟1类似,根本不是切换时间长,而是你的任务还没睡醒!追问我的低优先级任务中不用vTaskDelay函数,用的信号量,任务本身不设延时,只是等待高任务执行好了发射一个信号量,然后他进入delay,这个时候肯定是直接就可以运行低任务的,有什么延时呢
热心网友
时间:2023-10-14 21:47
什么硬件平台?
虽然没用过这个系统,但实时嵌入式操作系统的任务切换要是到了毫秒级别,这个系统就没人用了。更别提40毫秒。
应该有其他原因,查查说明书先~追问Altera的SoC,单步跟了一下,的确是在vTaskDelay()函数里面利用"swi 0"引发了调度,后进入低任务,拉低的IO。不知道为啥会这么长的时间,我之前测了一下ucosii的切换,800MHZCPU下两个us就搞定了
热心网友
时间:2023-10-14 21:47
第一,你的低优先级任务也会调用vTaskDelay函数的吧?如果是,那么根本与切换没关系,因为它一般情况下还没睡眠完毕!
2、你的高优先级任务每次拉高IO时就睡眠500ms,那么问题来了,一般情况下你外部中断产生时它还在睡眠,你必须要等它睡眠完了它才拉高,所以还是跟1类似,根本不是切换时间长,而是你的任务还没睡醒!追问我的低优先级任务中不用vTaskDelay函数,用的信号量,任务本身不设延时,只是等待高任务执行好了发射一个信号量,然后他进入delay,这个时候肯定是直接就可以运行低任务的,有什么延时呢
热心网友
时间:2023-10-14 21:47
什么硬件平台?
虽然没用过这个系统,但实时嵌入式操作系统的任务切换要是到了毫秒级别,这个系统就没人用了。更别提40毫秒。
应该有其他原因,查查说明书先~追问Altera的SoC,单步跟了一下,的确是在vTaskDelay()函数里面利用"swi 0"引发了调度,后进入低任务,拉低的IO。不知道为啥会这么长的时间,我之前测了一下ucosii的切换,800MHZCPU下两个us就搞定了