0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解FreeRTOS:嵌入式软件系统架构

jf_Vqngj70R 来源:美男子玩编程 2023-05-04 16:40 次阅读

目前常见的嵌入式软件系统架构有三种可以分为:轮询系统架构、前后台系统架构和多任务系统架构。

1轮询系统架构

轮询系统架构是最简单的一种软件结构,主程序是一段无限循环的代码,在循环中顺序查询各个条件,如果满足就执行相应的操作。

这种方案的好处是实现简单,逻辑清晰,便于开发人员掌握。但是每个事件的查询和处理时间是不能确定的,假如前面的操作时间较长,那么后面的操作必然会被延迟。

如下图所示,假如步骤1操作需要很久,那么步骤2必然得不到及时处理,如果步骤2的工作很重要或者很紧急,那么系统的性能和响应能力就很差了。

442c09ea-e689-11ed-ab56-dac502259ad0.png

示例伪代码如下所示:

int main(void)
{
    HwInit();                //初始化外设
  while(1)
  {
    statement_1;         //语句1
    statement_2;         //语句2 
    statement_3;         //语句3
    ......
  }
  return 0;
}

2前后台系统架构

相对轮询系统架构,前后台系统架构对外部事件的处理做了优化,前后台系统架构是由中断驱动的。

主程序依然是一段无限循环的代码,称为后台程序,而事件的响应则由中断来完成,称为前台程序。

在后台程序执行时,如果有外部事件发生,则前台的中断程序会打断后台程序。在完成必要的事件响应之后,前台中断程序退出并通知后台程序来继续操作,由后台程序完成事件的后继处理。

从代码功能上讲,事件的响应和处理分为了两个部分。因为中断自身有优先级和嵌套的功能,所以优先级高的事件能够得到及时响应。但后台程序仍然需要按顺序处理各个事件的后继事务。

445a6f9c-e689-11ed-ab56-dac502259ad0.png

在中断源之间有优先级的概念,ISR会首先响应事件,简单的事件可以在ISR中直接处理,复杂的情况下则记录下必要数据和状态标记,等所有中断处理结束后,将由后台主函数按顺序处理各个事件。也可以理解,事件的响应是支持优先级的,但事件的最终处理却是顺序的。

使用中断来代替轮询方案中事件的查询操作,对事件的响应能力有较大改善。

示例伪代码如下所示:

int main(void)
{
    HwInit();                //初始化外设
  while(1)
  {
    statement_1;         //语句1
    statement_2;         //语句2 
    statement_3;         //语句3
    ......
  }
  return 0;
}


void interrupt_event(void)
{
    statement_4;         //语句4
    return 0;
}

3多任务系统架构

相对于前后台系统架构,多任务系统架构在响应事件的时候,同样是由多个中断处理程序完成的。但是对于事件的后继操作则是由多个任务来处理的,也就是说每个任务处理它所负责的事件。

在基于优先级的多任务系统架构中,因为任务间存在优先级高、低的关系,优先级高的任务可打断低优先级任务的运行而取得CPU的优先使用权,这样优先级高的事件就能及时得到处理;在基于分时机制的多任务系统中,任务间则按比例轮流占用处理器

4477a3b4-e689-11ed-ab56-dac502259ad0.png

因为多任务系统架构允许将具体的应用系统分成若干个相对独立的任务来管理,所以多任务操作系统的使用可以简化应用程序的设计,系统也变得简洁且便于维护和扩展。对实时性要求严格的事件都能得到及时可靠的处理。不过多任务操作系统自身将消耗更多的处理器、存储器等硬件资源,这是引入多任务机制的必要代价。

示例伪代码如下所示:

int main(void)
{
    HwInit();                //初始化外设
    OS_Init();               //初始化系统
    OS_Start();              //运行内核调度
  while(1)
  {      
    ......
  }
  return 0;
}


//任务1
void task_1(void)
{
  task_statement_1;
  task_statement_2;
  task_statement_3;
  OS_delay();
}


//任务2
void task_2(void)
{
  task_statement_1;
  task_statement_2;
  task_statement_3;
  OS_delay();
}


