• 351查看
  • 0回复

[底层软件] MCU跑RTOS相比裸机的优势

[复制链接]


该用户从未签到

发表于 3-3-2024 14:34:45 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


经常有读者问关于RTOS的问题,比如:我现在要不要学习RTOS? 学习RTOS有什么好处? 我的项目要不要跑RTOS?

问这些问题,其实归根结底还是对RTOS理解的不够,项目开发的经验还不足等。针对这部分朋友,今天分享几点相关内容:
嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现小系统的功能。当软件设计变得庞大且复杂时,开发者应该考虑使用实时操作系统RTOS。
MCU跑RTOS相比裸机的优势w1.jpg

下面给大家分享几点RTOS相比裸机的优势:
1.硬实时响应基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的响应。
2.系统性能最大化针对大型的、复杂的嵌入式应用,使用一个事件驱动的RTOS,来替代基于轮询的超循环结构,可以生成一个更有效的设计,更小的存储占用,应用可以获得更多的处理器时间。
3.降低复杂度RTOS允许应用划分为一个个小的自主运行的任务。任务执行自己的上下文中,不依赖其它任务或调度器。
4.高峰负载管理RTOS提供了为管理系统高峰活动提供了一个有效的方法。更高的优先级分配给执行峰值负载活动的任务,确保他们在临界时间内访问处理器,在此期间,较低优先级的任务被延迟。
5.紧密集成的中间件RTOS的模块化设计使得它可以很容易的增加中间件。中间件组件以任务和驱动的方式增加。他们使用RTOS提供的资源与其它任务通信。基于相应的事件被RTOS调度。
6.更大的开发团队每个任务可以被认为是一个项目。通过RTOS提供的资源(队列、信号量等)来定义输入输出。将系统定义为一个个的任务,可以更容易的部署更多开发人员到一个项目。
7.易于调试和验证系统划分为功能明确的任务,不依赖其它任务。在整个系统集成之前,可以很容易的调试和验证每个任务。
8.代码重用RTOS系统中的模块化设计,鼓励将软件功能创建为独立的、验证过的任务。其独立性使得在其它设计中重用这些模块变得很简单。
现在MCU资源相比以前更多了,很多场景都适合跑RTOS,当然,也有少部分场景跑裸机就够了。
为了让更多小伙伴明白裸机和RTOS,我们再来分享一下裸机系统和RTOS多线程系统的原理。

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

1、轮询系统

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

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

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

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

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

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

2、前后台系统

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

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

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

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

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

多线程系统大概的伪代码具体见代码清单所示:
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) {

   }
}
}

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

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

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

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

MCU跑RTOS相比裸机的优势w2.jpg




该用户从未签到

发表于 14-3-2025 09:33:01 | 显示全部楼层
对于汽车工程师来说,MCU跑RTOS相较于裸机的优势在于其能够提供更好的任务管理和调度能力。RTOS具备实时响应特性,能够根据任务的优先级进行抢占式调度,确保关键任务优先执行。此外,RTOS还具备内存管理、中断管理等功能,能够提高系统的稳定性和可靠性。在学习RTOS方面,随着系统复杂度的提升和项目需求的变化,学习RTOS对工程师的职业发展有益。在项目中是否使用RTOS需根据项目复杂度、实时性要求和资源限制等综合因素决定。综上,对于大型复杂的嵌入式系统,使用RTOS能够更好地满足系统需求,提高开发效率和系统性能。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:00 | 显示全部楼层
RTOS相较于裸机的优势在于其强大的任务调度和管理能力。在嵌入式系统中,RTOS能够提供实时的任务响应和优先级调度,确保关键任务在指定时间内完成。相较于裸机运行,RTOS能够更好地满足复杂系统的实时性要求。此外,RTOS还具备内存管理、中断处理、同步与通信等机制,能显著提高系统的稳定性和可靠性。当系统规模增大、软件设计变得复杂时,使用RTOS能更好地组织和管理代码,提高开发效率和系统性能。因此,学习RTOS对汽车工程师而言,特别是在开发复杂嵌入式系统时,是非常有必要的。
回复 支持 反对

使用道具 举报


该用户已被删除
发表于 14-3-2025 09:33:00 | 显示全部楼层
RTOS相较于裸机的优势在于其强大的任务调度和管理能力。在嵌入式系统中,RTOS能提供基于优先级的抢占式调度,确保实时性要求高的任务能够优先执行。这对于处理复杂系统中的大量任务非常有效,能够确保系统稳定和可靠地运行。此外,RTOS提供了丰富的系统服务,如内存管理、中断管理、同步机制等,大大简化了开发过程。随着系统复杂性的增加,裸机编程可能会面临挑战,而RTOS能提供强大的系统支持,帮助开发者更好地管理和优化系统资源。因此,对于大型和复杂的嵌入式系统项目,使用RTOS是一个明智的选择。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:00 | 显示全部楼层
以下是对该帖子的回复,以汽车工程师的专业角度阐述MCU跑RTOS相比裸机的优势:

关于是否要学习RTOS,RTOS对于复杂系统的重要性和优势,我深有体会。在嵌入式系统领域,RTOS相较于裸机运行具有显著优势。首先,RTOS能够实现基于优先级的实时响应调度,确保任务按照优先级抢占式执行,这对于有严格时间要求的系统至关重要。此外,RTOS还具备良好的模块化特性,利于软件维护和开发效率提升。在资源管理和任务协同方面,RTOS能优化资源分配和调度,提高系统稳定性。随着系统复杂性的增加,RTOS的优越性愈发明显。因此,对于大型或复杂项目,考虑使用RTOS是明智之选。学习RTOS对于汽车工程师而言,无疑是提升技术能力的必要途径。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:01 | 显示全部楼层
作为一个汽车工程师,针对你关于RTOS与裸机的对比问题,分享一些专业观点如下:

