《基于μC_OS-Ⅱ的嵌入式系统研究与应用.pdf》由会员分享,可在线阅读,更多相关《基于μC_OS-Ⅱ的嵌入式系统研究与应用.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、现代计算机!总第二五三期!#$%&!()*+%,-!.研究与开发引 言近年来!嵌入式系统一直被广泛应用于各种设备中!随着硬件与应用领域的发展!在嵌入式系统的设计中!嵌入式操作系统成为要考虑的主要部分!对其选择也变得非常重要 目前!各种成熟的实时嵌入式操作系统#$%&$出现在我们面前!常见的如%(/)*+,-&./01*)-23&450(%&6789%&4/0:(&!2;%&=等!它们各具特色!分别应用于不同的领域!2;%&?移植性好&基于优先级的!实时性比非占先式的内核好!对于嵌入式系统开发是一种良好的操作系统可以说!2;%&=是一个具备现代操作系统特点的#$%&!同时它结构清晰!具有很好的可
2、扩展性和可移植性!得到很多领域的青睐 目前!2;%&=主要应用于照相机行业&医疗器械&音响设备&发动机控制&网络设备&高速公路电话系统&A$B机&调制解调器等各个领域!#$%&的特性与功能!2;%&=嵌入式操作系统是由$C70DEF47G+*-C开发的!从!2;%&0!2;%&=!经过十几年的发展!已经在世界范围内得到了广泛的应用!其功能不断完善!受到嵌入式系统领域开发者的青睐!2;%&?%源代码公开!2;%&=最大的特点就是源代码全部公开!这是其它商业实时内核无法比拟的!这样就方便把操作系统移植到各个不同的硬件平台上#具有很好的可移植性!2;%&=绝大部分源码都是用高可移植性的AH&=2编写
3、的!可移植性较强!并且与微处理器硬件相关的那部分是用汇编语言写的!便于!2;%&=移植到其它各种微处理器上!能够运行在I位&?J位&K位&甚至JL位和M&6上$可固化!2;%&=是为嵌入式应用而设计的!只要开发者有编译&连接&下载等固化手段!2;%&=就可以嵌入到开发者的产品中%可裁剪!根据需要!可以只使用!2;%&=中应用程序需要的那些系统服务!这样就减少了产品中!2;%&=所需的存储器空间&占先式和多任务也是!2;%&=的特色!2;%&=总是运行就绪条件下优先级最高的任务!但不支持轮转法任务调度!是一个完全占先式的实时内核!2;%&=可以管理JL个任务!目前版本保留I个给系统!应用程序最多
4、可以有NJ个任务!并且赋予每个任务的优先级是不同的其它还有如%可确定性&系统服务&中断管理&稳定性与可靠性等!这些特性都赋予!2;%&O=极大的吸引力!可以适用在安全条件极为苛刻的系统此外!2;%&=中的每个任务有自己单独的栈!2;%&=允许每个任务有不同的栈空间!以便降低应用程序对#AB的需求毕春跃(浙江万里学院计算机与信息学院!宁波K?N?PP$摘要#本文主要讨论嵌入式实时操作系统!#$%&的特性与功能!阐述基于!#$%&的嵌入式系统的系统结构!如何构建基于!#$%&的嵌入式开发平台!重点论述了!#$%&在()微处理器上的移植关键词#嵌入式系统#!#$%&操作系统#移植#嵌入式开发平台!万
5、方数据!#$%&!()*+%,-!.研究与开发现代计算机!总第二五三期!基于!#$%&的嵌入式系统的平台构建要进行嵌入式开发!就必须先构建一开发平台!#$%&(提供的仅仅是一个任务调度的内核!内核只是软件系统的基础!必须将!#$%&(移植到相应的微处理器!然后再对操作系统进行扩展!这样才能实现一个相对完整实用的嵌入式实时多任务操作系统!从而开发出相应的应用程序#!#$%&的移植只有把!#$%&(移植到相应的微处理器!保证内核正常运行起来!才能在此基础上进一步扩展!为此先进行!#$%&(的移植$目前有关!#$%&(在各个微处理器上的移植的实例很多!可以对这些现成的移植代码进行修改%根据自己所选用
6、的微处理器&$对于!#$%&(的移植!微处理器必须满足一些条件比如处理器的#编译器能产生可重入编码可以打开或关闭中断支持中断支持容纳一定量数据的硬件堆栈等)*$本文以&+,-./0公司的一款123!453(为例!进行!#$%&(的移植$移植主要集中在三个文件!%&6#789:!%&6#786191&3!%&6#786#9#!通过对这三个文件的数据参数的改写!达到移植的目的$!修改!#$%&(在%&6#789:中设置与123处理器相关的代码以及与编译器相关的数据类型$定义123中的数据类型;?/=./-?0/=A+B C%DE1FG;?/=./-?0/=A+B(F4H8G$IH位无符号整数J$;
7、?/=-?0/=A+B(F4H&G$JH位有符号整数J$;?/=./-?0/=?/KB(F4LM8G$JLM位无符号整数J$;?/=-?0/=?/K(F4H&G$JLM位有符号整数J$;?/=./-?0/=NO/0(F4P8G$JP位无符号整数J$Q?/=-?0/=NO/0(F4P&G$JP位有符号整数J$;?/=NO+K R7PG$J单精度浮点数J$;?/=O.SN=R7MTG$J双精度浮点数J$123中的堆栈数据类型为LM位!可以定义为KUV=./-?0/=?/K%&6&4WG代码临界区!定义了两个宏来开关中断$/?/=%&EF4E2#2(4(#1DX Y 1235?-+SN=(/KX Y
8、$关闭中断/?/=%&EZ(4#2(4(#1DX Y 123E/+SN=(/KX Y!$开启中断下面是堆栈增长方向!在!#$%&(中!用%&6&4W62%4:来设置堆栈增长方向!取值为L代表堆栈由高地址向低地址增长!取代表堆栈由低地址向高地址增长$/?/=%&6&4W62%4:L$堆栈由高地址向低地址增长修改!#$%$在%&6#786#9#中包含与移植有关的#函数!具体为 用#语言编写M个与操作系统相关的函数任务堆栈初始化和个钩子函数!其中只有任务堆栈初始化%&4+-_&K_(/?KX Y函数是必要的!其余必须声明!但可不包含任何代码$如O?%&4+-_#B=+K=:OO_ X%&64#C
9、 JVKSYO?%&4+_-5=N:OONX%&64#C JVKSYO?%&4+-_&a:OO_XO?YO?%&4+-_&K+K:OO_XO?Y为五个钩子函数$以下为任务堆栈初始化%&4+-_&K_(/?KX Y函数的初始化过程$bO?J%&4+-_&K_(/?KXO?XJK+-_YXO?JVYcO?JV+K+cO?JVKO-c(F4LM8 OVKYd8/-?0/=?/K J-K_G&K_eX 8/-?0/=?/K JYVKO-G%VKffG$J为新任务建立堆栈J$J-K_eX./-?0/=?/KY K+-_G$J V J$J-K_eX./-?0/=?/KY K+-_G$J NB J$J-K_
10、eLG$J BL J$99J-K_eLG$J BL J$J-K_eX./-?0/=?/KY V+K+G$J B J$J-K_eX&873%5EYG$J V-B J$J-K_eX&873%5EYG$J-V-B J$2=K.B/XXO?JY-K_YGg#修改!#$%)*+%&6#7891&3的移植!在%&6#7891&3中用汇编语言编写T个与处理器相关的函数%&K+BK:?0A2UX Y%Kh&aX Y%&(/?K#Kh&aX Y%&4?_(&2X Y$比如%&K+BK:?0A2UX Y函数!来运行优先级最高的就绪任务$D52 BTc+B6%&4#C#.BG得到当前任务的4#C地址D52
11、Bc+B6%&4#C:?0ABUG得到高优先级任务!万方数据现代计算机!总第二五三期!#$%&!()*+%,-!.研究与开发的#$%地址&()*+,)-./得到堆栈指针&(01+,)-./切换到新的堆栈2#()*+,)3./设置新的当前任务的#$%地址&45 016+7)89/42(2:2(+)8&45 016+7)89/从栈顶得到新的声明42($:2(+)8&45 016 7);?)+1A9/开始新的任务再进行其它几个相关函数的编写!这样B2C$:DEF24的移植完成!$GB2HH完成以上三个方面移植工作!就可以在F(4微处理器上正常运行 然后对系统任务进行划分#完成任务调度以及存储空间的配
12、置!#$%&的扩展由于!$GB2HH仅仅是一个实时多任务的内核!要想实现一个相对完整#实用的嵌入式实时多任务操作系统$(#B2%!除了进行移植外!还需要进行必要的扩展&主要包括建立文件系统!为外部设备建立驱动程序并规范相应的F:H函数!创建图形用户接口IJDHK函数!建立其它实用的应用程序接口$F:H%函数等 图=为基于!$LB2MHH的内核扩展示意框图图=基于!$GB2MHH的内核扩展示意框图下面以驱动程序#文件系统的建立为例说明!$GB2MHH的扩展!驱动程序的建立!&$显示驱动程序&$驱动程序的接口函数主要定义如下&NOPQ&$C$0$%79LL在文本模式下输出字符串NOPQ&$CHRP
13、S$NOPQ%7 9LL对&$进行初始化NOPQ&$C1)PRS$ATU)VWO)XUSYEEE%7 9GG以文本形式输出字符串NOPQ&$C$TURZ4OQ$D XOQ%7 9GG改变&$的工作模式NOPQ&$C(W)0T$%7 9GG对&$的显示进行刷新!串口驱动程序NOPQ DU)SCHRPSIPRS XAYPRS U_QK79该函数主要实现的功能是初始化串口#设置波特率!函数中的两个参数XA是系统的主时钟频率!U_Q是串口通信波特率NOPQ DU)SC2ASIPRS ATK7 9GG该函数是进行串口选择!其参数是传递串口号ATU)DU)SCJSATINOPQK7 9GG该函数是从串口读
14、取字符!存放在一个数组内NOPQ DU)SCJS2S)PRZIATU)V0S)PRZK7 9GG该函数是读取要发送的字符串!并且一个一个字符地从串口发送NOPQ DU)SC2RQ%aSIPRS QUSUK7 9GG该函数是通过串口发送数据!QUSU是需要发送的字符NOPQ DU)SC2RQ2S)PRZIATU)V1SK7 9GG该函数是通过串口发送字符串!其参数1S是字符串首地址的指针以上的各个函数的建立!拥护可以通过调用的方式来对串口方便地进行操作文件系统的建立现在!不少的嵌入式系统要使用文件系统!由于!$GB2MHH本身并不提供文件系统!所以必须进行文件 系 统 的 建 立 在 嵌 入 式
15、 系 统 中!有 比 较 大 的2(F4!则可以在内存的高端开辟一片区域作为(F4盘!组织成一个文件系统 这样可以更好地组织和利用内存#方便大块数据的存储!对于实现采集数据保存和传送#程序上载等功能也起着非常重要的作用下面是基于!$GB2MHH的文件系统的实现过程!如图所示图文件系统的实现示意图!万方数据!#$%&!()*+%,-!.研究与开发现代计算机!总第二五三期在文件系统的实现过程中!首先必须通过#$#/%&(#)*#函数初始化系统文件管理!为文件结构分配空间$&+*$&(#)*%&用来打开系统中指定的文件!并指定打开模式!创建(,-.结构!为文件读取分配缓冲区$/*01&(#)*%&直
16、接读取文件缓冲区中的数据!如果文件缓冲区中数据为空则访问(23!读取下一个簇的数据到文件缓冲区$45#%*&(#)*%&把缓冲区写入到指定的文件$6)78*&(#)*%&关闭打开的文件!释放文件缓冲区结 语!69&:,作为一种优秀的(流行的嵌入式操作系统!既具有嵌入式系统所要求的实时性!内存需求小的特性!又具有移植性好(占先式等优点!可以有效缩短开发周期!方便嵌入式系统应用程序的开发 进入新世纪!嵌入式系统的发展极为迅速!各种操作系统出现在我们面前!69&:,以其良好的优势和特性!在嵌入式开发领域的应用越来越广!尤其是在实时性要求高的嵌入式设备中随着嵌入式系统的广泛应用和迅速发展!69&:,会
17、在嵌入式领域有着极为广阔的发展前景参考文献;?-05788*嵌入式实时操作系统!69&:,第版&邵贝贝等译北京)北京航空航天出版社!AAB;=王田苗嵌入式系统设计与实例开发北京)清华大学出版社!AA;B=毛德操!胡希明嵌入式系统*采用公开源代码和%57$C2/D9E8F0)*处理器浙江)浙江大学出版社!AAB嵌入式与实时系统开发柳翔等译北京)机械工业出版社!AAM;M=陈渝!李明等源码开放的嵌入式系统软件分析与实践*基于NO.O*和2/D开发平台北京)北京航空航天大学出版社!AAGP!收稿日期!#$%$!#$%&()*+,-.&(/.0)01/234*56#/37(#*0)!89:5;H,
18、6QI$:OI*R67)*C*7S 67T+I%*5 F#*$F*0$1,$S75T0%#7$3*FQ$7)7COU VQ*W#0$C 40$)#X$#Y*58#%OU Z#$C7 BM 3Q#8+0+*5 1#8FI88*1 T0#$)O%Q*FQ050F%*5 0$1%Q*SI$F%#7$7S%Q*/*0):3#T*&!69&:,U*+)0#$*1%Q*05FQ#%*F%I5*7S.T*11*1 O8%*T 08*1 7$!69&:,0$1 Q7K%7 S75T 0$*T*11*11*Y*)7+T*$%+)0%S75T 08*1 7$!69&:,U#$011#%#7$U%Q*%50$8+)
19、0$%0%#7$7S!69&:,#$2/DT#F57+57F*8875#8 1#8FI88*1#$1*%0#)8?6 0%*#.T*11*1 O8%*T$!69&:,&+*50%#$C O8%*T$350$8+)0$%0%#7$.T*11*1 L*Y*)7+T*$%J)0%S75T!万方数据基于C/OS-的嵌入式系统研究与应用基于C/OS-的嵌入式系统研究与应用作者:毕春跃,BI Chun-yue作者单位:浙江万里学院计算机与信息学院,宁波,315100刊名:现代计算机(专业版)英文刊名:MODERN COMPUTER年,卷(期):2007(2)参考文献(5条)参考文献(5条)1.陈渝;李明;杨晔 源码开放的嵌入式系统软件分析与实践-基于SkyEye和ARM开发平台 20042.Bruce Powel Douglass;柳翔 嵌入式与实时系统开发 20053.毛德操;胡希明 嵌入式系统-采用公开源代码和StrongARM/Xscale处理器 20034.王田苗 嵌入式系统设计与实例开发 20025.Tean J Labrosse;邵贝贝 嵌入式实时操作系统C/OS-2003 本文链接:http:/