有人可以帮我执行高(例如6kHz)执行率的任务吗? 需要在该频率上进行SPI传输(任务代码已写入)。我可以在没有任何控制的情况下达到7kHz以上的频率(只需一项任务就没有定时控制,可以全时运行),因此时间不是问题。
问题是TICK_RATE的分辨率为ms,对于我需要的分辨率来说过高。经过一些研究,我发现降低时间分辨率会导致不必要的开销。
因此,方法是使用ISR。那正确吗?找不到如何执行此操作的示例。我在FreeRTos中几乎没有经验。
在Toradex IMX7D中使用Toradex FreeRTOS版本。
谢谢。
答案 0 :(得分:0)
您是否在问如何使用FreeRTOS做到这一点?在这种情况下,FreeRTOS book和网站(this is just one way of doing it)都有示例。但是,正如您自己指出的那样,由于频率很高,因此您确实需要在中断中执行此操作-在这种情况下,您需要查看硬件手册,以了解硬件在将DMA数据传输到外围设备方面具有哪些功能,等
答案 1 :(得分:0)
您需要更清楚地表达您的任务。什么MCU?两侧传输?你有DMA吗?
您可以尝试使用MCU的计时器执行计时,并在ISR中运行 xSemaphoreGiveFromISR 。
在RTOS任务中,将侦听器 xSemaphoreTake(xSemaphore,LONG_TIME)== pdTRUE
答案 2 :(得分:0)
基于examples / imx7_colibri_m4 / driver_examples / gpt(Toradex FreeRTOS版本)中的解决方案解决了该问题。
仅使用了源自ccmRootmuxGptOsc24m时钟的GPTB。这很重要,因为linux内核使用默认的Pfd0时钟在启动时挂起。
要获得频率,我需要将GPTB频率除以所需频率,然后传递给GPT_SetOutputCompareValue()。