STM32移植FreeRTOS
1. 官网:FreeRTOS™ – FreeRTOS™下载源码
2.解压源码压缩包后进入Source目录
3.整理好所需要的文件
include包含所需要的头文件
portable里面是相关硬件平台的文件
其余.c文件为FreeRTOS内核源码
portable只需要留以下文件
heap_4.c在FreeRTOSv202212.01\FreeRTOS\Source\portable\MemMang目录下。
port.c与portmacro.h根据使用的硬件平台选择,我这使用的STM32F103是ARM_CM3的内核,所以在FreeRTOSv202212.01\FreeRTOS\Source\portable\RVDS\ARM_CM3目录下寻找。
4.在demo里找到配置文件FreeRTOSConfig.h
根据使用的硬件和软件平台选择即可,我这是使用的硬件是STM32F103,开发环境是Keil MDK,配置文件在源码包的FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_STM32F103_Keil目录下。当然demo工程中的配置文件比较老旧不全,如果需要,自行上网搜索配置,对FreeRTOS进行裁剪完善。
5.Keil MDK工程配置
1.在keil中新建FreeRTOS\Core与FreeRTOS\Port组
将FreeRTOS内核源码添加到组FreeRTOS\Core
将heap_4.c与port.c添加到FreeRTOS\Port
2.添加头文件包含路径
3.屏蔽掉这三个中断处理函数:这三个中断处理函数FreeRTOS在port.c中已经实现了
4.在配置文件FreeRTOSConfig.h中添加如下三个宏:
配置完成后可以编译看看是否存在错误。我这边是没有错误。
6.创建任务测试
1.包含头文件
说明:freertos.h文件是必须的,然后我们用到了任务相关API,所以需要包含task.h
2.创建测试任务
可以看见我在freertos_demo函数创建了三个任务,一个是Debug打印,一个是串口任务,一个是按键任务。TaskHandle_t是任务句柄,用于其他API对任务操作时传参使用。任务创建完成使用函数vTaskStartScheduler()开启任务调度。
在main函数调用freertos_demo函数,while(1)是不会运行到的。
通过串口助手可以看见每隔一秒打印出来任务测试!!!,说明任务运行成功。
到此FreeRTOS简单移植完毕,需要用到其他功能,如队列,互斥量,信号量则需配置相关宏并包含其头文件即可调用相关API,另外注意任务过多,使用过多消息队列等等,可能会使得堆空间不够用,导致任务调度异常,这个时候可以去FreeRTOSConfig.h文件配置相关宏configMINIMAL_STACK_SIZE的大小,当然要根据实际使用的硬件进行限制。
作者:陈许儒