FreeRTOS系统移植(以F4举例)

FreeRTOS — 源码下载与移植 FreeRTOS是一个开源免费的实时操作系统,它再嵌入式领域内应用目前已经非常的广泛! 阅读详情

1、准备工作

下载好FreeRTOS源码包,我这里下载的是9.0.0版本

源码下载地址:https://github.com/FreeRTOS/FreeRTOS-Kernel,打开上面的地址,点击main——Tags,然后拖动下拉条找到需要移植的版本,点击Code——Downlaod ZIP即可下载源码包。

基础工程代码

2、源码包裁剪

首先是只保留Demo和Source这两个文件夹

Demo文件夹:

        将CORTEX_M4F_STM32F407ZG-SK文件夹中的“FreeRTOSConfig.h”文件拷贝到Source/include文件夹内,其余文件都不要。(如果是F1则复制“CORTEX_STM32F103_Keil”文件夹,如果是F7/H7则复制“CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil“文件夹中的“FreeRTOSConfig.h”文件)

Source文件夹:

        1、portable文件夹:只保留MemMang和RVDS两个文件夹,其余删除。

        2、portable文件夹内的RVDS文件夹:只保留ARM_CM3、ARM_CM4F、ARM_CM7文件夹。 

        3、将Source文件夹重命名为FreeRTOS。

3、移植过程

1、将FreeRTOS源码文件夹拷贝至工程目录

2、打开基础工程,打开工程树,新建FreeRTOS/src。

3、将FreeRTOS文件夹根目录的C文件、portable/MemMang/heap_4.c、portable/RVDS、ARM_CMX/port.c添加到FreeRTOS-src文件夹(根据单片机型号选择port.c文件)。

4、添加编译路径。

5、FreeRTOSConfig.h文件修改

        将开头的“#ifdef __ICCARM__”删除(别忘了它对应的#endif);

        将 configUSE_IDLE_HOOK、configUSE_TICK_HOOK、 configCHECK_FOR_STACK_OVERFLOW、 configUSE_MALLOC_FAILED_HOOK这4个钩子函数的定义值改为0;

        注销以下语句:“#define xPortSysTickHandler SysTick_Handler”

        注意:如果不注销“#define xPortSysTickHandler SysTick_Handler”语句,就需要注销tm32h7xx_it.c文件中的“SysTick_Handler”函数,此时需要注意,不能使用HAL库自带的延时函数“HAL_Delay”否则程序会进入HardFault_Handler。

        将vAssertCalled的声明删除

6、stm32h7xx_it.c文件修改

        注释掉:PendSV_Handler()与、SVC_Handler()这两个函数(stm32h7xx_it.h文件同步注销)

        加入以下语句:“extern void xPortSysTickHandler(void);”

        在SysTick_Handlerhan'sh内增加以下语句:“if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)  xPortSysTickHandler(); /* OS开始跑了,才执行正常的调度处理 */”

7、在"stm32f4xx_hal_msp.c"的“HAL_MspInit”函数中增加“HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);”。此处修改可加可不加

8、新建freertos_task.c、freertos_task.h文件,并将其添加到工程中。

/*freertos_task.c文件*/
#include	"freertos_task.h"

TaskHandle_t	AppTaskCreate_Handle	=	NULL;/*	创建任务句柄 */
TaskHandle_t	Test1_Task_Handle	=	NULL;/*	LED任务句柄 */
TaskHandle_t	Test2_Task_Handle	=	NULL;/*	KEY任务句柄 */

void	FreeRTOS_Start(void)
{
	xTaskCreate((TaskFunction_t	)AppTaskCreate,		/*	任务入口函数 */
						(const	char*				)"AppTaskCreate",/*	任务名字 */
						(uint16_t							)512,		/*	任务栈大小 */
						(void*										)NULL,/*	任务入口函数参数 */
						(UBaseType_t				)1,	/*	任务的优先级 */
						(TaskHandle_t*		)&AppTaskCreate_Handle);/*AppTaskCreate_Handle	任务控制块指针 */	
	/*	启动任务调度 */											
	vTaskStartScheduler();			/*	启动任务,开启调度 */
}

void	AppTaskCreate(void)
{		
	taskENTER_CRITICAL();											//进入临界区
	/*	创建Test1_Task任务 */
	xTaskCreate((TaskFunction_t	)Test1_Task,	/*	任务入口函数 */
							(const	char*				)"Test1_Task",/*	任务名字 */
							(uint16_t							)128,			/*	任务栈大小 */
							(void*										)NULL, /*	任务入口函数参数 */
							(UBaseType_t				)1, 				/*	任务的优先级 */
							(TaskHandle_t*		)&Test1_Task_Handle);/*Test1_Task_Handle	任务控制块指针 */
	
	/*	创建Test2_Task任务 */
	xTaskCreate((TaskFunction_t	)Test2_Task,		/*	任务入口函数 */
							(const	char*				)"Test2_Task",/*	任务名字 */
							(uint16_t							)128,		/*	任务栈大小 */
							(void*										)NULL,/*	任务入口函数参数 */
							(UBaseType_t				)1,	/*	任务的优先级 */
							(TaskHandle_t*		)&Test2_Task_Handle);/*Test2_Task_Handle	任务控制块指针 */	
	
	vTaskDelete(AppTaskCreate_Handle);	//AppTaskCreate_Handle	删除AppTaskCreate任务
	
	taskEXIT_CRITICAL();												//退出临界区
}

void	Test1_Task(void*	parameter)
{
	while	(1)
	{
		HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
		vTaskDelay(500);/*	延时1000个tick	*/
	} 
}

void	Test2_Task(void*	parameter)
{
	while	(1)
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		vTaskDelay(250);
	} 
}
/*freertos_task.h文件*/
#ifndef	__FREERTOS_TASK_H_H
#define	__FREERTOS_TASK_H_H
#include	"main.h"

void	FreeRTOS_Start(void);
void	AppTaskCreate(void);
void	Test1_Task(void*	parameter);
void	Test2_Task(void*	parameter);
#endif	/*	__FREERTOS_TASK_H	*/

8、main.c文件修改:

        添加:#include "freertos_task.h"

        在while(1)前添加函数:FreeRTOS_Start();(注意:此时while(1)里的内容正常情况下将不再执行)

9、main.h文件添加头文件:

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

至此FreeRTOS的移植就结束了,可以通过“FreeRTOSConfig.h”文件进行裁剪。此次移植的对比工程链接在这:https://blog.youkuaiyun.com/qq_44712722/article/details/146316632?fromshare=blogdetail&sharetype=blogdetail&sharerId=146316632&sharerefer=PC&sharesource=qq_44712722&sharefrom=from_link

GD32F303移植FreeRTOS GD32F303移植FreeRTOS 一、移植环境 系统:WIN7 MDK:keil v5.26 开发板:GD32F303C-EVAL 固件库:V1.0.2 FreeRTOS版本:V10.4.0 二、添加FreeRTOS到工程 1> 在准备好的工程下创建一个FreeRTOS文件夹下,这这个文件夹下分别创建src、portable、include三个文件夹,如下图: ... 阅读详情

相关推荐

【FreeRTOS】在Cortex-M4开发板上移植FreeRTOS并且实现LED灯闪烁(保姆级教程)

本文详细地介绍如何自己移植FreeRTOS系统到M4开发板上以及使用CubeMx创建一个基于M4的FreeRTOS项目。

黑心萝卜三条杠的博客 6880

从 FreeRTOS 官网 下载最新的源码包FreeRTOS源码

从 FreeRTOS 官网 下载最新的源码包FreeRTOS源码

freertos学习01-移植到gd32

1、freertos简介 1、freertos顾名思义最大的特点就是免费,已经有越来越多的厂商的示例代码都是用freertos,比如st。 2、其次,freertos的文件数量很少,较为精简。 3、freertos经过多年的发展,其市场占有率移植位居前列,稳定性已经得到了市场的认可 1、1 freertos特点 freertos是一个可以裁剪的小型实时操作系统。其重要的特点简述如下: 内核支持抢占式,合作式和时间片调度,一般选择为抢占式 任务数量不限 任务优先级不限 高效的软件定时器,这个用起来很爽 堆栈

Jack Yi的博客 6192

freertos源码下载和目录结构分析

1、源码下载 下载网址:https://www.freertos.org/zh-cn-cmn-s/; 2、源码目录结构 3、关键的代码文件

weixin_42031299的博客 1348

基于STM32F103HAL库移植FreeRTOS移植实操 (一)

二、FreeRTOS手把手移植 1.生成HAL库工程 2.添加FreeRTOS源码文件到工程目录下 3.添加FreeRTOS源码到工程中 4.添加FreeRTOSConfig.h 5.修改Systick中断、SVC中断、PendSV中断 6.添加应用程序:验证移植是否成功。

cairongshou的博客 5389

STM32F103C8T6移植FreeRTOS

