一、Keil下面没有对应选项

首先碰到一个问题:书中使用的是STM32F10X系列的单片机,但是自己安装的Keil下面没有对应选项:

解决方法:

1.去官方找到对应的包​

​https://www.keil.com/dd2/pack/#!#eula-container​

2.找到Keil对应下的包然后下载

第11章 移植FreeRTOS到STM32_编译工具

第11章 移植FreeRTOS到STM32_单片机_02

3.在Keil工具中的Pack Install里导入

第11章 移植FreeRTOS到STM32_单片机_03

Keil版本过低,包的版本过高,

第11章 移植FreeRTOS到STM32_单片机_04

下对应的2.1.0版本

第11章 移植FreeRTOS到STM32_编译工具_05

下载后,双击安装即可

二、创建裸机工程

移植FreeRTOS的前提是,先创建裸机工程,裸机工程依赖“stm32f10x固件库”,需要在网上先下载对应的库文件,在选择创建工程的时候由于使用的是Keil 5选择STM32F103ZE,其实,可以简单的先使用stm32f10x_it.c和stm32f10x_it.h文件,

关于FreeRTOS的移植有如下几个点:

1.理解FreeRTOS的目录里对应的文件

第11章 移植FreeRTOS到STM32_单片机_06

我们用到的是Source目录

第11章 移植FreeRTOS到STM32_单片机_07

其中portable目录下需要根据编译工具和硬件芯片平台决定,我们选用的是Keil工具以及STM32F103(即Cortext-M3)序列,因此选择对应的文件夹里的文件,这里选择RVDS文件目录是因为Keil与RVDS都是选用这个目录

第11章 移植FreeRTOS到STM32_固件库_08

2.将这些文件添加到工程并分组

第11章 移植FreeRTOS到STM32_编译工具_09

如果先不添加stm32f10x_it.c文件的话,SysTick不会被调用,运行调试之后,查看逻辑分析仪是这种效果

第11章 移植FreeRTOS到STM32_固件库_10

任务被执行一段时间之后,发现就Flag1就不做翻转了,应该是由于SysTick函数没有实现,所以导致任务任务停止了运行,添加了stm32f10x_it.c文件,并在SysTick函数里将时基计数增量函数进行调用之后,就可以持续往下跑


学习心得:

1.移植FreeRTOS到STM32芯片上,第一步先要让裸机系统跑起来,其中包括了裸机系统工程的创建,以及依赖的固件库“stm32f10x固件库”

2.将FreeRTOS的源代码根据选择的编译工具Keil5,以及选择的芯片STM32F103ZE,选择FreeRTOS源码下边Portable目录下对应的适配文件

3.中断优先级的地址

4.将FreeRTOS与单片机关联起来,其中就是SVC、PendSV、SysTick三个的中断,对应中断服务函数:SVC_Handler,PendSV_handler,SysTick_Handler等函数与FreeRTOS中task对应的函数进行关联