FreeRTOS——操作系统介绍、手动移植代码与CubeMx创建FreeRTOS

FreeRTOS简介

1.嵌入式操作系统

嵌入式操作系统是为了区别于通用的计算机操作系统,人们把嵌入到对象体系中,为实现对象体系智能化控制的计算机操作系统,称作嵌入式计算机操作系统,简称嵌入式操作系统。
嵌入式操作系统分类:
②按对外部事件的响应能力来分类,嵌入式操作系统分实时操作系统和分时操作系统。
如果操作系统能及时的响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对事件的处理,那么这种系统就称为实时操作系统。
如果操作系统按时间片轮转完成各个任务,任务没有优先级,这种系统就称为分时操作系统。
②按时间的严格程度来分,实时操作系统又分为强实时操作系统和弱实时操作系统。系统必须在极其严格的时间内完成的任务叫做硬实时操作系统,比如飞机系统;如果不是很严格的话就是弱实时操作系统,比如信息采集系统。

2.FreeRTOS 实时操作系统
 FreeRTOS 是一款开源免费的实时操作系统,商业使用的话不需要用户公开源代码,也不存在任何版权问题,是当前小型嵌入式操作系统市场使用率最高的。
 FreeRTOS 的移植比较简单,只需要用户添加需要的源码文件,不需要做任何的底层工作,再添加几个宏定义即可。

裸机系统与多任务系统

1.裸机系统

裸机编程时,先初始化相关的硬件,然后让主程序在一个死循环里面不断地循环,顺序地处理各种事件。对于紧急事件,采用中断功能进行快速响应。

比如:

 2.多任务系统

相比于裸机系统,多任务系统的事件处理是在任务中完成的,对于紧急事件,同样采用中断功能进行快速响应。

多任务系统通常包含多个任务,彼此独立,方便编程,同时,任务具有优先级,高优先级任务可以打断低优先级任务,系统的实时性进一步得到提高。

比如:

 

引入操作系统后,在编程时不需要精心设计程序执行流,任务间不存在干扰。当然,系统需要占用一定的RAM和FLASH资源。 

手动移植FreeRTOS代码

第一步:官网下载FreeRTOS源码

官网网址:http://www.freertos.org,进入后点击 下载FreeRTOS

 第二步:准备基础工程,这里用的是之前使用的流水灯工程为基础(或自行建立一个工程即可),延时时钟基准由SysTick改到Tim2(任意空闲的定时器都行),删除主循环内的代码。

FreeRTOS操作系统使用SysTick作为基准时钟

 第三步:将FreeRTOS源码添加至工程中,设置头文件路径,编译工程。

  • 将FreeRTOS源码复制到工程中,另外,将portable与RVDS文件夹多余的文件删除

 

 

  • Keil工程新建2个Groups-FreeRTOS/Source与FreeRTOS/Port,同时添加相应的文件

 

  • 添加头文件路径

第四步:将FreeRTOSConfig.h文件(位于Demo-CORTEX-STM32F103_Keil工程中)添加至工程MyApplication文件内,方便打开与修改,同时添加至MyApplication组内,再次编译。

第五步:修改FreeRTOSConfig.h文件并编译。

 这一步编译后还会出现3个错误,原因是图中下面框中的3个自行增加的宏定义与中断文件,即stm32f1xx_it.c中的3个函数定义重合,将中断文件里的3个函数注射掉即可。下图是其中1个函数。

进行这一步的原因是为了FreeRTOS操作系统中的3个函数名与实际相联系,便于理解操作。

 第六步:工程添加MyTask.c文件,用于以后建立任务(使用结构体的方式创建任务),同时MyApplication.h头文件中添加FreeRTOS与MyTask的头文件。

 

MyTask_t MyTask = 
{
	AppTaskCreate
};      

/*
	* @name   AppTaskCreate
	* @brief  创建应用任务
	* @param  None
	* @retval None      
*/
static void AppTaskCreate()
{
	xTaskCreate(vTaskLED1,  
  "vTaskLED1",            
  512,                    
  NULL,                   
  1,                      
  &xHandleTaskLED1);     
	
	xTaskCreate(vTaskLED2,  
  "vTaskLED2",           
  512,                    
  NULL,                  
  2,                      
  &xHandleTaskLED2);     
	
	xTaskCreate(vTaskLED3,  //任务函数
  "vTaskLED3",            //任务名称
  512,                    //任务栈大小
  NULL,                   //任务参数
  3,                      //任务优先级
  &xHandleTaskLED3);      //任务句柄,需实现定义
}

 使用CubeMx创建FreeRTOS

准备基础工程,这里用的是之前使用的流水灯工程为基础(或自行建立一个工程即可),延时时钟基准由SysTick改到Tim2(任意空闲的定时器都行),删除主循环内的代码。

点击Middleware卡,点击FreeRTOS,选择interface

interfa选择说明:

        Disable:禁用FreeRTOS

        CMSIS_V1:CMSIS-RTOS版本为V1.02,一般选择这个

        CMSIS_V2:CMSIS-RTOS版本为V2.00,兼容更多的CPU架构,但代码量大

 最后根据需求点击下面参数配置,再创建工程就可以了

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西红柿鸡蛋超级美味

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值