问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

RTOS与裸机系统的区别:从轮询到多线程的演变

创作时间:
作者:
@小白创作中心

RTOS与裸机系统的区别:从轮询到多线程的演变

引用
CSDN
1.
https://blog.csdn.net/qq_38835449/article/details/142049056

实时操作系统(RTOS)与裸机系统是嵌入式系统开发中常见的两种选择。本文将从轮询系统、前后台系统和多线程系统三个方面,深入探讨它们之间的区别,并分析RTOS的优势和局限性。

1. 轮询系统

轮询系统是最简单的软件结构,通常适用于只需要顺序执行代码且不需要外部事件驱动的场景。其基本工作原理是在主程序中通过一个死循环不断检查和处理各种任务。

int main(void)
{
  /* 硬件相关初始化 */
  HardWareInit();
  /* 无限循环 */
  for (;;) {
    /* 处理事情 1 */
    DoSomething1();
    /* 处理事情 2 */
    DoSomethingg2();
    /* 处理事情 3 */
    DoSomethingg3();
  }
}

这种系统结构虽然简单,但实时响应能力较差,特别是在需要处理外部事件(如按键操作)时,无法保证及时响应。

2. 前后台系统

前后台系统在轮询系统的基础上加入了中断机制,提高了系统的实时响应能力。外部事件的响应在中断中完成,而事件的处理则回到主循环中进行。

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
  /* 硬件相关初始化 */
  HardWareInit();
  /* 无限循环 */
  for (;;) {
    if (flag1) {
      /* 处理事情 1 */
      DoSomething1();
    }
    if (flag2) {
      /* 处理事情 2 */
      DoSomethingg2();
    }
    if (flag3) {
      /* 处理事情 3 */
      DoSomethingg3();
    }
  }
}
void ISR1(void)
{
  /* 置位标志位 */
  flag1 = 1;
  /* 如果事件处理时间很短,则在中断里面处理
  如果事件处理时间比较长,在回到后台处理 */
  DoSomething1();
}
void ISR2(void)
{
  /* 置位标志位 */
  flag2 = 2;
  /* 如果事件处理时间很短,则在中断里面处理
  如果事件处理时间比较长,在回到后台处理 */
  DoSomething2();
}
void ISR3(void)
{
  /* 置位标志位 */
  flag3 = 1;
  /* 如果事件处理时间很短,则在中断里面处理
  如果事件处理时间比较长,在回到后台处理 */
  DoSomething3();
}

3. 多线程系统

多线程系统进一步提升了系统的实时性。事件响应在中断中完成,而事件处理则在线程中进行。每个线程都有自己的优先级,优先级高的线程会被优先执行。

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int main(void)
{
  /* 硬件相关初始化 */
  HardWareInit();
  /* OS 初始化 */
  RTOSInit();
  /* OS 启动,开始多线程调度,不再返回 */
  RTOSStart();
}
void ISR1(void)
{
  /* 置位标志位 */
  flag1 = 1;
}
void ISR2(void)
{
  /* 置位标志位 */
  flag2 = 2;
}
void ISR3(void)
{
  /* 置位标志位 */
  flag3 = 1;
}
void DoSomething1(void)
{
  /* 无限循环,不能返回 */
  for (;;) {
    /* 线程实体 */
    if (flag1) {
    }
  }
}
void DoSomething2(void)
{
  /* 无限循环,不能返回 */
  for (;;) {
    /* 线程实体 */
    if (flag2) {
    }
  }
}
void DoSomething3(void)
{
  /* 无限循环,不能返回 */
  for (;;) {
    /* 线程实体 */
    if (flag3) {
    }
  }
}

相比前后台系统,多线程系统将程序主体分割成多个独立的线程,每个线程都在自己的上下文中运行,互不干扰,且由操作系统调度管理。这种设计不仅提高了系统的实时性,还简化了编程复杂度。

RTOS的优势与局限性

RTOS具有以下优势:

  1. 硬实时响应:基于优先级抢占机制,确保关键任务优先执行。
  2. 系统性能最大化:通过事件驱动替代轮询,优化存储占用和处理器时间。
  3. 降低复杂度:将应用划分为独立任务,简化开发和调试。
  4. 高峰负载管理:通过优先级调度有效管理系统负载。
  5. 模块化设计:易于集成中间件和重用代码模块。
  6. 团队协作:支持多人并行开发,提高项目效率。

然而,RTOS也存在一些局限性:

  1. 资源消耗:需要额外的存储空间(FLASH和RAM)来运行操作系统。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号