task - 50 KHz 的 FreeRTOS ISR
问题描述
我想与配置为在 ARM Cortex M4 上以50KHz产生中断的硬件定时器同步闪烁 LED(切换 GPIO 引脚)。
在我当前的代码中,我将一个 GPIO 引脚切换到一个在 50KHz 外部时钟信号上触发的特定 ISR 处理程序。结果是 GPIO 引脚在 1KHz 到 96KHz 的随机频率下非常不规律地切换。
除了定时器滴答中断(100Hz,优先级最低)、空闲任务和我的特定 ISR 处理程序之外,操作系统没有运行任何其他任务。
否则,这种“切换解决方案”与同一 MCU 上的裸机实现完美配合。所以,我的问题似乎来自我对 FreeRTOS 环境缺乏了解。
- 将 LED 切换到 50 KHz 的 FreeRTOS ISR 是否可行?
- 我需要在等待 50KHz 中断信号的任务中完成它吗?
- 我应该创建一个 50KHz 的定时切换任务并定期与外部时钟信号同步吗?
解决方案
如果您希望 50K 准确(无抖动),则中断的优先级必须等于或高于 configMAX_SYSCALL_INTERRUPT_PRIORITY:https ://www.freertos.org/a00110.html#kernel_priority和https://www.freertos。 org/RTOS-Cortex-M3-M4.html(假设您使用的端口支持中断嵌套)。
推荐阅读
- python - 我怎样才能在一行中打印所有文本?Python2
- typo3 - typo3 目录不可写
- firebase - Flutter firestore 插件无法通过 where 和 isEqualTo 的组合获取数据
- three.js - 将 three.js 复合对象添加到 A-Frame 中导致子对象意外闪烁
- r - 解析 R-Help 文件以获得闪亮的工具提示
- unity3d - Endless Runner 无限轨道生成 - Unity3D C#
- tfs - VSTS 错误:“发布构建工件失败并出现错误:无法创建目录‘{p}’
- cuda - Cuda 扫描 - 使用共享内存时,Debug 和 Release 模式下的结果不同
- compiler-errors - Ada:任务类型作为任务标记在它自己的正文中
- java - JTable 二维对象数组