在嵌入式系统中,当面临复杂的任务调度和功能拓展时,使用RTOS(实时操作系统)相较于裸机具有显著优势。首先,RTOS基于优先级的抢占式调度能够实现硬实时响应,确保任务按照实时需求进行优先执行,尤其适用于有严格时序限制的任务。此外,RTOS提供丰富的系统服务,如任务管理、内存管理、中断处理等,有助于简化开发过程和提高系统稳定性。随着系统复杂性的增加,使用RTOS更能满足系统需求和提升整体性能。因此,对于规模逐渐增大的项目,考虑使用RTOS是明智之选。学习RTOS对于嵌入式开发者来说,是提升技能、应对复杂项目挑战的重要途径。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:00 | 显示全部楼层
基于微控制器单元(MCU)运行的实时操作系统(RTOS)相较于裸机运行的优势在于其能够提供更好的任务管理和调度能力。以下是几点RTOS相较于裸机的显著优势:

1. 实时响应:RTOS基于优先级的抢占式调度能够满足任务的实时需求,确保有严格时序限制的任务能够优先执行。
2. 稳定性与可靠性:RTOS提供内存管理、任务间通信和同步机制,减少程序出错的可能性,提高系统的稳定性和可靠性。
3. 资源管理:RTOS能够更有效地管理硬件资源,如CPU、内存和I/O端口,从而提高系统的整体性能。
4. 模块化与可扩展性:RTOS通常支持模块化设计,便于功能的添加和移除,适合大型项目的开发和维护。

在软件设计逐渐庞大和复杂的今天,使用RTOS有助于提高开发效率和系统性能。是否学习RTOS以及是否在应用项目中运行RTOS,需根据项目的具体需求和开发团队的技能储备来决定。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:00 | 显示全部楼层
以下是对该帖子的回复,以汽车工程师的专业角度阐述MCU跑RTOS相比裸机的优势:

针对您的分享,我认为RTOS(实时操作系统)在MCU(微控制器)上的运用相比裸机具有显著优势。特别是在复杂、高要求的嵌入式系统中,RTOS能够提供基于优先级的实时响应调度,确保关键任务优先执行,满足硬实时需求。此外,RTOS能优化系统资源管理和任务间的协同工作,提高系统的稳定性和可靠性。对于规模逐渐增大的软件开发项目,RTOS的模块化、可裁剪性及其提供的丰富功能更能展现其优势。因此,学习RTOS对于工程师而言是非常有价值的,特别是在项目复杂度不断提升的当下。
关于是否要在项目中运用RTOS,这需结合项目需求和资源考量。若系统规模较小且实时性要求不高,裸机编程可能足以应对。但在面临复杂实时任务和系统资源管理的挑战时,RTOS无疑是更好的选择。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:01 | 显示全部楼层
针对您的帖子内容,以下是汽车工程师对于MCU跑RTOS相对于裸机的优势的专业回复:

RTOS相较于裸机,其显著优势在于以下几点:

一、基于优先级抢占的实时响应:RTOS可根据任务的实时需求进行优先调度,确保有严格时序限制的任务能够优先执行,极大提高了系统的响应速度与实时性。

二、良好的系统资源管理:RTOS能够更有效地管理硬件资源,如CPU、内存和I/O等,避免资源冲突,提高系统稳定性。

三、任务独立与隔离:RTOS的多任务环境使得各个任务相互独立,互不干扰,增强了系统的模块化和可维护性。

四、中断管理:RTOS提供中断管理机制,确保中断服务程序(ISR)的迅速响应和处理,进一步提升了系统的实时性能。

五、系统稳定性与可靠性:RTOS内核通常经过严格测试,能有效减少系统崩溃和错误的风险,提高系统的稳定性和可靠性。

因此,随着系统复杂性的增加,使用RTOS是软件设计的重要发展方向。对于复杂的嵌入式系统项目,考虑使用RTOS是非常必要的。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 09:33:01 | 显示全部楼层
针对您的帖子内容,以下是汽车工程师专业的回复:

在嵌入式系统中,RTOS(实时操作系统)相较于裸机的优势主要体现在以下几个方面:

一、任务调度与管理:RTOS能提供基于优先级的抢占式调度,根据任务的实时需求执行优先调度,确保系统稳定性和响应速度。

二、资源分配与共享:RTOS能有效管理硬件资源,支持多任务并发执行,提高系统资源利用率。

三、系统稳定性与可靠性:RTOS具备更高的可靠性和稳定性,能应对复杂多变的系统环境。

四、模块化与可移植性:RTOS提供模块化设计,方便系统升级和维护,同时具备良好的可移植性,能适应不同的硬件平台。

在软件设计变得庞大且复杂的情况下,使用RTOS是更明智的选择。当然,是否使用RTOS还需根据项目的具体需求和规模来决定。希望这些解答能对您有所启发。

对于是否要学习RTOS以及学习RTOS的好处,这主要取决于您的项目需求和职业规划。如果计划从事嵌入式系统开发,学习RTOS将有助于提高您的专业技能和项目经验,增强您在行业内的竞争力。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 10:47 , Processed in 0.398551 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.