//任务3
void task_3(void)
{
  task_statement_1;
  task_statement_2;
  task_statement_3;
  OS_delay();
}

4区别

最后,对比一下三种嵌入式软件系统架构的特点和区别,如下表所示:

449bcfe6-e689-11ed-ab56-dac502259ad0.png

本专栏将开启对FreeRTOS多任务操作系统的学习,感兴趣的小伙伴敬请期待~

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5079

    文章

    19060

    浏览量

    304121
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10839

    浏览量

    211373
  • 操作系统
    +关注

    关注

    37

    文章

    6763

    浏览量

    123243
  • 嵌入式软件
    +关注

    关注

    4

    文章

    240

    浏览量

    26628
  • FreeRTOS
    +关注

    关注

    12

    文章

    483

    浏览量

    62069

原文标题:详解FreeRTOS:嵌入式软件系统架构(理论篇—1)

文章出处:【微信号:美男子玩编程,微信公众号:美男子玩编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式系统软件架构设计!

    1. 前言嵌入式软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的通用性,可以推广到其他的领域。提起嵌入
    发表于 08-10 07:46

    嵌入式软件开发中的程序架构

    嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于
    发表于 02-02 06:58

    决定嵌入式系统软件架构的因素和架构的影响

    嵌入式系统软件架构设计目录1.前言42.决定架构的因素和架构的影响42.1.常见的误解52.1.1.小型的
    发表于 11-08 06:54

    常见嵌入式开发程序架构是什么

    前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构
    发表于 02-14 06:37

    嵌入式软件架构设计

    嵌入式软件架构的设计,帮助我们建立合理,有效的软件架构
    发表于 11-09 17:34 19次下载

    基于FreeRTOS嵌入式实时操作系统的原理和实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述
    发表于 11-18 03:34 6661次阅读

    嵌入式操作系统FreeRTOS内存如何管理和堆

    嵌入式操作系统FreeRTOS内存管理和堆
    的头像 发表于 01-10 15:17 4667次阅读
    <b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b><b class='flag-5'>FreeRTOS</b>内存如何管理和堆

    嵌入式开发中常用的软件架构

    嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于
    的头像 发表于 01-01 10:16 5561次阅读
    <b class='flag-5'>嵌入式</b>开发中常用的<b class='flag-5'>软件</b><b class='flag-5'>架构</b>

    基于FreeRTOS嵌入式云台控制系统设计

    基于FreeRTOS嵌入式云台控制系统设计(嵌入式开发要学单片机吗)-基于FreeRTOS嵌入式
    发表于 07-30 11:57 19次下载
    基于<b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>嵌入式</b>云台控制<b class='flag-5'>系统</b>设计

    嵌入式操作系统FREERTOS的移植.

    嵌入式操作系统FREERTOS的移植.(济南嵌入式开发招聘)-嵌入式操作系统
    发表于 07-30 12:01 15次下载
    <b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b><b class='flag-5'>FREERTOS</b>的移植.

    嵌入式操作系统FreeRTOS的原理实现

    嵌入式操作系统FreeRTOS的原理实现(嵌入式开发工具使用实验报告)-嵌入式操作系统
    发表于 07-30 12:03 31次下载
    <b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b><b class='flag-5'>FreeRTOS</b>的原理实现

    嵌入式详解

    嵌入式详解(stm32嵌入式开发实例)-嵌入式详解,有需要的可以参考!
    发表于 07-30 16:07 64次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>详解</b>

    嵌入式软件开发三种程序架构详解

    嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。 软件架构对于
    的头像 发表于 09-05 09:53 3760次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发三种程序<b class='flag-5'>架构</b><b class='flag-5'>详解</b>

    嵌入式软件架构

    嵌入式软件架构
    发表于 10-20 20:51 20次下载
    <b class='flag-5'>嵌入式</b>系<b class='flag-5'>软件</b><b class='flag-5'>架构</b>

    嵌入式系统软件架构设计

    嵌入式系统软件架构设计目录1.前言42.决定架构的因素和架构的影响42.1.常见的误解52.1.1.小型的
    发表于 11-03 18:21 30次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>系统软件</b><b class='flag-5'>架构</b>设计