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多任务操作系统的学习,感兴趣的小伙伴敬请期待~

审核编辑:汤梓红

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

    关注

    4982

    文章

    18281

    浏览量

    288442
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206560
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121877
  • 嵌入式软件
    +关注

    关注

    4

    文章

    227

    浏览量

    26383
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347

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

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

收藏 人收藏

    评论

    相关推荐

    诚聘嵌入式软件架构

    猎头职位:嵌入式软件架构师【厦门】岗位职责:1、负责软件系统总体方案设计和详细设计,负责核心代码编写;2、负责技术方案评审,负责制定
    发表于 03-01 10:20

    嵌入式系统 硬件与软件架构(英文)

    嵌入式系统 硬件与软件架构(英文)
    发表于 01-23 14:30

    嵌入式系统 硬件与软件架构(英文)

    嵌入式系统 硬件与软件架构(英文)
    发表于 02-27 09:27

    ARM嵌入式Linux系统开发详解

    源程序,便于读者高效、直观地学习。《Linux典藏大系:ARM嵌入式Linux系统开发详解(第2版)》共分4篇。第1篇介绍了嵌入式系统入门、
    发表于 09-14 08:57

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

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

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

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

    嵌入式架构有多重要

    原有的代码。接下来嵌入式ARM便和大家分享一下,嵌入式架构那些事儿……01嵌入式系统的基本架构
    发表于 10-27 08:15

    嵌入式Linux系统知识架构

    嵌入式Linux系统知识架构及层次嵌入式Linux系统构成及启动略析嵌入式Linux三剑客之ub
    发表于 10-27 07:22

    概述常用的嵌入式操作系统

    嵌入式操作系统需要在不同的微处理器中,因此,需要将微处理器外围的嵌入式硬件抽象处理,形成标准的接口函数或接口文件,便于嵌入式操作系统的.
    发表于 11-03 07:11

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

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

    主流的嵌入式CPU架构-ARM架构详解

    简单聊聊  上一篇,介绍到了什么是嵌入式,以及嵌入式与单片机、PC机的区别,简单聊了聊有关嵌入式软件学习的一些内容。这一片打算接着上一篇的内容,详细的说一下现在主流的
    发表于 12-13 06:05

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

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

    嵌入式实时操作系统FreeRTOS基本概述

    嵌入式实时操作系统FreeRTOS基本概述在嵌入式领域当中,实时操作系统的应用越来越广泛了,目前嵌入式
    发表于 02-16 07:12

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

    基于FreeRTOS嵌入式云台控制系统设计(嵌入式开发要学单片机吗)-基于FreeRTOS嵌入式
    发表于 07-30 11:57 17次下载
    基于<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>的移植.