您的位置 首页 模拟

规划一个简略的嵌入式体系

设计一个简单的嵌入式系统-这个是在网上看到的一篇文档,作者的目的是设计一个简单的嵌入式操作系统,只实现一个基本任务调度器的功能。正如作者所说,虽然不能称为操作系统,但已体现了小型嵌入式操作系统的精髓。对于我们来说是很好的学习资料,可以从中一窥操作系统的面目,今天分享给大家。

  规划一个简略的嵌入式体系

  这个是在网上看到的一篇文档,作者的意图是规划一个简略的嵌入式操作体系,只完结一个基本使命调度器的功用。正如作者所说,尽管不能称为操作体系,但已表现了小型嵌入式操作体系的精华。关于咱们来说是很好的学习材料,可以从中一窥操作体系的面貌,今日同享给咱们。

  1、多使命机制

  其实在单一CPU 的状况下,是不存在真实的多使命机制的,存在的只需不同的使命轮番运用CPU,所以本质上仍是单使命的。但由于CPU履行速度非常快,加上使命切换非常频频而且切换的很快,所以咱们感觉如同有许多使命一起在运转相同。这便是所谓的多使命机制。

  实时体系的特征是延时可猜测,可以在一个规则的时间内(一般是 ms 等级的)对某些信号做出反响。

  2、使命的状况

  使命有下面的特性:使命并不是随时都可以运转的,而一个现已运转的使命并不能确保一向占有 CPU 直到运转完。一般有组织妥当态,运转态,挂起态等。

  运转态:一个运转态的使命是一个正在运用 CPU 的使命。任何时间有且只需一个运转着的使命。

  组织妥当态:一个组织妥当态使命是可运转的,等候占有 CPU 的使命开释 CPU。

  挂起态:某些条件不满足而挂起不能运转的状况。

  3、怎么转化为组织妥当态

  INT32U OSRdyTbl; /* 组织妥当使命表 */

  上面界说一个 32 位变量,每一位代表一个使命,0 表明挂起状况,1 表明组织妥当状况。它记载了各使命的组织妥当与否状况,称它为组织妥当表。OSRdyTbl 界说为 32 位变量,对应32 个使命。当然,界说为 64 位的话,便最多能支撑 64 个使命。这样,可以界说两个宏,完结把使命的状况变为组织妥当或挂起态。

  /* 在组织妥当表中挂号组织妥当使命 */

  #define OSSetPrioRdy(prio) { OSRdyTbl |= 0x01《《prio;} //把相应方位1

  /* 从组织妥当表中删去使命 */

  #define OSDelPrioRdy(prio) { OSRdyTbl &= ~(0x01《《prio); }//把相应位清零

  使命之间彼此独立,不存在彼此调用的联系。一切使命在逻辑上都是相等的。由于使命之间彼此看不见,所以他们之间的信息传输就无法当面完结。这就需求各种通讯机制如信号量,音讯邮箱,行列等来完结。

  4、什么是抢占式调度?

  调度的概念,浅显的说便是体系在多个使命中挑选适宜的使命履行。体系怎么知道何时该履行哪个使命?可以为每个使命组织一个仅有的优先等级,当一起有多个使命组织妥当时,优先运转优先级较高的使命。一起,使命的优先级也作为使命的仅有标识号。代码中都是对标识号来完结对使命的操作的。

  所谓“抢占式调度”是指:一旦组织妥当状况中呈现优先权更高的使命,便当即掠夺当时使命的运转权,把CPU分配给更高优先级的使命。这样CPU 总是履行处于组织妥当条件下优先级最高的使命。

  5、多使命体系的时间管理

  与人相同,多使命体系也需求一个“心跳”来保持其正常运转,这个心跳叫做时钟节拍,一般由定时器产生一个固定周期的中止来充任。

  OSTimeDly 函数便是以时钟节拍为基准来延时的(在时钟的中止服务函数中,顺次对各个延时使命的延时节拍数减1。若发现某个使命的延时节拍数变为0,则把它从挂起态置为组织妥当态。)。这个函数完结功用很简略,便是先挂起当起当时使命,设定其延时节拍数,然后进行使命切换,在指定的时钟节拍数到来之后,将当时使命康复为组织妥当状况。使命有必要经过OSTImeDly或 OSTaskSuspend 让出CPU的运用权(延时或等候事情),使更低优先级使命有时机运转。

  6、怎么完结多使命?

  只需一个CPU,怎么在同一时间完结多个独立程序的运转?要完结多使命,条件是每个使命彼此独立。人怎么才干独立,有自己的私有财产。使命也相同,假如一个使命有自己的CPU,仓库,程序代码,数据存储区,那这个使命便是一个独立的使命。(CPU是经过多使命机制取得的,其他的需求你分配)

  TIPS:

  假如一个使命正在运转某个公共函数时(如Printf), 被另一个高优先级的使命抢占,那么当这个高优先级的使命也调用同一个公共函数时,极有或许损坏原使命的数据。由于两个使命或许共用一套数据。为了避免这种状况产生,常选用两种办法:可重入规划和互斥调用。

  可重入函数中一切的变量均为局部变量,局部变量在调用时暂时分配空间,所以不同的使命在不同的时间调用该函数时,它们的同一个局部变量所分配的存储空间并不相同(使命私有栈中),互不搅扰。别的,假如可重入函数调用了其他函数,则这些被调用的函数也有必要是可重入函数。

  完结互斥(独占)拜访的办法有关中止,关调度,互斥信号量,计数信号量等。

  6.1 一个使命怎么具有自己的程序代码

  关于怎么完结多使命,首先是程序代码,每个使命的程序代码与函数相同,与51 的裸奔程序相同,每个使命都是一个大循环。然后是数据存储区,由于全局变量是体系共用的,各个使命同享,不是使命私有,所以这儿的数据存储区是指使命的私有变量,怎么变成私有?局部变量也。编译器是把局部变量保存在栈里的,所以好办,只需使命有个私有的栈就行。

  TIPS:

  临界资源是一次仅答应一个使命运用的同享资源。每个使命中拜访临界资源的那段程序称为临界区。

  在多使命体系中,为确保数据的可靠性和完整性,同享资源要互斥(独占)拜访,所以全局变量(只读的在外)不能一起有多个使命拜访,即一个使命拜访的时分不能被其他使命打断。同享资源是一种临界资源。

  6.2 一个使命怎么具有自己的仓库、数据存储区

  私有栈的作用是寄存局部变量,函数的参数,它是一个线性的空间,所以可以恳求一个静态数组,把栈顶指针SP指向栈的数组的首元素(递加栈)或最终一个元素(递减栈)。即可打造一个人工的栈出来。每个使命还要有记载自己栈顶指针的变量,保存在使命操控块(TCB)中。

  什么是使命操控块?

  体系中的每个使命具有一个使命操控块,使命操控块记载使命履行的环境,这儿的使命操控块比较简略,只包含了使命的仓库指针和使命延时节拍数。使命操控块是使命的身份证。它把使命的程序与数据联系起来,找到它就可以得到使命的一切资源。

  规划一个简略的嵌入式体系

  6.3 一个使命怎么具有自己的CPU

  最终来看看使命是怎么“具有”自己的CPU 的。只需一个 CPU,各个使命同享,轮番运用。怎么才干完结?咱们先来看看中止的进程,当中止来暂时,CPU 把当时程序的运转地址,寄存器等现场数据保存起来(一般保存在栈里),然后跳到中止服务程序履行。待履行完毕,再把从前保存的数据装回CPU 又回到本来的程序履行。这样就完结了两个不同程序的穿插运转。

  学习这种思维不就能完结多使命了吗!仿照中止的进程就可以完结使命切换运转。使命切换时,把当时使命的现场数据保存在自己的使命栈里边,再把待运转的使命的数据从自己的使命栈装载到CPU中,改动 CPU 的 PC,SP,寄存器等。可以说,使命的切换是使命运转环境的切换。而使命的运转环境保存在使命栈中,也便是说,使命切换的关键是把使命的私有仓库指针赋予处理器的仓库指针SP。

  规划一个简略的嵌入式体系

  创立一个使命。它接纳三个参数,分别是使命的进口地址,使命仓库的首地址和使命的优先级。调用本函数后,体系会依据用户给出的参数初始化使命栈,并把栈顶指针保存到使命操控块中,在使命组织妥当表符号该使命为组织妥当状况。最终回来,这样一个使命就创立成功了。

  当一个使命即将运转时,便经过取得它的仓库指针(保存在使命操控块中)将这些寄存器出栈装入CPU 相应的方位即可。

  6.4 怎么完结抢占式调度?

  根据使命优先级的抢占式调度,也便是最高优先级的使命一旦处于组织妥当状况,则当即抢占正在运转的低优先级使命的处理器资源。为了确保CPU 总是履行处于组织妥当条件下优先级最高的使命,每逢使命状况改动后,即判别当时运转的使命是否是组织妥当使命中优先级最高的,不然进行使命切换。

  使命状况会在什么时分产生改动呢?有下面两种状况:

  1、高优先级的使命由于需求某种资源或延时,自动恳求挂起,让出处理器,此刻将调度组织妥当状况的低优先级使命取得履行,这种调度称为使命级的切换。如使命履行OSTImeDly或OSTaskSuspend把自身挂起就归于这种。

  2、高优先级的使命由于时钟节拍到来,或在中止处理完毕后,内核发现更高优先级使命取得了履行条件(如延时的时钟届时)则在中止后直接切换到更高优先级使命履行。这种调度也称为中止级的切换。

  6.5 挂起/康复使命

  1挂起使命

  经过 OSTaskSuspend可以自动挂起一个使命。OSTaskSuspend会把使命从使命组织妥当表中移出,最终重新启动体系调度。这个函数可以挂起使命自身也可以挂起其他使命。

  2康复使命(OSTaskResume)

  可以让被 OSTaskSuspend 或 OSTimeDly 挂起的使命康复组织妥当态,然后进行使命调度。

  嵌入式体系产品有哪些特色

  有人说嵌入式体系便是微电脑,小的计算机。也有人称嵌入式体系为后PC年代和后网络年代的新秀。那么嵌入式体系与传统的通用计算机,数字产品比较,运用嵌入式技能的产品有其自己的特色,下面小编详细为咱们介绍嵌入式体系开发技能以及其运用产品的特色。

  1.由于嵌入式体系选用的是微处理器,完结相对单一的功用,选用独立的操作体系,所以往往不需求很多的外围器材。因而在体积上,功耗上有其自身的优势。比较之下,一个运用WindowsCE的PDA,仅靠机内电源就可以运用几天,而任何一台笔记本只是可以支撑3小时左右。

  2.嵌入式体系开发技能是将计算机技能、半导体技能和电子技能与各个职业的详细运用相结合后的产品,是一门归纳技能学科。由于空间和各种资源相对缺乏,嵌入式体系的硬件和软件都有必要高效率地规划,因地制宜、去除冗余,力求在相同的硅片面积上完结更高的功用,这样才干在详细运用中对处理器的挑选更具有竞争力。

  3.嵌入式体系是一个软硬件高度结合的产品。为了进步履行速度和体系可靠性,嵌入式体系中的软件一般都固化在存储器芯片或单片机自身中,而不是存贮于磁盘等载体中。片上体系,板上体系的完结,使得以pda等为代表的这类产品具有愈加了解的操作界面和操作方法,比着传统的商务通等功用愈加完善,有用。

  4.为习惯嵌入式散布处理结构和运用上网需求,面向21世纪的嵌入式体系开发要求装备规范的一种或多种网络通讯接口。针对外部联网要求,嵌入设备必需配有通讯接口,相应需求TCP/IP协议簇软件支撑;由于家用电器彼此相关(如防盗报警、灯火动力操控、影视设备和信息终端交流信息)及试验现场仪器的和谐作业等要求,新一代嵌入式设备还需具有IEEE1394、USBCAN、Bluetooth或IrDA通讯接口,一起也需求供给相应的通讯组网协议软件和物理层驱动软件。为了支撑运用软件的特定编程形式,如Web或无线Web编程形式,还需求相应的浏览器,如HTML、WML等。

  5.由于嵌入式体系往往和详细运用有机地结合在一起,它的升级换代也是和详细产品同步进行,因而嵌入式体系产品一旦进入市场,具有较长的生命周期。

  嵌入式体系开发以其集成化,功用化广泛运用于电子产品中。小编以为其主要的特色是功用化清晰,用处相对具有针对性。嵌入体系技能的开发也相对大众化,不像计算机体系需求巨大的团队共同开发。嵌入体系可完结单人开发,当然协同开发更佳,其开发的门槛也相对较低。就由于这些特色,嵌入式体系发展迅速,是当下抢手的职业挑选。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/93493.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部