相关代码
环境
硬件
- STM32F103C8T6 最小系统板
- STLINK V2
软件
- VSCode
- VSCode插件
platformio
标准库CMSIS,项目
参照Bilibili教程 --《【VSCode & Platform & STM32】使用PlatformIO新建CMSIS标准库》
移植FreeROTS
FreeRTOS: FreeRTOSV9.0.0
基本上是参照《FreeRTOS(教程非常详细)》,但是有些许改变,下面我重新讲解整个流程。
- 建立一个基本标准库项目
|
├─include ----------------------------> 存放系统头文件
├─src
| |─main.c
│ ├─STM32F10x -----------------------> 存放系统配置文件
│ └─STM32F10x_StdPeriph_Driver -------> 官方提供的标准库操作文件
│ ├─inc
│ └─src
- 移植 FreeRTOS
- 下载FreeRTOSV9.0.0
- 移植FreeRTOS主要功能实现代码
- 将 Source
目录下的 inclue
目录下的文件复制到项目目录的 include
文件夹下
将 Source
目录下的 C文件
复制到项目目录下的 src/FreeRTOS
目录
- 移植port相关文件
- 将 port.c
文件复制到 src/PORT
目录
- 将 portmacro.h
文件复制到 include
目录
- 移植堆内存相关
- 将
heap4.c
复制到src/MemMang
目录
- 将
- 移植FreeRTOSConfig.h文件
- 该文件是FreeRTOS的配置文件,主要从示例中拷贝过来,由于platformio使用的是开源的arm-gcc编译器,所以需要到对应处理器以及对应编译器处复制文件到
include
文件夹
最终目录文件如下
- 该文件是FreeRTOS的配置文件,主要从示例中拷贝过来,由于platformio使用的是开源的arm-gcc编译器,所以需要到对应处理器以及对应编译器处复制文件到
├─include
└─src
├─main.c
├─MemMang
├─Port
├─RTOS
├─STM32F10x
└─STM32F10x_StdPeriph_Driver
├─inc
└─src
- 一些修改
-
在FreeRTOSConfig.h中添加
#include "stm32f10x.h"
-
FreeRTOS使用到了一些中断,标准库定义了这些中断的中断函数,大部分都是一个空函数或者空循环,我们需要将FreeRTOS使用到的中断函数设置成FreeRTOS提供的中断函数,需要修改定义,一个简单的方法是在FreeRTOSConfig.h中添加宏定义,同时将stm32f10x_it.c中对应中断函数注释掉
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler