基于S3C44B0X嵌入式操作系统_第1页
基于S3C44B0X嵌入式操作系统_第2页
基于S3C44B0X嵌入式操作系统_第3页
基于S3C44B0X嵌入式操作系统_第4页
基于S3C44B0X嵌入式操作系统_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于S3C44B0X嵌入式操作系统c/0S摘要:当前,传统的前后台系统已成为阻碍嵌入式系统发展的一大瓶颈,嵌入式操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保系统的实时性和稳定性。本文以此为背景,阐述了嵌入式操作系统c/OS -移植到基于ARM7的S3C44B0X芯片移植过程。最终使嵌入式系统开发平台得以实现。论文关键词:嵌入式,S3C44B0X,实时内核c/OS-,移植是非常必要的。而操作系统是一个通用的程序,要在自己的嵌入式系统中应用它,必须结合所用处理器的不同进行相应边编写或改写。本文结合实例,对基于S3C44B0X的嵌入式操作系统c/0S-平台的实现的移植过程进行研究,最后通

2、过测试,验证了嵌入式开发平台的成功实现。1、 实时内核c/OS-c/OS-,是一个可固化、可裁剪、占先式的实时多任务操作系统,它运行就绪状态下优先级最高的任务,绝大部分源代码是用便于移植的C语言编写,小部分汇编语言代码已被压缩到最低限度,使之可供不同构架的微处理器上使用【3】。c/OS -所具有源代码公开、执行效率高、占用空间小等特点受到广大用户的青睐。2 C/ OS - II 在S3C44B0X上的移植移植就是指使一个实时内核能在其它微处理器或微控制器上运行。本文采用S3C44B0X芯片,开发环境采用Keil uVision3 ,基本满足开发要求。S3C44BOX是一款基于ARM7的SOC芯

3、片。该芯片片上功能强大,技术成熟,具有低成本、低功耗、高性能等优点【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个函数为钩子函数,可以没有

4、实际内容, 但必须要声明,用于扩充自己需要的功能。OS_CPU_A.S 中包含与移植有关的4个汇编语言函数,为OSStartHigh()、OSCtxSW()、OSIntCtxSw(),OSTickISR()。21 OS_CPU. H文件移植此文件中主要包含与编译器相关数据类型定义、堆栈类型定义、两个宏定义和几个函数说明。数据类型定义部分代码如下【3】:typedef unsigned short INT16U; /*16位有符号整数*/typedef unsigned long INT32U; /*32位无符号整数*/typedef unsigned int OS_STK;/*堆栈入口宽度为1

5、6位*/#define OS_STK_GROWTH 1 /*堆栈增长方向从上向下满递减堆栈*/#define OS_ENTER_CRITICAL() cpu_sr =OS_CPU_SR_Save();/*关中断,执行临界代码*/#define OS_EXIT_CRITICAL() OS_CPU_SR_Restore (cpu_sr);/*开中断*/在本例移植中,使用软中断指令SWI作为底层接口,使用不同功能号区分不同函数。用关键字_swi 声明一个不存在的函数,则调用该函数就在调用的地方插入一条SWI指令并可指定功能号。SWI函数部分代码如下【3】:_swi(0 x00) void OS_TA

6、SK_SW(void); /*任务级任务切换函数*/_swi(0 x01) void_OSStartHighRdy( void);/ *运行优先级最高的任务*/_swi(0 x02) void OS_ENTER_CRITICAL(void) ; /*关中断* /_swi(0 x03) void OS_EXIT_CRITICAL(void) ; / * 开中断* /22 OS_CPU_C. C 文件移植c/OS-中,每个任务要有自己的堆栈空间,以便进行任务切换时保存和恢复现场。因此必先确定任务堆栈结构,而任务堆栈结构与CPU体系结构、编译器密切关联。OSTaskStkInit() 函数关键代码如

7、下:*-stk=(unsigned int)task; /*pc*/*-stk=(unsigned int)task /*lr*/*-stk=0; /*r12.r1,其它同理*/*-stk=(unsigned int)pdata; /*r0,第一个参数用r0传递*/*-stk=(SVC32MODE|0 x0|); /* cpsr 关闭irq,fiq*/*-stk=(SVC32MODE|0 x0); /*spsr IRQ,关闭FIQ*/return(OS_STK *)stk);/*堆栈指针保存在任务的OS_TCB中*/此文件中的几个系统规定的hook函数在本移植均将它们都设置为空函数。23 OS

8、_CPU_ A. S 文件移植此文件中需要编写4 个汇编语言函数【3】:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw( )、OSTickISR( )。多任务启动函数OSStart( )调用OSStartHightRdy( )函数, 运行优先级最高的任务。OSCtxSw()函数是由任务级任务切换函数OS_TASK_SW()调用,实现从低优先级向高优先级切换。文中任务级切换是通过SWI软中断来实现的。软中断的异常处理程序挂接到CPU内核,通过修改启动代码里的异常向量表实现。中断服务程序与CPU 芯片相关,中断源的挂接通过增加汇编接口的支持来实现,即在文件IRQ.S的适

9、当位置添加如下的程序代码【2】:IRQ.Handler HANDL ER IRQ.Exception ; IRQ 中断OSIntCtxSw()是中断级任务切换函数,在中断退出时由函数OSIntExit()调用。此函数基本原理与任务级切换相同,只是由于进入中断时已保存了被中断任务的环境变量,就不进行类似操作,只需要对堆栈指针进行调整即可。部分代码如下:LDR r4,addr_OSTCBCur;/*得到当前任务的TCB地址*/LDR r5,addr_OSTCBHighRdy;/*得到高优先级任务的TCB地址*/LDR r5,;/*得到堆栈指针*/LDR sp,;/*切换到新的堆栈*/STR r5,

10、;/*设置新的当前任务的TCB地址*/LDMFD sp!,r4 /*新任务cpsr出栈*/MSR CPSR_cxsf,r4LDMFD sp!,r0-r12,lr,pc;/*r0-r12,lr&pc出栈,运行新任务*/系统时钟节拍中断函数OSTickISR()为内核提供时钟节拍。其周期决定了内核所能给应用系统提供的最小时间间隔服务。本移植中,IRQ是受C/OS-II管理的中断,对FIQ不处理。时钟节拍的移植可通过汇编宏完成。完成上述工作后,C/OS-II就可以运行在ARM处理器上了。3 移植测试测试操作系统移植代码的正确性可以在没有应用程序的情况下进行,即让内核自己测试自己。笔者通过以下测试用例

11、,经过编译、链接及下载到目标板中。验证系统移植是成功的。void OSTaskIdleHook (void)static i=0;if(i%20000=0) /*每20000次点亮一个LED,*/sysUtilsLightLed(LED_ALL,FALSE); /*关闭所有的LED */sysUtilsLightLed(i%3+1,TRUE); /*循环点亮一个LED*/i+;return ;4 结语C/OS-II 是一个具有良好应用前景的嵌入式实时内核,本文通过具体事例,成功实现了C/OS-II在S3C44B0X上的移植。通过简单的测试用例,验证了移植是正确的,此成功移植为C/OS-II 嵌入式实时系统的复杂应用,提供了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论