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

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

3天内不再提示

分享几点RTOS相比裸机的优势

jf_EksNQtU6 来源:strongerHuang 2024-01-24 18:23 次阅读

嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现小系统的功能。当软件设计变得庞大且复杂时,开发者应该考虑使用实时操作系统RTOS

28ad0592-baa1-11ee-8b88-92fbcf53809c.png

下面给大家分享几点RTOS相比裸机的优势:

1.硬实时响应

基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的响应。

2.系统性能最大化

针对大型的、复杂的嵌入式应用,使用一个事件驱动的RTOS,来替代基于轮询的超循环结构,可以生成一个更有效的设计,更小的存储占用,应用可以获得更多的处理器时间。

3.降低复杂度

RTOS允许应用划分为一个个小的自主运行的任务。任务执行自己的上下文中,不依赖其它任务或调度器。

4.高峰负载管理

RTOS提供了为管理系统高峰活动提供了一个有效的方法。更高的优先级分配给执行峰值负载活动的任务,确保他们在临界时间内访问处理器,在此期间,较低优先级的任务被延迟。

5.紧密集成的中间件

RTOS的模块化设计使得它可以很容易的增加中间件。中间件组件以任务和驱动的方式增加。他们使用RTOS提供的资源与其它任务通信。基于相应的事件被RTOS调度。

6.更大的开发团队

每个任务可以被认为是一个项目。通过RTOS提供的资源(队列、信号量等)来定义输入输出。将系统定义为一个个的任务,可以更容易的部署更多开发人员到一个项目。

7.易于调试和验证

系统划分为功能明确的任务,不依赖其它任务。在整个系统集成之前,可以很容易的调试和验证每个任务。

8.代码重用

RTOS系统中的模块化设计,鼓励将软件功能创建为独立的、验证过的任务。其独立性使得在其它设计中重用这些模块变得很简单。

现在MCU资源相比以前更多了,很多场景都适合跑RTOS,当然,也有少部分场景跑裸机就够了。

01

逻辑系统

裸机系统通常分成轮询系统和前后台系统。

1、轮询系统

轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体如代码清单所示:

intmain(void)
{
/* 硬件相关初始化 */
HardWareInit();

/* 无限循环 */
for(;;) {
 /* 处理事情 1 */
 DoSomething1();

 /* 处理事情 2 */
 DoSomethingg2();

 /* 处理事情 3 */
 DoSomethingg3();
}
}

轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单 1-1 中,如果只是实现 LED 翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。

假设DoSomethingg3 是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响 应 , 并 做 紧 急 处 理 , 而 这 个 时 候 程 序 刚 好 执 行 到 DoSomethingg1 , 要 命 的 是DoSomethingg1 需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到 DoSomethingg3 的时候就会丢失掉一次事件。足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

2、前后台系统

相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台, main 函数里面的无限循环我们称为后台,大概的伪代码见代码清单所示:

intflag1 =0;
intflag2 =0;
intflag3 =0;

intmain(void)
{
/* 硬件相关初始化 */
HardWareInit();

/* 无限循环 */
for(;;) {
if(flag1) {
/* 处理事情 1 */
DoSomething1();
}

if(flag2) {
/* 处理事情 2 */
DoSomethingg2();
}

if(flag3) {
/* 处理事情 3 */
DoSomethingg3();
}
}
}

voidISR1(void)
{
/* 置位标志位 */
flag1 =1;
/* 如果事件处理时间很短,则在中断里面处理
如果事件处理时间比较长,在回到后台处理 */
DoSomething1();
}

voidISR2(void)
{
/* 置位标志位 */
flag2 =2;

/* 如果事件处理时间很短,则在中断里面处理
如果事件处理时间比较长,在回到后台处理 */
DoSomething2();
}

voidISR3(void)
{
/* 置位标志位 */
flag3 =1;
/* 如果事件处理时间很短,则在中断里面处理
如果事件处理时间比较长,在回到后台处理 */
DoSomething3();
}

在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。

虽然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在大多数的中小型项目中,前后台系统运用的好,堪称有操作系统的效果。

02

多线程系统

相比前后台系统,多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。

当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性又被提高了。

多线程系统大概的伪代码具体见代码清单所示:

intflag1 =0;
intflag2 =0;
intflag3 =0;

intmain(void)
{
/* 硬件相关初始化 */
HardWareInit();

/* OS 初始化 */
RTOSInit();

/* OS 启动,开始多线程调度,不再返回 */
RTOSStart();
}

voidISR1(void)
{
/* 置位标志位 */
flag1 =1;
}

voidISR2(void)
{
/* 置位标志位 */
flag2 =2;
}

voidISR3(void)
{
/* 置位标志位 */
flag3 =1;
}

voidDoSomething1(void)
{
/* 无限循环,不能返回 */
for(;;) {
 /* 线程实体 */
 if(flag1) {

 }
}
}

voidDoSomething2(void)
{
/* 无限循环,不能返回 */
for(;;) {
 /* 线程实体 */
 if(flag2) {

 }
}
}

voidDoSomething3(void)
{
/* 无限循环,不能返回 */
for(;;) {
 /* 线程实体 */
 if(flag3) {

 }
}
}

相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。

每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。

