首页 文章

FreeRTOS STM32集成

提问于
浏览
1

我正在尝试在现有的STM32固件项目中启动FreeRTOS . 我复制了所有文件,纠正了中断的优先级 . 但是,处理器卡在xTaskIncrementTick for循环中,它不能退出该循环 . 同时,所有其他计时器中断停止工作 .

我正在使用HAL库 . HAL计时器使用TIM1而不是SysTick,因此FreeRTOS可以使用它 .

2 回答

  • 1

    我在xTaskIncrementTick()中看不到循环 - 请参阅此链接上的第2589行:https://sourceforge.net/p/freertos/code/HEAD/tree/tags/V10.0.1/FreeRTOS/Source/tasks.c您遇到了哪一行?

    为什么需要使用TIM1而不是默认的SysTick?除非你想要一个超低功耗应用,否则这将是非常不寻常的,在这种情况下你可能选择使用低功耗时钟 - 但我不认为TIM1是低功耗 .

    我认为STM32Cube软件也使用SysTick . 处理第三方库的常规方法是除了RTOS之外还希望使用SysTick是让FreeRTOS管理tick中断,并使用FreeRTOS tick勾(https://www.freertos.org/a00016.html)来调用库的tick处理程序 . 虽然我认为STM32Cube软件是相反的 - 它安装了自己的tick处理程序并从中调用FreeRTOS tick tick .

  • 0

    根据我的经验,将现有代码移植到基于FreeRTOS的新项目比在现有项目中安装FreeRTOS要快得多 . 有这个特殊原因你必须这样做吗?

    我自己的方法是使用包含FreeRTOS的CubeMX创建一个新项目,并设置为支持现有代码,然后在为新项目生成代码后,我将现有代码粘贴到默认任务中 . 这通常给我一个稳定的起点 .

相关问题