首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeRTos高频ISR

FreeRTos高频ISR
EN

Stack Overflow用户
提问于 2018-07-30 13:48:14
回答 3查看 529关注 0票数 0

有人能帮我完成高执行率(比如6千赫)的任务吗?需要在这个频率上进行SPI传输(任务代码已经写入)。我可以实现超过7千赫没有任何控制(只是一个任务没有定时控制,运行全职),所以时间不是一个问题。

问题是,TICK_RATE的分辨率是ms,这对于我的需要来说太高了。做一些研究,我发现减少时间分辨率会造成不必要的开销。

所以,方法是使用ISR。是那么回事吗?却找不到如何做到这一点的例子。我在FreeRTos方面几乎没有任何经验。

在Toradex IMX7D中使用Toradex IMX7D版本。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-03 14:26:50

基于examples/imx7_colibri_m4/driver_examples/gpt(Toradex FreeRTOS版本中的解决方案解决)。

只使用从ccmRootmuxGptOsc24m时钟派生的GPTB。这一点很重要,因为linux内核正在使用默认的Pfd0时钟在启动时挂起。

为了获得频率,我只需将GPTB频率除以所需的频率,然后传递给GPT_SetOutputCompareValue()。

票数 0
EN

Stack Overflow用户

发布于 2018-07-31 16:00:23

您是在问如何使用FreeRTOS进行此操作吗?在这种情况下,FreeRTOS书有示例,网站(这只是一种方法)也是如此。但是,正如您自己指出的那样,由于中断的频率,您确实需要在中断中这样做--在这种情况下,您需要检查硬件手册,看看硬件在DMA‘’ing数据到外围设备方面有哪些设施,等等。

票数 0
EN

Stack Overflow用户

发布于 2018-08-03 01:49:21

你需要更清楚地表达你的任务。什么单片机?双向传送?你有DMA吗?

您可以尝试使用您的MCU的计时器来执行计时,在它的ISR运行xSemaphoreGiveFromISR.

在实时操作系统任务中放置侦听器xSemaphoreTake( xSemaphore,LONG_TIME ) == pdTRUE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51595475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档