1. 前言
本篇将会从FreeRTOS官网下载内核源码,移植到MM32F320处理器的工程中,验证方法是创建一个任务,在任务中闪烁LED。
2. 移植
2.1 获取源码
- FreeRTOS
- 下载版本:
选择LTS版本。
2.2 移植源文件
- 将下载下来的源码copy到工程目录的【4_Middleware】文件夹下;
- 添加根目录下的源文件到工程:
- 添加port的源文件到工程:
这里需要注意的是,要根据自己的编译环境来选择,比如用的armclang,那么则选择RVDS下的port.c;而如果是gcc,那么则选择GCC下的port.c。我们移植的MM32 MindSDK库,是使用的ARM Compiler 6编译器,用的是GCC下的port.c:
- 添加内存管理文件
我们建议使用heap_4或者heap_5,我们工程中使用的是heap_4:
- 设置FreeRTOS的配置文件FreeRTOSConfig.h:
这个文件在内核源码中是不存在的,需要我们自己创建保存,我们将其创建保存在【4_Middleware】的根目录下:
这个头文件的内容是根据官方提供的参考,然后再根据自己使用的处理器以及应用场景来配置的,内容如下:
1 |
|
2.3 设置编译路径
要想编译器找到FreeRTOS内核的相关头文件,就需要将这些头文件的所在路径在mdk工程中添加进去:
设置好编译路径后先编译一下,确保编译FreeRTOS的源文件没有问题。
3. 验证
3.1 编写驱动文件
我们需要配置MM32F3270的时钟,然后还需要控制LED来验证移植,所以还需要写一个LED的驱动;我们还添加了一个调试串口的驱动,都放到了源代码中。
3.2 创建任务
由于在FreeRTOSConfig.h中我们没有选择静态分配内存:
1 |
所以只能调用动态分配的那个任务创建函数:xTaskCreate
:
1 | BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 任务的入口函数 |
这个函数的返回值:
1 | pdPASS = 创建成功 |
根据任务参数的描述,我们需要一个任务的入口函数,形式如:void TestCode(void *parameter)
,然后创建一个任务:
1 | xTaskCreate(TestCode, \ // 任务的入口函数 |
3.3 任务函数
我们对于任务的示例函数的实现如下:
1 | void TestCode(void *parameter) |
在里面闪烁LED,并打印运行次数信息,大约每隔1s打印一次。
3.4 开启任务调度
- 接口:
void vTaskStartScheduler( void )
当调用这个函数后,正常情况下这个函数之后的代码都不会运行到,比如:
1 | int main(void) |
这个代码中【Hello China.】就不会被打印出来。
3.5 现象
开发板运行这个例程已经有一天多的时间了,从这个计数值也可以看出来,说明移植FreeRTOS到MM32基本没有问题了。
- 本文作者: 摘星星的小朋友
- 本文链接: http://slhking.github.io/2022/05/12/MM32-6-PortFreeRTOS/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!