1. 简介
FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,专为嵌入式系统和小型微控制器设计。它提供了一套轻量级的任务调度和管理机制,使开发者能够在资源有限的嵌入式环境中有效地进行实时任务处理。
以下是FreeRTOS的一些关键特点和功能:
-
实时调度:FreeRTOS提供了可靠的实时任务调度,允许多个任务以优先级方式共享处理器时间。它使用基于优先级的抢占式调度算法,确保高优先级任务能够及时响应事件和中断。
-
任务管理:FreeRTOS允许开发者创建和管理多个独立的任务。每个任务有自己的代码和堆栈空间,并可以设置不同的优先级和调度策略。任务可以在运行时动态创建、删除和挂起,以适应不同的应用需求。
-
事件和信号量:FreeRTOS提供了事件和信号量机制,用于任务间的同步和通信。开发者可以使用事件标志组、二值信号量和计数信号量等机制来控制任务的执行顺序、共享资源和进行通信。
-
定时器和延时:FreeRTOS提供了定时器和延时功能,可以实现时间触发的任务调度和延时等待。开发者可以创建周期性或一次性定时器,以及指定任务的延时等待时间。
-
内存管理:FreeRTOS提供了内存管理功能,包括固定大小的内存池和动态内存分配器。这些功能可以用于任务间的数据共享和动态内存管理,帮助开发者优化内存使用和减少内存碎片。
-
可移植性:FreeRTOS具有高度可移植性,支持多个处理器架构和开发工具链。它提供了通用的API和配置选项,使得移植到不同的硬件平台和操作系统环境变得简单。
FreeRTOS是一个广泛应用于嵌入式系统和物联网设备的实时操作系统内核。它的开源特性使得开发者能够免费使用和定制内核,适应不同的应用场景和硬件要求。
2. 新建FreeRTOS工程-软件仿真
2.1 新建工程
- 建立工程文件夹目录
-
经典工程文件目录:DOC(说明文档)、Project(工程根目录)、User(用户编写的文件)、freertos
其中freertos文件夹:include(存放头文件的文件夹)、portable(存放芯片接口相关文件文件夹)
- 新建工程:在keil中新建工程
Manage Run-Time Environment页面需要勾选:CMSIS/CORE、Device/Startup
- keil中创建文件分组
经典分组(Groups):user、FreeRTOS/Pots、FreeRTOS/Source、doc
- 编译报错解决.\Objects\New_Test1.axf: Error: L6218E: Undefined symbol Image$ARM_LIB_STACKZILimit (referred from startup_armcm3.o).
Not enough information to list load addresses in the image map.
解决方法:取消勾选魔法棒中Linker的Use Memory Layout from Target Dialog
- 添加文件
在文件夹中添加文件后,添加进文件分组中(Add Existing File to Group) - 编写main函数
- 配置仿真时钟
3. 裸机系统
裸机系统通常分成轮询系统和前后台系统
- 轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。
- 相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。
4. 前后台系统
后台:
应用程序通常是一个无限的循环,在循环中,通过调用相应的处理函数,完成相应的操作,这部分可以看做为后台行为。
void main(void)
{
init();
while(1)
{
Task1();
Task2();
Task3();
Task4();
····
}
}
前台:
中断服务程序接收异步中断,来通知后台,后台收到中断请求后进行处理。
void XXX_ISR(void)
{
Clear interrupt;
Read data;
}
5. 多任务系统
在多任务系统中,每个任务都是独立的,任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。
void Task1()
{
while(1)
{
/* 无限循环 */
do_xxxx();
}
}
void Task2()
{
while(1)
{
/* 无限循环 */
do_xxxx();
}
}
void XXX_ISR(void)
{
Clear interrupt;
Read data;
}
6. 裸机系统与多任务系统的对比
模型 | 事件响应 | 事件处理 | 特点 |
---|---|---|---|
轮询系统 | 主程序 | 主程序 | 轮询响应事件,轮询处理事件 |
前后台系统 | 中断 | 主程序 | 实时响应事件,轮询处理事件 |
多任务系统 | 中断 | 任务 | 实时响应事件,实时处理事件 |