电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>ARM>详解μC/OS-II在ARM平台上移植

详解μC/OS-II在ARM平台上移植

2017-11-01 | rar | 0.4 MB | 次下载 | 1积分

资料介绍

μC/OS-II在ARM平台的移植是一个重要的学习过程,有助于提高对RTOS的认识与理解,从而提高嵌入式工作者的理论与技术水平。μC/OS-II是一个小的实时内核,源代码公开,有详尽的解释。正是因为其内核小,才便于研究、理解和掌握。另外,参照TCP/IP协议、标准和一些公开的图书,在μC/OS-II上增加TCP/IP协议栈,蓝牙通信软件、红外通信协议也十分方便,商业价值得到了认可。
  随着科技的发展,嵌入式应用的复杂性越来越高,同时ARM体系处理器的价格越来越低,ARM平台 + 实时操作系统的架构体系的使用会越来越广泛。有鉴于此,本文对μC/OS-II在ARM平台下的移植进行了深入探讨。
  1 操作系统μC/OS-II及S3C2410开发平台简介
  1.1 μC/OS-II简介
  μC/OS最早出自于1992年美国嵌入式系统专家Jean J.Labrosse在《嵌入式系统编程》杂志5月和6月上刊登的文章连载,并把μC/OS的源代码发表在该杂志的BBS上。μC/OS-II是目前最新的版本。
  μC/OS-II是专门为计算机的嵌入式应用而设计的,绝大部分代码用C语言编写。CPU的相关部分采用汇编语言编写,总量在200行左右的汇编语言被压缩到最低限度,目的是便于移植到任何一种其他的CPU上去。
  μC/OS-II具有执行效率高、占用空间小、实时性优良、可扩展等特点,最小内核可编译至2 KB。μC/OS-II可移植到几乎所有知名的CPU上。
  1.2 μC/OS-II的组成
  严格地说μC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度、任务管理、时间管理、内存管理和任务间的通信和同步等基本功能。没有提出输入输出管理、文件系统、网络通信等额外的服务。但由于μC/OS-II良好的可扩展性和源代码开放,这些非必须的功能完全可以由用户根据自己的需要分别实现。
  μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信、CPU的移植等5个部分[1]。
  (1)核心部分(OSCore.c):操作系统的处理核心,包括操作系统的初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。
  (2)任务处理部分(OSTask.c):与任务操作密切相关的部分。包括任务的建立、删除、挂起、恢复等等。
  (3)时钟部分(OSTime.c):μC/OS-II中最小的时钟单位是timetick(时钟节拍)。任务延时等操作在此完成。
  (4)任务同步和通信部分:为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分,主要用于任务间的相互联系和对临界资源的访问。
  (5)与CPU的接口部分:这里是指μC/OS-II针对所使用的CPU需要改写的部分。由于μC/OS-II是一个通用性的操作系统,其开放的源代码是以X86内核为例而编写的,在应用到其他处理器平台上时,这部分代码必须做相应的改变。
  1.3 ARM硬件开发平台简介
  调试时所用的硬件开发平台是一款基于三星S3C2410A芯片的开发平台。S3C2410开发板是一款通用的ARM9开发板,其基本配置采用三星公司的S3C2410 ARM920T芯片,主频203 MHz。集成有SDRAM控制器、NAND Flash控制器、SD读卡器、USB Host和USB Device控制器、LCD控制器、I2C总线控制器、SPI总线接口等。开发板上Flash空间为32 MB,SDRAM容量为128 MB。
  2 S3C2410引导程序
  开发板原有引导程序由VIVI公司提供,其运行过程分成两个阶段。第一阶段的代码用汇编语言编程,主要完成以下任务: (1)初始化CPU速度、存储器、存储器配置寄存器,以及串口等硬件资源的配置;(2)建立内存空间的映射图,将系统的软硬件环境带到合适的状态,为最终调用操作系统内核做准备; (3)装载操作系统映像到内存中;(4)设置相关寄存器和资源,跳转到main()函数,进入第二阶段。
  第二阶段的代码用C语言编写,从main()函数开始,主要工作有:开发板外部接口初始化(I/O接口、UART接口、LCD接口等)、内存映射和内存管理单元初始化等,最后启动linux内核。有大量文章对此开发板引导程序作了详细的分析[3],本文在这里不做重复,本文的重点是将引导程序与μC/OS-II操作系统二者融合,既利用了开发板源代码提供的关于UART口、LCD和触摸屏接口程序;时钟、内存管理等丰富的驱动程序和接口程序,又成功地完成了对μC/OS-II实时操作系统的移植和整合。
  3 移植要点
  μC/OS-II的内核分成2个部分,与处理器无关的代码和与处理器有关的代码。移植过程中需要根据S3C2410处理器和ADSV1.2开发平台(这里特地强调编译平台的因素,主要考虑到各个编译平台对数据格式的理解略有差别)的特点来重新编写3个文件,用C语言编写的OS_CPU.H、OS_CPU_C.C和用汇编语言编写的OS_CPU_A.ASM,此外,要将S3C2410开发板引导程序和μC/OS-II内核程序融合在一起,还必须将各自main()函数融为一体。
  3.1 OS_CPU.H的移植
  μC/OS-II内核中OS_CPU.H代码是根据X86内核而写的,其中的数据格式定义与ARM9内核以及ADSv1.2开发平台不完全相符。OS_CPU.H的移植分为以下4个部分:
  (1)数据类型定义:在调试时发现,虽然定义8 bit或16 bit数据类型时,在编译过程中不会报错,但这些变量并不会按要求被正确初始化或赋值,运行过程常常出错。所以,在改写OS_CPU.H代码时,将所有变量都定义成32 bit或64 bit;
  (2)堆栈生长方向定义:ARM的堆栈是从上往下生长的,OS_STK_GROWTH定义为1;
  (3)开关中断的宏定义:用开关中断的汇编函数实现,放在OS_CPU_A.ASM文件中。
  (4)宏定义OS_TASK_SW():这个宏定义是在ARM中断处理之外时,μC/OS-II从低优先级切换到高优先级任务时所调用的代码,它总是在任务级代码中被调用。在有些资料中[1],将OS_TASK_SW()和OSIntCtxSw()等同起来,这在ARM内核中是不行的,因为后者是ARM内核在中断模式下的任务切换函数,而不同模式下处理器的寄存器组是不同的,所要保护的寄存器内容也不相同,经过调试,发现以下代码可达到目的。
  OS_TASK_SW
  stmfd sp!, {lr} ; PC入栈,lr其实是任务的返回地址,
  stmfd sp!, {r0-r12, lr}
  mrs r4, cpsr
  stmfd sp!, {r4} ;最后保存CPSR ldr r4, =OSTCBCur
  ldr r5, [r4]
  str sp, [r5] ;将SP保存在当前任务的控制块中 ldr r5, =OSTCBHighRdy
  ldr r5, [r5]
  str r5, [r4] ;OSTCBCur = OSTCBHighRdy ldr r6, =OSPrioHighRdy
  ldr r6, [r6]
  ldr r4, =OSPrioCur
  str r6, [r4] ;OSPrioCur = OSPrioHighRdy
  ldr sp, [r5] ;得到新任务的堆栈指针
  ldr r4, [sp], #4
  msr cpsr_cxsf, r4 ;先恢复CPSR
  ldmfd sp!, {r0-r12, lr, pc}
  3.2 OS_CPU_C.C.H的移植
  在OS_CPU_C.C中,最主要的函数是OSTaskStkInit(),它在任务建立时,用来初始化任务堆栈结构,其余钩子函数可以不用动,这个函数的代码比较简单[2]。需要说明的是,由于本文所述系统,用户任务运行在SVC模式下,没有保存SPSR寄存器。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1电子电路原理第七版PDF电子教材免费下载
  2. 0.00 MB  |  1490次下载  |  免费
  3. 2单片机典型实例介绍
  4. 18.19 MB  |  92次下载  |  1 积分
  5. 3S7-200PLC编程实例详细资料
  6. 1.17 MB  |  27次下载  |  1 积分
  7. 4笔记本电脑主板的元件识别和讲解说明
  8. 4.28 MB  |  18次下载  |  4 积分
  9. 5开关电源原理及各功能电路详解
  10. 0.38 MB  |  10次下载  |  免费
  11. 6基于AT89C2051/4051单片机编程器的实验
  12. 0.11 MB  |  4次下载  |  免费
  13. 7蓝牙设备在嵌入式领域的广泛应用
  14. 0.63 MB  |  3次下载  |  免费
  15. 89天练会电子电路识图
  16. 5.91 MB  |  3次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234313次下载  |  免费
  3. 2PADS 9.0 2009最新版 -下载
  4. 0.00 MB  |  66304次下载  |  免费
  5. 3protel99下载protel99软件下载(中文版)
  6. 0.00 MB  |  51209次下载  |  免费
  7. 4LabView 8.0 专业版下载 (3CD完整版)
  8. 0.00 MB  |  51043次下载  |  免费
  9. 5555集成电路应用800例(新编版)
  10. 0.00 MB  |  33562次下载  |  免费
  11. 6接口电路图大全
  12. 未知  |  30320次下载  |  免费
  13. 7Multisim 10下载Multisim 10 中文版
  14. 0.00 MB  |  28588次下载  |  免费
  15. 8开关电源设计实例指南
  16. 未知  |  21539次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935053次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537791次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234313次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233045次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191183次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183277次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138039次下载  |  免费