加入了操作系统,我们的编程反而变得简单了。整个系统随之带来的额外开销就是操作系统占据的那一丁点的 FLASH 和 RAM。现如今,单片机的 FLASH 和 RAM 是越来越大,完全足以抵挡 RTOS 那点开销。

轮询、前后台和多线程系统软件模型区别:

28c71608-baa1-11ee-8b88-92fbcf53809c.jpg





审核编辑:刘清

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

    关注

    68

    文章

    18288

    浏览量

    222175
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16019

    浏览量

    343656
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3431

    浏览量

    128225
  • RTOS
    +关注

    关注

    20

    文章

    776

    浏览量

    118796
  • 裸机
    +关注

    关注

    0

    文章

    37

    浏览量

    6154

原文标题:MCU跑RTOS相比裸机的优势

文章出处:【微信号:谈思实验室,微信公众号:谈思实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CCS中如何创建裸机RTOS工程实例?

    刚刚学习DSP,请问裸机项目、带RTOS的项目是如何创建的?直接CCS新建的项目是裸机的还是RTOS的项目?
    发表于 06-03 17:31

    我的项目要不要跑RTOS

    给大家分享几点RTOS相比裸机优势:1.硬实时响应基于优先级抢占的RTOS,根据任务的实时需求
    发表于 06-17 06:30

    怎样从裸机编程转到RTOS编程呢

    学完uCOS-II和FreeRTOS后,想从裸机编程转到RTOS编程,但是想从裸机编程转到RTOS编程确实有点困难呀!以下是向ba:向kinsno: 讨教如何设计某个仪表上的4个数码管
    发表于 02-28 13:54

    裸机系统和RTOS该怎么选择呢

    玩过单片机的同学都清楚,采用裸机系统开发,在很多场景下完全可以满足需求。但我们也注意到,随着物联网的兴起,各种物联网RTOS雨后春笋般冒了出来,那么裸机系统和RTOS该怎么选择呢?
    发表于 03-02 07:17

    低功耗应用是用RTOS还是裸机,哪个省电?

    低功耗应用是用RTOS还是裸机,哪个省电?
    发表于 09-20 07:43

    RTOS会比裸机实时性好吗?

    RTOS会比裸机实时性好么
    发表于 10-13 07:17

    实时操作系统RTOS相比裸机优势有哪些?

    足等。   针对这部分朋友,今天分享几点相关内容:  嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现小系统的功能。当软件设计变得庞大且复杂时,开发者应该考虑使用实时操作系统RTOS。 下面给大家分享几点
    的头像 发表于 12-25 15:48 6242次阅读

    为什么我们需要从裸机RTOS

    很多单片机初学者都是从裸机开始的,裸机确实也能开发出好的产品,但作为一个嵌入式软件工程师,如果只能用裸机开发产品,那肯定是不够的。 要从裸机的思维转变到
    的头像 发表于 04-25 16:39 1853次阅读

    裸机RTOS的理解和并发带来的问题

    1 裸机RTOS的理解 首先这里只针对单核CPU架构的芯片展开讨论,大部分是MCU吧,而多核CPU的讨论相对比较复杂,暂不涉及~玩RTOS的朋友都知道,裸机与OS的最大区别就是实现多
    的头像 发表于 06-13 15:13 3839次阅读

    RTOS是什么,裸机开发的详细介绍

    本课是在听了韦东山老师的裸机RTOS开发模式课程后,才简单了解裸机开发与RTOS开发的区别。更多的是对现在自己编程方式有一个认知,希望在这里与大家分享。 什么是
    发表于 03-07 14:16 6670次阅读
    <b class='flag-5'>RTOS</b>是什么,<b class='flag-5'>裸机</b>开发的详细介绍

    裸机调度过渡到RTOS的7个小技巧

    实时操作系统已经成为许多嵌入式系统中的关键组件,从裸机调度过渡到RTOS可能是一件棘手的事情。这里有七个小技巧可以帮助嵌入式开发人员更轻松地完成过渡。
    的头像 发表于 11-29 11:09 869次阅读

    使用裸机云的优势有哪些?

    裸机云和虚拟化云模型都提供类似的功能和优势。它们都有助于基于需求和基于 DevOps 的配置和按需付费预算。但是,裸机云还有一些额外的好处,包括硬件控制、可扩展性和性能优化。 如前所述,引入管理程序
    的头像 发表于 03-02 12:27 303次阅读

    使用裸机云的优势有哪些?

    裸机云和虚拟化云模型都提供类似的功能和优势。它们都有助于基于需求和基于 DevOps 的配置和按需付费预算。但是,裸机云还有一些额外的好处,包括硬件控制、可扩展性和性能优化。 如前所述,引入管理程序
    的头像 发表于 07-13 14:08 230次阅读

    RTOS相比裸机有什么优点?RTOS相比裸机更方便吗?

    RTOS相比裸机有什么优点?RTOS相比裸机更方便吗? RT
    的头像 发表于 10-29 16:33 1010次阅读

    几点RTOS相比裸机优势分享

    相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。
    发表于 01-24 18:21 354次阅读
    <b class='flag-5'>几点</b><b class='flag-5'>RTOS</b><b class='flag-5'>相比</b><b class='flag-5'>裸机</b>的<b class='flag-5'>优势</b>分享