概述
本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件
OpenMCU_FreeRTOS工程的愿景主要有:
1.、能移植支持主流mcu的freeRTOS;
2、深入分析FreeRTOS代码和第三方库代码,让嵌入式学习变得非常容易;
3、集成一些嵌入式产品中常用的第三方库文件,并且该工程会开发做一些产品原型,所有的技术方案,就像它的名字一样,全部开源。
移植步骤
1、keil创建stm32F407的工程
2、工程创建完毕后,在keil中建立分组管理,如下所示:
创建完成后的效果:
3、下载FreeRTOS代码
从 GitHub - FreeRTOS/FreeRTOS: 'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.下载最新的内核代码
4、解压下载的源码,并找到CORTEX_M4F_STM32F407ZG-SK的demo工程模板
5、在刚才新创建的keil STM32F407ZGT6工程目录下创建Appication文件夹,
6、将demo工程中的如下文件拷贝到Application文件夹下面.
拷贝后的效果:
7、Application分组添加c文件
8、CMSIS添加system_stm32f4xx.cC文件,文件存放的路径为:
9、添加STM32F4 BSP驱动文件,文件路径为:
10、添加启动文件startup_stm32f407xx.s
11、添加freeRTOS内核C文件,文件路径为:
12、添加内核移植中的与STM32F4相关的代码
代码路径在kernel/portable部分
13、所有分组添加完后如下图所示:
14、添加编译时的头文件路径
15、编译器选项设置
a. target选项
b. c/c++选项
加入STM32F407xx定义
17、修改stm32f4xx_it.c文件中的如下函数定义
__weak void SVC_Handler(void)
{
vPortSVCHandler();
}
__weak void PendSV_Handler(void)
{
xPortPendSVHandler();
}
__weak void SysTick_Handler(void)
{
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
xPortSysTickHandler();
}
}
删除: __weak void EXTI9_5_IRQHandler(void)和 __weak void EXTI15_10_IRQHandler(void)
17、编译输出
工程连接
yanl1229/OpenMCU_FreeRTOS