一、硬件准备

  1. 一个STM32开发板(STM32F429IGT6),及其电源线等;
  2. 一个ST-Link下载器及其连接线等。

二、软件准备

  1. FreeRTOS源码(V9.0.0);
  2. 一个基于STM32 HAL库的基础例程(跑马灯例程)。

三、移植FreeRTOS

3.1 添加FreeRTOS源码至工程

添加源代码至工程目录,添加至工程分组中,添加相关头文件路径
编译,提示找不到 FreeRTOSConfig.h

3.2 添加 FreeRTOSConfig.h

文件来源:事先参考众多例程中的 FreeRTOSConfig.h 后,总结出来的
编译结果为:2个error。SVC_Handler() 和 PendSV_Handler() 这两个函数在 stm32f4xx_it.c 文件和 port.c 文件中重复定义了。

3.3 删除2个中断服务函数

将 stm32f4xx_it.c 文件和 stm32f4xx_it.h 文件中关于 SVC_Handler() 和 PendSV_Handler() 这两个函数的定义和声明都删掉,重新编译。
编译结果为:0 error, 0 warning。

3.4 重写1个中断服务函数

在 stm32f4xx_it.c 文件合适的位置添加如下两段代码:

extern void xPortSysTickHandler(void);

#include "FreeRTOS.h"
#include "task.h"

分别意为增加一个函数声明,以及包含支持该函数的两个头文件。
然后将 SysTick_Handler() 函数重写为如下:

void SysTick_Handler(void)
{
	if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
	{
		xPortSysTickHandler();
	}
	HAL_IncTick();
}

所做更改为:在 SysTick_Handler() 函数中增加 FreeRTOS 的滴答处理函数。

3.5 替换 main.c 文件

将 main.c 文件替换为我们事先准备好的 main.c 文件。


版权声明:本文为m0_38064214原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_38064214/article/details/84205237