【FreeRTOS学习】第1章 简介&新建工程

1. 简介

​ FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,专为嵌入式系统和小型微控制器设计。它提供了一套轻量级的任务调度和管理机制,使开发者能够在资源有限的嵌入式环境中有效地进行实时任务处理。

​ 以下是FreeRTOS的一些关键特点和功能:

  1. 实时调度:FreeRTOS提供了可靠的实时任务调度,允许多个任务以优先级方式共享处理器时间。它使用基于优先级的抢占式调度算法,确保高优先级任务能够及时响应事件和中断。

  2. 任务管理:FreeRTOS允许开发者创建和管理多个独立的任务。每个任务有自己的代码和堆栈空间,并可以设置不同的优先级和调度策略。任务可以在运行时动态创建、删除和挂起,以适应不同的应用需求。

  3. 事件和信号量:FreeRTOS提供了事件和信号量机制,用于任务间的同步和通信。开发者可以使用事件标志组、二值信号量和计数信号量等机制来控制任务的执行顺序、共享资源和进行通信。

  4. 定时器和延时:FreeRTOS提供了定时器和延时功能,可以实现时间触发的任务调度和延时等待。开发者可以创建周期性或一次性定时器,以及指定任务的延时等待时间。

  5. 内存管理:FreeRTOS提供了内存管理功能,包括固定大小的内存池和动态内存分配器。这些功能可以用于任务间的数据共享和动态内存管理,帮助开发者优化内存使用和减少内存碎片。

  6. 可移植性:FreeRTOS具有高度可移植性,支持多个处理器架构和开发工具链。它提供了通用的API和配置选项,使得移植到不同的硬件平台和操作系统环境变得简单。

FreeRTOS是一个广泛应用于嵌入式系统和物联网设备的实时操作系统内核。它的开源特性使得开发者能够免费使用和定制内核,适应不同的应用场景和硬件要求。

2. 新建FreeRTOS工程-软件仿真

2.1 新建工程

  1. 建立工程文件夹目录
  • 经典工程文件目录:DOC(说明文档)、Project(工程根目录)、User(用户编写的文件)、freertos

    其中freertos文件夹:include(存放头文件的文件夹)、portable(存放芯片接口相关文件文件夹)

  1. 新建工程:在keil中新建工程

Manage Run-Time Environment页面需要勾选:CMSIS/CORE、Device/Startup

  1. 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
  1. 添加文件
    在文件夹中添加文件后,添加进文件分组中(Add Existing File to Group)
  2. 编写main函数
  3. 配置仿真时钟

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. 裸机系统与多任务系统的对比

模型事件响应事件处理特点
轮询系统主程序主程序轮询响应事件,轮询处理事件
前后台系统中断主程序实时响应事件,轮询处理事件
多任务系统中断任务实时响应事件,实时处理事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值