详解STM32移植FreeRTOS操作系统步骤

STM32移植FreeRTOS操作系统详细说明

从官网下载FreeRtos源码,下载后的文件如图所示


下载后的文件夹打开FreeRTOS文件夹,找到内部的Source,此为FreeRTOS的源码

打开Source之后就是需要移植的文件,其他文件是实例程序和注册文件,如果需要了解请自行百度。

这些文件中,include是包含的头文件,protable是接口文件,剩下的就是定时器、消息队列、任务和链表之类的程序。

STM32工程

对STM32的工程没有任何要求,工程越简单越好,最好的办法就是直接用CubeMx直接生成,我指的是生成不带FreeRTOS的工程,无论使用HAL库还是LL库都是一样的操作。当我们根据自己的要求生成了工程并编译没有错误之后第一步给工程文件夹中创建一个FreeRTOS的文件夹,将Source中的所有文件都复制进去,并添加路径。
编译之后会有三个错误,是因为函数的重复定义,因为FreeRTOS使用了STM32的三个异常中断,分别是PendSV、SVC以及SysTick三个异常,PendSV是可挂起的中断,FreeRTOS利用其来做任务切换,SVC异常由SVC指令触发,在很多系统中SVC机制用于实现应用任务访问系统资源。对于高可靠性系统,应用任务运行在非特权模式,只能通过OS访问受保护的硬件资源,使得嵌入式系统更安全。最后就是SysTick,这个是系统时钟,当配置好单片机时钟后FreeRTOS会在此定时器计时用于切换任务。
所以我们要做的就是将stm32_it中断中的这三个异常中断函数给屏蔽掉,因为在FreeRTOS中已经进行了定义和调用
在STM32工程中我们需要创建两个文件夹,一个是用来存放源码的,一个是用来存放接口文件的。

Source就是源码,Ports就是接口函数,不过在这两个文件中不需要修改任何参数,heap.4是内存管理文件,一共有5个,管理方式和工作方式不同,最常用的是4,所以我们需要从MemMang文件中选择heap_4.c,还有一个port是用来选择内核的,单片机是什么内核就选择什么内核,FreeRTOS支持的内核如下:

如果是103就选择CM3内核,407就选择CM4F内核,这个看个人移植的单片机是什么。
移植完成之后进行编译,就会发现缺少一个FreeRTOSconfig.h的文件,这个文件是配置文件,我们所说的FreeRTOS裁剪就是配置各种宏定义对自己需要的功能进行裁剪,当配置宏定义编译之后在FreeRTOS中的预编译就会将你选择的功能编译,没有选择的屏蔽掉。获取配置文件是在官方提供的DEMO中找到对应内核的程序,将里面的配置文件复制到自己的工程中即可。

当我们添加了FreeRTOSConfig之后进行编译,发现还有警告,是因为三个异常中断没有进行重命名,因为在STM32CUBE生成的函数中这三个异常中断的名称和FreeRTOS不同,所以我们需要宏定义对三个异常中断进行名称修改,即:

添加了这三个宏定义之后再进行编译,我们发现已经没有错误和警告了(正常情况下确实没有,要是有就看是啥问题改啥就行)
最后对配置文件进行裁剪,需要什么功能即开启什么功能,不要的功能关掉就行,配置完成之后就可以创建任何开始编写程序了。

物联沃分享整理
物联沃-IOTWORD物联网 » 详解STM32移植FreeRTOS操作系统步骤

发表评论