Redian新闻
>
搞嵌入式的为什么一定要学RTOS?

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

公众号新闻

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

01 



为什么要学RTOS?


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

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


02 



裸机系统

1、轮询系统

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

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

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

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

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

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

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

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

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

2、前后台系统

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

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

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

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

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


03 



多线程系统


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

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

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

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;

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

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

 /* OS 启动,开始多线程调度,不再返回 */
 RTOSStart();
 
 while(1);/* 程序不会执行到这里 */
}

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

   }
 }
}

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

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

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


04 



学习RTOS的意义是什么?


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

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

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

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

-END-

往期推荐:点击图片即可跳转阅读


双非本科拿到了4个offer,该怎么选?希望大家给点意见。


AD、PADS、Cadence各有什么优势?


为什么别选计算机专业?


看完稚晖君的工作台,我慕了~


北大硕士7年嵌入式学习经验分享

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
糕妈:给两个娃当妈,一定要学会“当面一套背后一套”时间匆匆,岁月如梭袭人为什么反对赶走李嬷嬷?秦钟为什么一定要到贾府读书?为什么一定要带孩子去一次敦煌?医生:急性喉炎的三大表现,一定要学会辨别周瑞家的为什么要改送宫花的顺序?林黛玉为什么那么小气?「专题速递」嵌入式物联网、RTC技术、实时通讯终端、混合现实影像5132 血壮山河之武汉会战 信罗战役 5经常郁闷生气的人一定要学一个“按穴位”,别气坏了身体再后悔!比食不果腹更惨的是腹不裹食为什么一生中一定要去次以色列:我们应该向犹太人学什么?凉了!嵌入式真的要卷成下一个Java了吗?北大硕士7年嵌入式学习经验分享加国一觉醒来一些车辆又被盗 一定要学会使用这袋子贾瑞为什么敢调戏王熙凤?为什么王熙凤一定要杀贾瑞?即将开幕!elexcon电子+嵌入式+半导体大展『观展攻略』来了,8.23-25与您相约鹏城!继承公司资产, 交税后却只剩这么一点, 这场免费线下讲座一定要听!妈妈的情绪,决定孩子一生的性格!不想太累,这件事一定要学做广告的为什么永远不下班?一定要听!一定要看!一定要警惕!第九章第一节 分权制衡地方自治的共和政体红色日记 6.1-10邀请函 | 研华嵌入式边缘运算产业伙伴峰会开启报名 引爆新兴产业应用商机为什么一定要成为一个管理者PPT被女同事夸赏心悦目!这4种页面美化技巧你一定要学!经常郁闷生气的人一定要学一个“保命诀窍”,别气坏了身体再后悔行业观察 | 优化嵌入式短视频平台管理 提升未成年人保护标准茶聚,压轴的为什么总是武夷岩茶?跟天蝎座相处一定要学会示弱为什么一定要解放台湾?嵌入式开发工程师,写得了代码,焊得了板大话三国350:诸葛亮为什么一定要斩马谡?第一次北伐失败,诸葛亮是如何反思的?Linux 有多重要?为什么打算从事 IT 相关工作就一定要学?微软自研芯片对标H100;星舰再度试飞;小米开源IoT嵌入式软件平台|AIoT情报想获得别人的尊重,就一定要学会撕逼!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。