一、Keil下面没有对应选项
首先碰到一个问题:书中使用的是STM32F10X系列的单片机,但是自己安装的Keil下面没有对应选项:
解决方法:
1.去官方找到对应的包
https://www.keil.com/dd2/pack/#!#eula-container
2.找到Keil对应下的包然后下载
3.在Keil工具中的Pack Install里导入
Keil版本过低,包的版本过高,
下对应的2.1.0版本
下载后,双击安装即可
二、创建裸机工程
移植FreeRTOS的前提是,先创建裸机工程,裸机工程依赖“stm32f10x固件库”,需要在网上先下载对应的库文件,在选择创建工程的时候由于使用的是Keil 5选择STM32F103ZE,其实,可以简单的先使用stm32f10x_it.c和stm32f10x_it.h文件,
关于FreeRTOS的移植有如下几个点:
1.理解FreeRTOS的目录里对应的文件
我们用到的是Source目录
其中portable目录下需要根据编译工具和硬件芯片平台决定,我们选用的是Keil工具以及STM32F103(即Cortext-M3)序列,因此选择对应的文件夹里的文件,这里选择RVDS文件目录是因为Keil与RVDS都是选用这个目录
2.将这些文件添加到工程并分组
如果先不添加stm32f10x_it.c文件的话,SysTick不会被调用,运行调试之后,查看逻辑分析仪是这种效果
任务被执行一段时间之后,发现就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对应的函数进行关联