嵌入式操作系统UC/OSII的内核实现

发布者:angelbaby最新更新时间:2006-09-29 来源: 单片机与嵌入式系统ic网关键字:堆栈  嵌入式  函数 手机看文章 扫描二维码
随时随地手机看文章

引言

  以前在我们一般所使用的系统中,任务没有优先级之分。应用程序是一个无限的循环,任务函数按在代码中的顺序运行,处理相应的事务。时间相关性强的任务处理使用中断机制,但是当系统比较复杂、中断资源有限时,中断程序只能将处理该任务的信息条件准备好后返回。当程序按顺序没有执行到该任务时,该任务的执行必须等待,所以将会造成任务每次的执行时间间隔不定,不能及时处理紧急事务,影响系统的运行。这种情况在要求限定时间内周期性处理事务的系统中是不允许发生的,而且只由应用者编写的复杂程序很可能会出现Bug


  嵌入式操作系统是实时操作系统,运行于特定的硬件平台上,一般包括处理器、存储器及外设器件和I/O端口,包括操作系统软件,要求实时和多任务操作,用户可以在其基础上添加应用程序。使用嵌入式操作系统的用户只需添加所需的任务到操作系统中即可,既节省开发时间,又提高程序的可靠性。

2UC/OSII及其任务介绍

  UC/OSII(Micro Control Operation System Two)是一种源代码公开的嵌入式
操作系统,程序绝大部分是用C语言写的,带有少量的汇编程序,并且有详细的说明和示例,可移植性好、易调试,稳定性与可靠性高,功能也比较完善。UC/OSII和其他大部分的嵌入式操作系统的内核都是占先式内核,被分为最高优先级的任务一旦准备就绪,立刻就能得到CPU的控制权,可以剥夺低优先级任务的CPU使用权,处理系统最紧急的事务。

  UC/OSII的任务实际是一段程序,执行特定的功能,拥有自己的代码和堆栈空间(
保存该任务的寄存器、返回地址和临时参数),一般都是空函数,不会返回任何值。任务执行一次后,设置延时参数OSTCBDly,表明在经过OSTCBDly个时钟周期后再次运行,然后任务进行切换,使其他任务运行。

  例如:

void Task(void)
{ 参数定义
  for(;;) {
  任务执行代码
  OSTimeDly( ) 延时函数 ;清除任务就绪标志,设置延时的时钟周期参数,调用OSSched( )进行任务调度
} }

3UC/OSII的内核数据结构

  (1) 任务控制块OS_TCB


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

  每个任务的就绪状态标志都放入就绪表中(如图1所示),OSRdyTbl[ ]中的每一位为1表示相应优先级的任务处于就绪状态,OSRdyGrp中的每一位为1,表示每8个为一组的任务中至少1个已经就绪,值越小优先级越高。

4UC/OSII内核的运行机制

  任何计算机系统都有时钟,他是计算机世界的时间,通过定时器的定时中断,产生时间间隔,每个间隔是任务执行的时间周期,在一个间隔内所有应该执行的任务都应执行一次,不能因为时间间隔太小而有的任务没有时间执行。因此,任务的多少、时间周期的确定、CPU的选择需仔细考虑,确保在一个周期内CPU任务的运行时间所占比重不要太大。

  主程序首先对系统进行初始化,给各个参数赋值,根据任务的多少来建立任务控制块链表,并且首先建立一个最低优先级的空闲任务,当没有其他任务需要运行时,对一个变量进行累加计算来计算空闲时间。任务创建函数分配的一块内存,保存寄存器的值和该任务的代码地址,再把堆栈的地址存入任务控制块,从而把任务程序代码、任务堆栈和任务控制块联系在一起。操作系统内核可以通过任务控制块找到任务堆栈,从堆栈中取得任务代码地址。基本结构如图
2所示。

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

  嵌入式操作系统是多任务的,任务切换是其核心技术,由汇编语言编写。任务切换函数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专门写书对其讲解,也可以非常好地用于教学。

参考文献

1](美)Jean Labrosse J. UC/OSII源码公开的实时嵌入式操作系统[M].北京:中国电力出版社,2001
2](美)Jean Labrosse J.嵌入式系统构件[M].北京:机械工业出版社,2002
3](美)Maurice Bach JUNIX操作系统设计[M].北京:机械工业出版社,2000
4] 屠立德操作系统基础[M].北京:清华大学出版社,2000

关键字:堆栈  嵌入式  函数 引用地址:嵌入式操作系统UC/OSII的内核实现

上一篇:基于ARM-Linux和CDMA的远程视频监控系统
下一篇:Nios系统基础上的UItra DMA数据传输模式

推荐阅读最新更新时间:2024-05-02 20:26

SOC中多片嵌入式SRAM的DFT实现方法
 本文基于MBIST的一般测试方法来对多片SRAM的可测试设计进行优化,提出了一种通过一个MBIST控制逻辑来实现多片SRAM的MBIST测试的优化方法。   1 MBIST介绍   MBIST意即存储器内建自测试(Memory Build In Self Test),是目前业界用来测试存储器的一种常见方法,其原理是通过多次反复读写SRAM来确定其是否存在制造中的缺陷。MBIST的EDA工具可针对内嵌存储器自动创建BIST逻辑,它支持多种测试算法的自动实现(常用算法为March C+),并可完成BIST逻辑与存储器的连接。此外,MBIST结构中还可包括故障自动诊断功能,方便故障定位和特定测试向量的开发。MB-IST的基本结构如
[模拟电子]
SOC中多片<font color='red'>嵌入式</font>SRAM的DFT实现方法
意法半导体推出无感零速/高转矩电机控制嵌入式软件
2023年12月21日,中国– 意法半导体发布了STM32 ZeST*(零速满转矩)软件算法。该算法运行在STM32微控制器上,让无感电机驱动器能够在零转速时产生最大转矩 。意法半导目前正在与指定客户分享这个算法。该算法首次在通用电机驱动器中提供零速满转矩电机控制功能,实现了以前无法实现的电机运行平顺性和可预测性。 电动工具、电动窗帘、洗衣机、自动割草机、空调系统、电动自行车等产品设备要求电机按照正确方向最大转矩启动和/或最大负载快速启动,同时消耗最小的电能。普通无感电机驱动器不能确定电机在零速时的转子位置,因此,无法满足这些设备的要求。此前,要想保证定位准确、高能效和正确操作,通常需要增装硬件位置传感器或使用特殊类型的
[嵌入式]
意法半导体推出无感零速/高转矩电机控制<font color='red'>嵌入式</font>软件
实现Ethernet over SDH的嵌入式系统研究
摘要:简要介绍了Ethernet over SDH(EoS)系统的结构原理,阐述和分析了EoS的LAPS协议核心技术,给出了使用FPGA完成SDH网络和以太网的连接,从而实现EoS的嵌入式系统设计方案。 关键词:EoS;以太网;SDH;嵌入式系统 随着波分复用技术和高速以太网技术的发展,骨干网的带宽呈几何级数增长,已达到了吉比特甚至更高的水平。而连接骨干网和用户网的接入网的速率却没有太大的提高,已成为网络发展的瓶颈。要想实现高速、可靠的接入,使终端用户充分利用骨干网的巨大容量,必须采用新的高速接入技术。SDH技术已非常成熟,其安全性好,可靠性高;用SDH传输网络承载以太网IP包以实现网络用户的远程接入或异地局域网互连,是一种非
[应用]
高容量嵌入式存储将与手机插槽展开竞争
  StrategyAnalytics手机元器件技术服务发布带插槽手机普及率的长期预测更新报告称,带移动存储卡插槽的手机出货量在2008年达到将近6。85亿部,占整体出货量的60%;到2013年将增长到9。9亿部。与之同时,向更高容量microSDHC格式进行演进的趋势将继续;microSDHC格式的插槽手机占所有带插槽手机的比例从2007年的3。5%迅速增长到2008年的22%,StrategyAnalytics预测,2009年这一比例将达到54%。   StrategyAnalytics手机元器件技术服务总监,也即本报告作者StuartRobinson评论道:“StrategyAnalytics调整了对带插槽手机出货量的市场
[手机便携]
嵌入式USB主机设计(硬件设计和软件设计)
嵌入式USB主机硬件设计 选用廉价的51系列单片机(89C52)控制USB主机接口芯片SL811HS,同时,通过MAX232芯片与PC机通信。硬件接线示意图如下所示: 嵌入式USB主机软件设计 下面将从底层到高层详细地介绍本系统的软件设计。 4.2.1单片机读写SL811HS 4.2.1.1读取SL811HS内存的数据 根据SL811HS的读写时序要求,读取数据前首先发送地址: void SetHostAddress(char AddressP) { P_BUS=AddressP;/*数据总线发送地址,但此时地址还不会被SL811HS接收*/ P_CTRL=0x90;/*设置总线控制信号为SL811HS接收地址信号,具体含义如下
[单片机]
<font color='red'>嵌入式</font>USB主机设计(硬件设计和软件设计)
芯科MCU可延长无线嵌入式系统65%电池寿命
   2011年12月8日 -高性能模拟与混合信号IC领导厂商Silicon Laboratories (芯科实验室有限公司, NASDAQ: SLAB)今日宣布推出业界最节能单片机(MCU)和无线MCU解决方案,该方案特别适用于功耗敏感的嵌入式应用。新型C8051F96x MCU、Si102x和Si103x无线MCU系列产品基于低功耗专利技术,与同类其他产品相比,该项专利技术能使系统电流消耗降低40%,电池寿命可延长高达65%。Silicon Labs超低功耗MCU系列产品针对电池供电的嵌入式系统对于低功耗需求而设计,是智能仪表(水表、煤气表和供热表)、家用装置监测、无线安保、家居和楼宇自动化、便携式医疗和资产追踪等产品的理想选择
[工业控制]
嵌入式Linux之我行——深入理解DM9000在mini2440上的驱动
首先看一下DM9000的引脚和MINI2440的引脚连接 DM9000 MINI2440 功能描述 SD0 DATA0 数据信号 | | SD15 DATA15 数据信号 CMD ADDR2 识别为地址还是数据 INT EINT7 中断 IOR# nOE 读命令使能 IOW# nWE 写命令使能 AEN nGCS4 片选使能 可以看出连接了16条数据线,1条地址线,而这唯一的一条地址线用于判断数据线传输的是地址还是数据,所以这16条数据线为数据和地址复用 而片选信号使用的BANK4,则访问0x2000 0000 0x27FF FFFF这个范围的地址时会激活片选使能信
[单片机]
<font color='red'>嵌入式</font>Linux之我行——深入理解DM9000在mini2440上的驱动
基于Virtex系列FPGA的可编程嵌入式信号处理背板的开发设计
    摘要: 介绍了基于Virtex系列FPGA和TMS320C40DSP的可编程通用信号处理背板的设计和制作;并对Virtex系列FPGA的性能和特点进行了分析;同时还叙述了可编程通用信号处理背板的调试;最后给出了背板应用开发实例。     关键词: Virtex系列  现场可编程逻辑门阵列(FPGA)  TMS320C40数字信号处理器(DSP)     现场可编程逻辑门阵列(FPGA)和高性能数字信号处理器(DSP)是高速信号处理领域两大关键器件,FPGA和DSP的运算速度及并行处理效能成为制约高速信号处理应用的主要因素。FPGA以其设计灵活性及硬件高密度性在高速信号处理领域显示出愈来
[半导体设计/制造]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved