【发布时间】:2021-01-16 20:53:53
【问题描述】:
我的基于 MCU 的控制系统必须快速检查 18 个开关触点状态。我将使用 STM32F7 MCU,它最大有 16 个 int。处理程序。所以我决定使用IO expendar IC 和分组。现在我有 12 个 IO 外部中断,另外 2 个中断来自 IO 扩展器。此外,FreeRTOS 将具有用于通信的以太网、uart 和 canbus 任务。中断对系统来说非常重要。它们之间存在毫秒差异,我必须正确检测所有引脚状态。我需要针对这种情况的专家建议。
我的问题是:
- 这是正确的方法吗?在FreeRTOS上使用14个外部中断处理多个通信任务
- 有没有更好的办法?
【问题讨论】:
-
您提到“毫秒差”。这样比较轻松。您可以轻松地使用每毫秒触发一次中断然后检查所有开关的计时器。不需要额外的部件或许多中断处理程序。
-
您说创建一个任务,该任务具有一个循环,用于每 0.5 毫秒或 1 毫秒检查一次所有 GPIO 状态。在后端,其他任务(以太网、UART 等)运行是否清晰?
-
“其他任务运行清晰”是什么意思?
-
我的 mcu 有 1 个核心,因此在现实世界中的任务不会同时运行。很多中断可能会伤害以太网或我认为的其他任务
-
1ms 非常接近默认的 FreeRTOS 调度程序时钟 1kHz。因此,您可以使用硬件计时器检查输入级别,然后在需要任何进程时将消息或邮件发送到睡眠任务。我在设计中经常使用这个系统。如果您需要确保“
标签: arm stm32 interrupt interrupt-handling freertos