快捷搜索:  汽车  科技

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)cubeMX会生成StartTask函数,自己根据需要编写就好。图四创建任务队列以及信号量等图二任务和队列配置图三二值信号量配置配置好之后会生成一个freertos.c的文件,负责在void MX_FREERTOS_Init(void) {}函数里面创建任务,创建信号量以及队列等,任务可以选择生成weak函数,自行选择在别的文件实现,我这里就直接把所有的任务在freertos.c文件里面实现了。

在STM32上一直没有使用过freertos操作系统,之前有在瑞萨单片机上使用过。最近的一个项目软件做起来有点大,继续使用公司的软件架构有点复杂,所以决定使用freertos来编写程序。

项目程序做得差不多了,回过头来看看之后,不得不说CubeMX把freertos的使用简化得不像样子了,对于新手来说可能门槛就很低了。在CubeMX上简单的配置一下就可以使用freertos了。

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)(1)

图一freertos配置

软件任务,队列定时器以及信号量都在CubeMX上可以配置,自动生成代码,应用程序只管使用就可以。

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)(2)

图二任务和队列配置

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)(3)

图三二值信号量配置

配置好之后会生成一个freertos.c的文件,负责在void MX_FREERTOS_Init(void) {}函数里面创建任务,创建信号量以及队列等,任务可以选择生成weak函数,自行选择在别的文件实现,我这里就直接把所有的任务在freertos.c文件里面实现了。

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)(4)

图四创建任务队列以及信号量等

cubeMX会生成StartTask函数,自己根据需要编写就好。

void StartDefaultTask(void *argument)//空闲钩子函数

{

/* USER CODE BEGIN StartDefaultTask */

/* Infinite loop */

for(;;)

{

osDelay(1);//osDelayUntil()精确延时

}

/* USER CODE END StartDefaultTask */

}

stm32cubemx和mdk的区别(STM32基于CubeMX使用freertos)(5)

图五编写任务实现

STM把freertos常用的API做了一次自己的封装,用起来更方便了,但是我在使用的时候也发现了一点问题,例如osDelay封装的是vTaskDelay,使用起来没问题,但是封装了vTaskDelayUntil的函数osDelayUntil,就不能用,延时不对,我也没仔细研究,直接使用vTaskDelayUntil就没问题。

猜您喜欢: