基于S3C44B0X嵌入式操作系统#181;c-0S-Ⅱ平台的研究.docx

基于S3C44B0X嵌入式操作系统#181;c-0S-Ⅱ平台的研究.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

基于S3C44B0X嵌入式操作系统μc/0S-Ⅱ平台的研究

?

?

摘要:当前,传统的前后台系统已成为阻碍嵌入式系统发展的一大瓶颈,嵌入式操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保系统的实时性和稳定性。本文以此为背景,阐述了嵌入式操作系统μc/OS-Ⅱ移植到基于ARM7的S3C44B0X芯片移植过程。最终使嵌入式系统开发平台得以实现。

论文关键词:嵌入式,S3C44B0X,实时内核μc/OS-Ⅱ,移植

是非常必要的。而操作系统是一个通用的程序,要在自己的嵌入式系统中应用它,必须结合所用处理器的不同进行相应边编写或改写。本文结合实例,对基于S3C44B0X的嵌入式操作系统μc/0S-Ⅱ平台的实现的移植过程进行研究,最后通过测试,验证了嵌入式开发平台的成功实现。

1、实时内核μc/OS-Ⅱ

μc/OS-Ⅱ,是一个可固化、可裁剪、占先式的实时多任务操作系统,它运行就绪状态下优先级最高的任务,绝大部分源代码是用便于移植的C语言编写,小部分汇编语言代码已被压缩到最低限度,使之可供不同构架的微处理器上使用[3]。μc/OS-Ⅱ所具有源代码公开、执行效率高、占用空间小等特点受到广大用户的青睐。

2μC/OS-II在S3C44B0X上的移植

移植就是指使一个实时内核能在其它微处理器或微控制器上运行。本文采用S3C44B0X芯片,开发环境采用KeiluVision3,基本满足开发要求。S3C44BOX是一款基于ARM7的SOC芯片。该芯片片上功能强大,技术成熟,具有低成本、低功耗、高性能等优点[1]。

移植工作主要集中在与处理器相关的3个文件中[2]:OS_CPU.H、OS_CPU_C.C、OS_CPU_A.S。其中:OS_CPU.H文件主要包含与编译器相关的数据类型定义、堆栈类型定义、两个宏定义和几个函数说明;OS_CPU_C.C包含与移植有关6个C函数,为OSTaskStkInit(),OSTaskCreateHook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskStatHook(),OSTimeTick_

Hook(),其中后面5个函数为钩子函数,可以没有实际内容,但必须要声明,用于扩充自己需要的功能。OS_CPU_A.S中包含与移植有关的4个汇编语言函数,为OSStartHigh()、OSCtxSW()

、OSIntCtxSw(),OSTickISR()。

2.1OS_CPU.H文件移植

此文件中主要包含与编译器相关数据类型定义、堆栈类型定义、两个宏定义和几个函数说明。数据类型定义部分代码如下[3]:

typedefunsignedshortINT16U;/*16位有符号整数*/

typedefunsignedlongINT32U;/*32位无符号整数*/

typedefunsignedintOS_STK;/*堆栈入口宽度为16位*/

#defineOS_STK_GROWTH1/*堆栈增长方向从上向下满递减堆栈*/

#defineOS_ENTER_CRITICAL(){cpu_sr=OS_CPU_SR_Save();}/*关中断,执行临界代码*/

#defineOS_EXIT_CRITICAL(){OS_CPU_SR_Restore(cpu_sr);}/*开中断*/

在本例移植中,使用软中断指令SWI作为底层接口,使用不同功能号区分不同函数。用关键字_swi声明一个不存在的函数,则调用该函数就在调用的地方插入一条SWI指令并可指定功能号。SWI函数部分代码如下[3]:

_swi(0x00)voidOS_TASK_SW(void);/*任务级任务切换函数*/

_swi(0x01)void_OSStartHighRdy(void);/*运行优先级最高的任务*/

_swi(0x02)voidOS_ENTER_CRITICAL(void);/*关中断*/

_swi(0x03)voidOS_EXIT_CRITICAL(void);/*开中断*/

2.2OS_CPU_C.C文件移植

μc/OS-Ⅱ中,每个任务要有自己的堆栈空间,以便进行任务切换时保存和恢复现场。因此必先确定任务堆栈结构,而任务堆栈结构与CPU体系结构、编译器密切关联。

OSTaskStkInit()函数关键代码如下:

*--stk=(unsignedint)task;/*pc*/

*--stk=(unsignedint)task/*lr*/

*--stk=0;/*r12.....r1,其它同理*/

*--stk=(unsignedint)pdata;/*r0,第一个参

您可能关注的文档

文档评论(0)

151****8293 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档