欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

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

时间:2016-02-14  作者:陶保壮

摘要:当前,传统的前后台系统已成为阻碍嵌入式系统发展的一大瓶颈,嵌入式操作系统的使用,能够简化嵌入式系统的应用开发,有效地确保系统的实时性和稳定性。本文以此为背景,阐述了嵌入式操作系统µ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芯片,开发环境采用Keil uVision3 ,基本满足开发要求。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.1  OS_CPU. H文件移植

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

typedef unsigned short INT16U; /*16位有符号整数*/

typedef unsigned long INT32U; /*32位无符号整数*/

typedef unsigned int OS_STK;/*堆栈入口宽度为16位*/

#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(0x00) void OS_TASK_SW(void); /*任务级任务切换函数*/

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

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

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

2.2  OS_CPU_C. C 文件移植

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

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

*--stk=(unsigned int)task; /*pc*/

*--stk=(unsigned int)task /*lr*/

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

*--stk=(unsigned int)pdata; /*r0,第一个参数用r0传递*/

*--stk=(SVC32MODE|0x0|); /* cpsr 关闭irq,fiq*/

*--stk=(SVC32MODE|0x0); /*spsr IRQ,关闭FIQ*/

return((OS_STK *)stk);/*堆栈指针保存在任务的OS_TCB中*/

此文件中的几个系统规定的hook函数在本移植均将它们都设置为空函数。

2.3  OS_CPU_ A. S 文件移植

此文件中需要编写4 个汇编语言函数[3]:

OSStartHighRdy()、OSCtxSw()、OSIntCtxSw( )、OSTickISR( )。

多任务启动函数OSStart( )调用OSStartHightRdy( )函数, 运行优先级最高的任务。OSCtxSw()函数是由任务级任务切换函数OS_TASK_SW()调用,实现从低优先级向高优先级切换。文中任务级切换是通过SWI软中断来实现的。软中断的异常处理程序挂接到CPU内核,通过修改启动代码里的异常向量表实现。中断服务程序与CPU 芯片相关,中断源的挂接通过增加汇编接口的支持来实现,即在文件IRQ.S的适当位置添加如下的程序代码[2]:

IRQ.Handler HANDL ER IRQ.Exception ; IRQ 中断

OSIntCtxSw()是中断级任务切换函数,在中断退出时由函数OSIntExit()调用。此函数基本原理与任务级切换相同,只是由于进入中断时已保存了被中断任务的环境变量,就不进行类似操作,只需要对堆栈指针进行调整即可。

查看相关论文专题
加入收藏  打印本文
上一篇论文:移动自组网的分簇算法研究
下一篇论文:Viterbi改进算法研究
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文