【发布时间】:2016-08-28 19:40:41
【问题描述】:
我参加了有关实时系统的在线课程,其中 FreeRTOS 用于演示 RTOS 的各种功能。我现在面临的问题如下:
- 在主函数中创建了两个任务(A 和 B),并启动了实时调度程序。
- 任务 B 的优先级低于任务 A。任务 B 需要每 n ms 安排一次,但由于任务 A 的优先级高于 B,因此 B 不会每 n ms 安排一次。
- 因此,我们需要编写一个新函数,获取 A 和 B 的任务句柄并测量任务 B 的执行时间。
- 如果B的执行时间超过n ms,则增加优先级。
我了解增加优先级的函数的功能,但不明白如何测量任务执行时间。该问题特别要求我们使用 vApplicationTickHook( void ) 函数来执行此操作。任何提示将不胜感激。我也在课程的论坛上发帖,但没有得到任何回复,因此在这里发布。
【问题讨论】:
-
FreeRTOS 文档 IIRC 中已经有一个示例。
-
嗨,我浏览了 FreeRTOS 文档,但无法弄清楚。谢谢
-
你的意思不是反过来吗?如果任务A(优先级较高)所用时间大于
n,是否需要提高A的优先级? -
已编辑,谢谢。问题具体要求任务B。所以,任务B需要每n ms调度一次,我们需要看看执行时间是否超过n ms,那么它需要被赋予更高的优先级。我对执行时间和调度周期有点困惑,但这就是问题所在。
-
您处于裸机级别,因此请考虑裸机:如果您想确保特定时间,而不是低优先级计划任务,请使用计时器。
标签: c++ c embedded rtos freertos