记录一下自己在学习FreeRTOS过程中的一些学习笔记,会是一个系列。同时每一份笔记都会附录已经验证完成的源码。这份笔记主要是在STM32F103C8T6平台上的FreeRTOS移植,希望大家喜欢。

moon2shine的博客 3446

【RTOS学习】1、下载FREERTOS官方源码

谷歌搜索freertos找到官网并且进入或者点开下面连接进入官网后点击下载FreeRTOS点击第一个,其中包含了各种示范代码第二个无示范代码,新手不推荐,这里我下载的第一个。

qq_64777806的博客 2124

STM32G431RBT6移植FreeRTOS

引言: 本文专门为参加了蓝桥杯嵌入式赛道的同学准备, 大家可能会有这样一个问题, 比完赛之后, 对于像继续使用STM32G431RBT6学习FreeRTOS的, 发现网上的教程使用的板子基本上都是F1和F4的, 其实呢, 随便移植一下就能在我们自己的板子上面运行FreeTROS了。如果大家有Linux的开发经验, 比如系统移植id基础, 那再来学这个FreeRTOS就比较容易了。

m0_74976404的博客 2538

FreeRTOSv.9.0.0源码

FreeRTOSv.9.0.0源码。

GD32F450移植FreeRTOS

2)在“FreeRTOSv10.0.1\FreeRTOS\Source\portable”目录下找到“MemMang”文件夹与“RVDS”文件夹,将它们拷贝到新建的port 文件夹下。3)在“FreeRTOSv10.0.1\ FreeRTOS\Source”目录下找到“include”文件夹,将它直接拷贝到新建的 FreeRTOS 文件夹中。添加port.c文件,具体路径:【FreeRTOS】->【portable】->【RVDS】->【ARM_CM4F】-> port.c。

m0_66338176的博客 988

将FreeRTOS移植到STM32F103RCT6(江协模版,标准库)

最近,想做台ROS导航小车,底层用STM32F103RCT6控制,想加入FreeRTOS,但网上基于江协模版并用标准库开发的比较少,这里记录一下自己的移植记录,方便后续学习。

m0_60831979的博客 2897

STM32F1与F4的移植

AN3427怎么是F1到F2的移植手册,其实原因就是在硬件方面,F2系列和F4系列完全是pin-to-pin兼容的,因此在硬件上,ST公司也就没有再出和F4有关的移植手册了

FreeRTOS移植步骤

(1) FreeRTOS源码打开(2) FreeRTOS文件夹打开(3)Soutce文件夹打开(4)portable文件夹打开。

m0_61973119的博客 2756

AT32F415移植FreeRTOS

将外设 抢占优先级 都设置为5,是为了FreeRTOS管理AT32F415的中断,如果AT32F415的中断优先级超出FreeRTOS管理范围程序在长时间运行时有可能会出现假死现象。很是好奇这是什么CPU?从上图对比看来,两款MCU在Flash相同,封闭相同的前提下,AT32F415的SRAM为32K,最高主频150M,GD32F303的SRAM为48K最高主频120M。既然要使用AT32F415了那么要对开发环境等资源了解一下,不查不知道一查发现AT32F415的资料挺多的,公司官网上的资料很全面。

qq_35830231的博客 1671

详解FreeRTOS:FreeRTOS源码工程下载和说明(基础篇—2)

FreeRTOS源码工程下载和说明。

不脱发的程序猿 2397

FreeRTOS的移植

本文以STM32F407标准库为例,讲解如何移植FreeRTOS,编译环境为MDK,FreeRTOS版本是FreeRTOSv9.0.0

嵌入式分享 5680

【超级详细!】手把手教你STM32移植FreeRTOS系统!

本文详细介绍了将FreeRTOS最新版(202406.01LTS)移植到STM32F407ZGT6开发板的完整过程。主要内容包括:1)源码获取途径;2)工程文件精简方法,保留必要内核文件;3)Keil环境配置步骤,包含9个关键.c文件和头文件路径设置;4)FreeRTOSConfig.h配置详解及修改建议;5)中断服务函数处理注意事项;6)应用测试示例,展示队列通信功能实现。文中提供了完整的配置代码和网盘资源,并针对STM32不同型号给出了适配建议。移植完成后可通过串口和LED验证系统运行状态。

2301_80348599的博客 8382

FreeRTOS源码压缩包

正点原子提供的FreeRTOS源码压缩包。B站视频教程对应的版本

上一篇: STM32串口空闲中断的使用方法
下一篇: 基于正点原子阿波罗F429开发板FMC接口驱动TFT LCD和SDRAM教程
猪猪童鞋
博客等级 码龄8年 152粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值