【发布时间】:2018-08-06 10:48:07
【问题描述】:
我想在 ARM Cortex M4 上使用配置为在 50KHz 上产生中断的硬件定时器同步闪烁 LED(切换 GPIO 引脚)。
在我当前的代码中,我将一个 GPIO 引脚切换到一个在 50KHz 外部时钟信号上触发的特定 ISR 处理程序。结果是 GPIO 引脚在 1KHz 到 96KHz 的随机频率下非常不规律地切换。
除了定时器滴答中断(100Hz,优先级最低)、空闲任务和我的特定 ISR 处理程序之外,操作系统没有运行任何其他任务。
否则,这种“切换解决方案”与同一 MCU 上的裸机实现完美配合。所以,我的问题似乎来自我对 FreeRTOS 环境缺乏了解。
- 将 LED 切换到 50 KHz 的 FreeRTOS ISR 是否可行?
- 是否需要将其放入等待 50KHz 中断信号的任务中 ?
- 我应该创建一个 50KHz 的定时切换任务并同步它吗 周期性地使用外部时钟信号?
【问题讨论】:
-
“FreeRTOS ISR”是什么意思? ISR 实施如何从您的裸机实施转变为 FreeRTOS 实施?为什么它必须改变?
-
嗨@kkrambo,“FreeRTOS ISR”是指中断服务例程,无论它是否在 FreeRTOS 上。实际上,我在 FreeRTOS 和裸机上的 ISR 代码完全相同。不同之处可能在于 FreeRTOS 多任务处理行为。它可能来自优先级配置、嵌套中断管理、中断开销。由于 ISR 优先级在 FreeRTOS 系统中是最高的,我认为我的 50Khz 中断会在其他所有操作之前运行......
-
ARM Cortex M4 仅指定内核,不包括硬件计时器 - 您应该指定部件本身。大多数微控制器上的大多数硬件定时器都可以直接驱动 GPIO 引脚(通过它们的 PWM 功能),而软件开销为零;如果您想要一个准确的 50 KHz 信号,您应该使用 PWM 输出。在中断中对 50KHz 信号进行 Bit-banging 将带来显着的 CPU 负载,并将影响其他任务和 ISR 的确定性和实时性能。准确性取决于操作系统或应用程序从不禁用中断。
标签: task interrupt-handling freertos rtos isr