当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式操作系统UC/OSII的内核结构及介绍

1 引言   
以前在我们一般所使用的系统中,任务没有优先级之分。应用程序是一个无限的循环,任务函数按在代码中的顺序运行,处理相应的事务。时间相关性强的任务处理使用中断机制,但是当系统比较复杂、中断资源有限时,中断程序只能将处理该任务的信息条件准备好后返回。当程序按顺序没有执行到该任务时,该任务的执行必须等待,所以将会造成任务每次的执行时间间隔不定,不能及时处理紧急事务,影响系统的运行。这种情况在要求限定时间内周期性处理事务的系统中是不允许发生的,而且只由应用者编写的复杂程序很可能会出现Bug。
  
嵌入式操作系统是实时操作系统,运行于特定的硬件平台上,一般包括处理器、存储器及外设器件和I/O端口,包括操作系统软件,要求实时和多任务操作,用户可以在其基础上添加应用程序。使用嵌入式操作系统的用户只需添加所需的任务到操作系统中即可,既节省开发时间,又提高程序的可靠性。
  
2 UC/OSII及其任务介绍
  
UC/OSII(Micro Control Operation System Two)是一种源代码公开的嵌入式操作系统,程序绝大部分是用C语言写的,带有少量的汇编程序,并且有详细的说明和示例,可移植性好、易调试,稳定性与可靠性高,功能也比较完善。UC/OSII和其他大部分的嵌入式操作系统的内核都是占先式内核,被分为最高优先级的任务一旦准备就绪,立刻就能得到CPU的控制权,可以剥夺低优先级任务的CPU使用权,处理系统最紧急的事务。
  
UC/OSII的任务实际是一段程序,执行特定的功能,拥有自己的代码和堆栈空间(保存该任务的寄存器、返回地址和临时参数),一般都是空函数,不会返回任何值。任务执行一次后,设置延时参数OSTCBDly,表明在经过OSTCBDly个时钟周期后再次运行,然后任务进行切换,使其他任务运行。
  例如:
  void Task(void)
  { 参数定义
  for(;;) {
  任务执行代码
  OSTimeDly( ) 延时函数 ;清除任务就绪标志,设置延时的时钟周期参数,调用OSSched( )进行任务调度
  } }
  
3 UC/OSII的内核数据结构
  
(1) 任务控制块OS?_TCB

 

  
(2) 任务就绪表OSRdyTbl[]和OSRdyGrp

 

  
每个任务的就绪状态标志都放入就绪表中(如图1所示),OSRdyTbl[ ]中的每一位为1表示相应优先级的任务处于就绪状态,OSRdyGrp中的每一位为1,表示每8个为一组的任务中至少有1个已经就绪,值越小优先级越高。
  
4 UC/OSII内核的运行机制
  
任何计算机系统都有时钟,他是计算机世界的时间,通过定时器的定时中断,产生时间间隔,每个间隔是任务执行的时间周期,在一个间隔内所有应该执行的任务都应执行一次,不能因为时间间隔太小而有的任务没有时间执行。因此,任务的多少、时间周期的确定、CPU的选择需仔细考虑,确保在一个周期内CPU任务的运行时间所占比重不要太大。
  
主程序首先对系统进行初始化,给各个参数赋值,根据任务的多少来建立任务控制块链表,并且首先建立一个最低优先级的空闲任务,当没有其他任务需要运行时,对一个变量进行累加计算来计算空闲时间。任务创建函数分配的一块内存,保存寄存器的值和该任务的代码地址,再把堆栈的地址存入任务控制块,从而把任务程序代码、任务堆栈和任务控制块联系在一起。操作系统内核可以通过任务控制块找到任务堆栈,从堆栈中取得任务代码地址。基本结构如图2所示。?


 

  
任务的切换发生在2个时候,第1个是当某一任务运行完毕时就调用延时函数,使自身延时一个或几个时钟周期,进行任务切换,运行就绪的最高优先级最高任务;第2个是每一次时钟周期中断后,中断程序处理事务时,可能使一些任务运行准备就绪,然后重新整理和搜索任务就绪表,进行任务切换(如图3所示),选出其中的高优先级任务运行。?


 

[!--empirenews.page--]

  
嵌入式操作系统是多任务的,任务切换是其核心技术,由汇编语言编写。任务切换函数OS_TASK_SW( )被设置成中断函数,调用时使用的是软件中断指令,这样在进入中断程序之前,当前任务的代码地址和状态字就自动保存在当前任务的堆栈顶部。下面用8086的程序举例切换函数:
  
(1) _OS_TASK_SW(或_OSIntCtxSw)PROC FAR中断程序。
  
