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架构,但代码量大
最后根据需求点击下面参数配置,再创建工程就可以了