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

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

3天内不再提示

搞嵌入式的为什么一定要学RTOS?

大鱼机器人 来源:大鱼机器人 2023-10-08 17:00 次阅读

嵌入式系统不只是ARM+Linux,不是只有安卓,凡是电子产品都可称为嵌入式系统。物联网行业的兴起,也提升了FreeRTOS市场占有率。

01

为什么要学RTOS

在大学里一般电子信息专业的最后大部分都进入嵌入式这个领域,入门首先接触的是单片机编程,尤其是C51单片机,基础的单片机编程通常都是指裸机编程,即不加入任何 RTOS(Real Time Operating System 实时操作系统)。

常用的有国外的FreeRTOS、μC/OS、RTX 和国内的 RT-thread、Huawei LiteOSAliOS-Things 等,其中开源且免费的 FreeRTOS 的市场占有率极高在工作中用的最多的就是FreeRTOS,免费也没有版权谁不喜欢用呢?

02

裸机系统

1、轮询系统

轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。裸机系统通常分成轮询系统和前后台系统。

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

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

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

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

轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单中,如果只是实现LED翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。

但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。

假设DoSomethingg3是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响应 , 并做紧急处理 , 而这个时候程序刚好执行到DoSomethingg1, 要命的是DoSomethingg1需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到DoSomethingg3的时候就会丢失掉一次事件。

足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

2、前后台系统

在裸机系统中,所有的操作都是在一个无限的大循环里面实现,支持中断检测。外部中断紧急事件在中断里面标记或者响应,中断服务称为前台,main 函数里面的while(1)无限循环称为后台,按顺序处理业务功能,以及中断标记的可执行的事件。小型的电子产品用的都是裸机系统,而且也能够满足需求

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();
}

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

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

一般来说:如果的项目里面没有使用RTOS,则一般使用的都是这种前后台系统

03

多线程系统

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

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

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

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

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

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

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

while(1);/*程序不会执行到这里*/
}

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){

}
}
}

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

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

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

04

学习RTOS的意义是什么?

学习RTOS,一是项目需要,随着产品要实现的功能越来越多,单纯的裸机系统已经不能完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,就必须引入RTOS实现多任务管理。

二是技能需要,掌握操作系统,和基于RTOS的编程,实现更好的职业规划,对个人发展尤其是“钱途”是必不可少的。

大家可能一直觉得学操作系统就必须是linux,实际每个系统都有其应用场景,对于物联网行业,杀鸡焉用牛刀,小而美,且应用广泛的FreeRTOS 是首选。

有一个操作系统的基础,即使后续基于其他系统开发软件,也可触类旁通,对新技术快速入门。


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

    关注

    6032

    文章

    44525

    浏览量

    633325
  • 嵌入式
    +关注

    关注

    5073

    文章

    19038

    浏览量

    303580
  • RTOS
    +关注

    关注

    22

    文章

    809

    浏览量

    119462

原文标题:搞嵌入式的为什么一定要学RTOS?

文章出处:【微信号:All_best_xiaolong,微信公众号:大鱼机器人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式学习一定要arm板子吗??

    本帖最后由 eehome 于 2013-1-5 09:54 编辑 嵌入式学习一定要arm板子吗??{:soso_e100:}
    发表于 12-01 22:15

    嵌入式软件开发需要些什么知识?​

    基于软件工程来实施的. 六,了解系统移植. 最好要硬件,通常做嵌入式软件都是从底层驱动开发做起,驱动开发,一定要通晓硬件电路。另外要linux,大部分l
    发表于 09-30 09:32

    嵌入式软件开发需要些什么知识?

    ,驱动开发,一定要通晓硬件电路。另外要linux,大部分嵌入式软件开发都是基于linux的,还有的就是win CE。linux C linux shell 等都要会。另外,嵌入式
    发表于 10-14 09:19

    嵌入式视频教程 零基础手把手教你嵌入式

    的视频全部完,自学的情况下比较困难完成。不过如果你C语言已经在华清创客学院学习的话,不如直接学习嵌入式开发的职业课程,那时候包括了c语言的学习和免费送你个专业的开发板。这点性价比还是比较
    发表于 02-28 14:58

    单片机和嵌入式哪个值得

    单片机和嵌入式哪个值得,著名嵌入式工程师吴坚鸿曾经发过贴“单片机有前途还是嵌入式系统有前途
    发表于 07-20 07:44

    嵌入式新手该先C语言还是先汇编?

    嵌入式新手该先C语言还是先汇编?这是个非常有争议的问题。而目前C语言已渐渐深入了,有意向学习嵌入式的不少,但是疑问是,
    发表于 11-09 06:31

    嵌入式是不是一定要学习C语言

    问:做嵌入式是不是一定要学习 C 语言?答:一定要以 C 语言为基础,嵌入式个面很广的学科,分类也比较多,但是我认为,
    发表于 02-25 06:11

    基于RTOS嵌入式系统在Nexar中的实现

     构建基于RTOS51操作系统的嵌入式软件工程   在Nexar中创建基于RTOS嵌入式系统工程,需要创建
    发表于 07-01 10:25 899次阅读
    基于<b class='flag-5'>RTOS</b>的<b class='flag-5'>嵌入式</b>系统在Nexar中的实现

    嵌入式应该如何学习?嵌入式学习方法和嵌入式学习路线资料说明

    学习嵌入式一定要嵌入式学习路径和学习方法,不管是软件还是硬件都需要相互了解,在电子产品领域,嵌入
    发表于 05-21 18:02 12次下载
    <b class='flag-5'>嵌入式</b>应该如何学习?<b class='flag-5'>嵌入式</b>学习方法和<b class='flag-5'>嵌入式</b>学习路线资料说明

    嵌入式,为啥要有uboot?

    嵌入式的,为啥要有uboot?
    的头像 发表于 02-05 12:00 2930次阅读

    嵌入式开发一定要设计模式吗?

    些朋友会问,设计模式需要吗?好像做嵌入式的从没遇到过需要用设计模式的,所以直没系统学习,但是我也知道这个很重要,久而久之,到头来还是没学。   这里我说
    的头像 发表于 04-02 10:50 1227次阅读

    喜欢嵌入式RTOS的8个理由

    时响应 基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的响应。 2.系统性能最大化 针对大型的、复杂的嵌入式应用,使用个事件驱动的
    的头像 发表于 07-27 10:13 1598次阅读

    嵌入式linux和物联网,嵌入式Linux或RTOS:用于物联网

    嵌入式Linux或RTOS:用于物联网2021-05-10嵌入式Linux或RTOS:用于物联网嵌入式Linux将Linux内核用于
    发表于 11-01 16:33 15次下载
    <b class='flag-5'>嵌入式</b>linux和物联网,<b class='flag-5'>嵌入式</b>Linux或<b class='flag-5'>RTOS</b>:用于物联网

    嵌入式为什么一定要RTOS

    嵌入式系统不只是ARM+Linux,不是只有安卓,凡是电子产品都可称为嵌入式系统。物联网行业的兴起,也提升了FreeRTOS市场占有率。
    的头像 发表于 12-01 11:13 614次阅读

    从事嵌入式方向,一定要软硬件通吃?

    嵌入式系统开发领域,软件和硬件的界限常常模糊不清。个常见的问题是,嵌入式软件工程师是否需要了解硬件。本文将探讨这问题的重要性,并分析嵌入式
    的头像 发表于 06-05 08:10 1094次阅读
    从事<b class='flag-5'>嵌入式</b>方向,<b class='flag-5'>一定要</b>软硬件通吃?