(2) PUSH指令该指令针对_OS_TASK_SW,保存当前任务寄存器到该任务的堆栈,代码地址已经保存。
  
(3) ADD SP,n该指令针对?_OSIntCtxSw,因为该函数由中断程序调用,运行他之前曾调用一些函数,堆栈发生变化,所以需要调整,去掉前几个函数的保存地址和参数,而代码地址在发生中断时就已经保存。

(4) 保存该任务的当前堆栈地址到该任务控制块OS_TCB,即保存SS和SP。
  
(5) 调入已就绪最高优先级任务控制块,取出其原来保存的任务堆栈地址,即赋值给SS和SP。
  
(6) POP指令恢复新任务的寄存器。
  
(7) IRET中断指令返回时,CPU从堆栈顶部即SS:SP指向的位置取出以前所保存的代码地址和状态字,并从此地址恢复原来任务的运行。
  
5 程序举例
  
一个最简单的嵌入式操作系统8086程序例子:在主程序运行完毕后,各任务开始轮流执行。


 

  
6 结语
  
UC/OSII还有时间管理、内存分配的功能,并且使用了信号量、邮箱和信息队列,使各任务之间可以互相通讯,协调对各种事务的管理,适用于小型的高端CPU。已经有许多公司以其为核心,进行功能扩展,从而开发自己的嵌入式操作系统,并且由于其代码简练,JEAN J.LABROSSE专门写书对其讲解,也可以非常好地用于教学。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

旧金山, Oct. 20, 2022 (GLOBE NEWSWIRE) -- 总部坐落在旧金山的科技公司Swift Navigation力图重新定义面向汽车高级辅助驾驶系统(ADAS)和自动驾驶、工业机器控制、商用交通,...

关键字: NAVIGATION SWIFT 控制 API

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都银行集团成立60周年的纪念日。趁着首都银行集团成立60周年与首都银行(中国)在华深耕经营12年的“大日子”,围绕作为外资金融机构对在华战略的构想和业...

关键字: 数字化 BSP 供应链 控制

根据害虫控制公司Orkin最新发布的“美国鼠患最严重的城市”年度调查,芝加哥连续第八年排在第一。报告统计时间从2021年9月1日至2022年8月31日,包括住宅楼和商业地产。纽约上升至第二,洛杉矶第三。每年秋季,老鼠和其...

关键字: 控制

U-Boot,全称Universal Boot Loader,是遵循GPL条款的从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的 开放源码项目。U-boot,是一个主要用于嵌入式系统的引导加载程序,可以支...

关键字: U-Boot GPL 嵌入式操作系统

针对财会专业人士的调查显示,大多数组织的财会专业人员都已经迈出了转型步伐,但尚未做好准备满足组织对于未来财会职能的要求,即具备更高的洞察力和预见力 北京2022年10月13日 /美通社/ -- IMA管理会计师协会与德...

关键字: 控制 数字化 MIDDOT BSP

北京2022年10月11日 /美通社/ -- 在四川大凉山深处,有一只"凉山黑鹰"少年篮球队:队员平均年龄12岁,平均身高1米3,球队刚成立时,连个像样的球场都没有。然而,凭着一腔热情和惊人天赋,这只...

关键字: 网络 BSP 内核 腾讯

上海2022年10月11日 /美通社/ -- 10月10日,和睦家医疗宣布与泰利福达成战略合作,签约仪式于上海和睦家医院圆满举办,并在线上与多位泌尿外科领域翘楚同步连线召开"微创经尿道前列腺悬扩术(PUL)&q...

关键字: 创始人 CE 微型 控制

上海2022年10月11日 /美通社/ -- 10月10日,明月镜片正式官宣刘昊然成为品牌代言人。一个是中国镜片领导品牌,通过科技创新引领了镜片行业的发展;一个是新生代实力演员,凭借高票房作品赢得了观众的认可。此次双方携...

关键字: PMC 控制 节点 蓝光

国内人才济济,从来不缺学霸,不仅有32门课几乎都满分的学霸,还有发表了27篇SCI论文的学霸,这个80后甚至击败了NASA团队获得了国际大赛冠军。据央视介绍,这个学霸是姜宇,现年38岁,是清华大学航天学院建院80多年来首...

关键字: NASA 航天器 控制 轨道

北京2022年10月11日 /美通社/ -- 近日,软通动力联合亚马逊云科技共同发布了《制造业数据治理白皮书(2022版)》(以下简称"白皮书")。全书基于双方赋能一线制造业企业数字化转型过程的实操践...

关键字: 亚马逊 数字化 供应链 控制

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