如何移植stm32

移植方法有两种:一种是直接利用STMCobeMX来直接配置;一种是从FreeRTOS的官网上直接下载
将FreeRTOS移植到stm32上,需要的步骤是:
下载完的文件如下所示
Demo文件移植FreeRTOSConfig.h
这个文件中需要移植一个头文件,这个是移植必须的,选择适合自己板子的

例如,我采用的就是Stm32F103 用的软件是keil,点开,copy一下对应的FreeRTOSConfig.h

这个文件最后可以放在main所在的组里,其他地方也可以。
主要是看Source文件夹里的文件
文件内容如下:

其中的include是要用到的头文件,portable是FreeRTOS连接底层硬件所需要的文件,不同的硬件对应不同的文件,其他的C文件到时候整合在一起
portable文件如下:
。我用的是keil5,所以需要这些我文件,其中的RVDS文件夹中包含了不同架构的MCU;MemMang文件夹则是内存管理,对内存进行一定的操作的
RVDS文件夹

不同的架构选择不同的文件内容,里面的port.c和portmacro.h(一些变量的重定义)这两个文件都是需要的;例如是stm32f103c8t6,这个内核是CM3,就选这个文件夹
MemMang文件夹

这几个文件只要选择一个就可以了,看自己的需求,具体的不同如下:
heap_1.c : 只负责内存的申请,不负责释放
heap_2.c : 可以申请内存,可以释放内存,但是不能合并相邻的空闲内存块
heap_3.c : 对c语言的free(释放内存)和malloc(申请内存)方法进行了简单的封装
heap_4.c : 可以申请内存,可以释放内存,可以合并相邻的空闲内存块
heap_5.c : 可以申请内存,可以释放内存,可以跨内存区操作内存
正式开始整合文件工程
整合文件
创建一个文件夹FreeRTOS,文件夹中包括了三个文件夹,分别是Rtos_inclulde、Rtos_port、Rtos_src,如下

Rtos_inclulde中是前文中的Source文件中的include文件、Rtos_port是前文中的port文件夹的挑选、Rtos_src则是前文中的C文件的整合
FreeRTOSConfig.h是从Demo文件夹中移植的
具体的文件夹内的内容如下:
Rtos_inclulde文件夹

Rtos_port文件夹内容包括两个文件夹(RVDS 、MemMang)


注:这里到时候可以在工程中选择自己内核对应的文件进行编译,当然也可以只拷贝自己需要的那个文件夹内容,可以参考一下文件结构路径
Rtos_src文件夹

添加到具体的工程中
需要先准备一个工程,然后往工程中添加FreeRTOS这个整合文件夹,如下图所示
此时是将FreeRTOS文件夹整合到一个串口打印的工程中

接下去要做的就是将这个文件夹里的东西添加到工程中

然后将对应的文件夹里的东西加入,最终应有如下图所示文件

添加路径

点击“OK”保存
修改文件
打开FreeRTOSConfig.h文件,添加三个定义
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
屏蔽Stm32f10x_it.c文件中的PendSV_Handler、SysTick_Handler、SVC_Handler这个三个中断,因为在FreeRTOS中已经帮我们重写了这三个中断服务
到此,移植的部分就结束了,接下来测试一下
主函数

编译

烧录运行,观察结果


其中Demo是官方给的例程,适配一些厂家的样板;License则是一些许可证,产品化的话需要看看;Source则是移植所以用到的源码
适应场景:
A:不需要删除任务、安全性要求高、简单重复执行的
B:由于不可以合并空闲内存块,导致频繁的申请与释放将会导致内存碎片化,所以适合不需要频繁操作内存的
C:使用的还是C语言的free和malloc方法,只是简单的进行了封装
D:适合频繁操作内存的,例如任务、队列、信号量
E:需要管理不连续的内存,例如接入外部的ram
参考链接:不同的内存管理
