STM32 FreeRTOS移植实战详解:从入门到精通的指南

下载源码后,解压打开FreeRTOS源码文件目录结构如下图所示:

2、FreeRTOS移植

FreeRTOS文件夹下,有 DemoSource文件夹是移植过程中需要使用的,FreeRTOS文件夹下面的其它文件夹及文件可忽略。

RTOS代码的核心包含在三个文件中:tasks.c、queue.c、list.c。这三个文件位于FreeRTOS/Source目录。在该目录下还包含三个可选的文件:timers.c、event_groups.c、croutine.c、stream buffer.c,分别实现软件定时、事件组、协程功能和流式缓冲区。

FreeRTOS官方移植参考说明:Microcontrollers and compiler tool chains supported by FreeRTOS

移植步骤:

①、在KEIL工程主目录下创建FreeRTOS文件夹,然后在FreeRTOS中依次创建include、port、src文件夹,如下图所示。

②、进入下载的FreeRTOSv202212.01源码文件中,将FreeRTOSv202212.01\FreeRTOS\Source\include 的文件拷贝到KEIL工程的FreeRTOS/include中

③、进入FreeRTOSv202212.01\FreeRTOS\Source 目录,将 croutine.c、event groups.c、list.c、 queue.c、stream buffer.c、tasks.c、timers.c拷贝到KEIL工程的 FreeRTOS/src 路径。

④、进入 FreeRTOSv202212.01\FreeRTOS\Source\portable 目录,拷贝MemMang文件到KEIL工程中的FreeRTOS/port路径下。

⑤、进入FreeRTOSv202212.01\FreeRTOS\Demo中,选择对应芯片的Demo例程,然后拷贝FreeRTOSConfig.h文件到 FreeRTOS/include 路径中。

本例程选择了STM32F407系列芯片进行移植,其它芯片的移植操作和本例程操作类似。

⑥进入FreeRTOSv202212.01\FreeRTOS\Source\portable\RVDS\ARM_CM4F,拷贝port.c和portmacro.h到 FreeRTOS/port 路径下。

⑦、将FreeRTOS代码添加到KEIL裸机工程设备树中。

heap_x.c内存分配文件根据需要,只能加入一个!

⑧、打开FreeRTOSConfig.h文件,因MDK默认使用armcc编译器,需在FreeRTOSConfig.h文件中添加defined(_CC_ARM),避免源码找不到SystemCoreClock,详细添加如下:

/* Ensure stdint is only used by the compiler, and not the assembler. */
#if defined(__ICCARM__)||defined(__CC_ARM)||defined(__GNU__)
	#include <stdint.h>
	extern uint32_t SystemCoreClock;//系统时钟值168000000,在system_stm32f4xx.c中定义
#endif

3、编译运行FreeRTOS

测试FreeRTOS源代码

#include "stm32f4xx.h"
#include "FreeRTOS/FreeRTOS.h"
#include "FreeRTOS/task.h"
#include <stdio.h>
#include "usart.h"

TaskHandle_t app_task1_handle = NULL;
TaskHandle_t app_task2_handle = NULL;
void app_task1(void* pvParameters);
void app_task2(void* pvParameters);

int main(void)
{
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
	//SysTick_Config(SystemCoreClock/configTICK_RATE_HZ);	//开启导致硬件错误中断
	USART1_Init(115200);
	printf("starting...\r\n");
	/* 创建app_task1任务 */
	xTaskCreate((TaskFunction_t )app_task1,  		/* 任务入口函数 */
			  (const char*    )"app_task1",			/* 任务名字 */
			  (uint16_t       )512,  				/* 任务栈大小 */
			  (void*          )NULL,				/* 任务入口函数参数 */
			  (UBaseType_t    )2, 					/* 任务的优先级 */
			  (TaskHandle_t*  )&app_task1_handle);	/* 任务控制块指针 */ 
	
	/* 创建app_task2任务 */		  
	xTaskCreate((TaskFunction_t )app_task2,  		/* 任务入口函数 */
			  (const char*    )"app_task2",			/* 任务名字 */
			  (uint16_t       )512,  				/* 任务栈大小 */
			  (void*          )NULL,				/* 任务入口函数参数 */
			  (UBaseType_t    )2, 					/* 任务的优先级 */
			  (TaskHandle_t*  )&app_task2_handle);	/* 任务控制块指针 */ 
	/* 开启任务调度 */
	vTaskStartScheduler(); 
}

void app_task1(void* pvParameters)
{
	int cnt = 0;
	for(;;)
	{
		printf("app_task1 is running %d...\r\n", cnt);
		vTaskDelay(1000);
		cnt++;
	}
}

void app_task2(void* pvParameters)
{
	int cnt = 0;
	for(;;)
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/f9fa800a55500141504f2984194f3e02.png)

![img](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/955cbdb19d54f920e2d00503c720f9a5.jpeg)

![img](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/58b6b862ff456ccc9118fcd093bb08d4.png)

 ![img](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/f6c1b648774dcb29e57e90b9eb5de594.png)

![img](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/5343ed971f59a4b960ad495a9b4a429a.png)

![img](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/bc67cc036ff3204b00852859e56d0a9a.png)

![](https://i3.wp.com/img-blog.csdnimg.cn/img_convert/91be7f276797ac1e7728211086977204.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


作者:2401_84010061

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 FreeRTOS移植实战详解:从入门到精通的指南

发表回复