【发布时间】:2017-07-02 20:32:09
【问题描述】:
我正在开发一个带有 FreeRTOS 的实时系统 STM3240G 板。
- 系统包含一些不同的任务(GUI、KB、ModBus、Ctrl 等)
- 任务有不同的优先级。
- GUI 似乎显示有点慢。
所以我使用 Profiler 软件来查看不同任务之间发生了什么 在跑步期间。该分析器向我显示每个时刻(微秒)正在运行的任务以及到达的中断。
此分析器使我能够“标记”代码上的不同位置,以便我知道 当它在那里的时候。所以我运行程序并做一个记录。
我查看了记录,发现(例如)Ctrl 任务介于两个 15 毫秒的代码行(这次改变大小)没有任何 任务更改没有中断到达,此后系统根据记录和我的标记从这一点正常继续。
我尝试关闭禁用不同的中断但没有任何成功。 有人知道它可能是什么吗?
【问题讨论】:
-
在这些行之间使用调试器会发生什么?另外,您确定您没有处于分析器不知道的中断中吗?
-
您是否在任何地方使用
portENTER_CRITICAL(),因为这会禁用中断,因此不会发生任务切换,或者您是否阻止任何中断?我会将所有中断代码注释掉,但保持程序流程相同,然后看看你是否得到相同的行为 - 隔离问题。 -
这是无法远程回答的问题。所有 RTOS 应用程序都有这样的任务并使用中断。为什么它不能按我预期的那样工作的问题在这里只是题外话
标签: scheduled-tasks microcontroller stm32 freertos