分享
2023年基于ARM的实时操作系统μC/OS-Ⅱ的内核移植.docx
下载文档

ID:1777429

大小:19.94KB

页数:4页

格式:DOCX

时间:2023-04-22

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023 基于 ARM 实时 操作系统 OS 内核 移植
基于ARM的实时操作系统μC/OS-Ⅱ的内核移植 摘 要:本文研究了实时操作系统μC/OS-Ⅱ在ARM微处理器上的内核移植。首先介绍了实时操作系统μC/OS-Ⅱ和ARM7微处理器,在此根底上,分析了内核移植的条件和主要内容,最后对代码移植的正确性进行测试。 关键词:ARM;μC/OS-Ⅱ;移植 1 引言 嵌入式系统是一个分散的工业,充满了竞争、机遇与创新,没有哪个系列的处理器和操作系统能够垄断全部市场,因此留给各个公司的创新余地很大。研究嵌入式系统,一个必不可少的根底工作就是实现嵌入式操作系统在相关处理器平台上的移植。本文基于目前应用非常广泛的ARM处理器体系结构,对μC/OS-II嵌入式实时操作系统内核的移植工作做了分析和介绍,并对代码移植的正确性进行验证。 2 μC/OS-Ⅱ操作系统简介 μC/OS-Ⅱ是一个著名的源代码开放的嵌入式实时操作系统(RTOS〕,由美国人Jean J.Labrosse编写出来。μC/OS-Ⅱ读作"micro controller OS 2",意为"微控制器操作系统版本 2"。μC/OS-Ⅱ结构小巧,适合小型控制系统,具有执行效率高,占用空间小,实时性能优良和可扩展性能强等特点,具有可剥夺实时内核,提供了实时系统所需的根本功能,其中包括任务的调度与管理,时间管理,任务间同步与通信,内存管理和中断效劳等功能。 μC/OS-Ⅱ可用于8位、16位和32位单片机或DSP。良好的持续开展能力、高性能的内核以及友好的用户开发坏境,使其迅速在嵌入式实时操作系统领域占据一席之地。 3 ARM7微处理器简介 ARM〔Advanced RISC Machines〕,是英国Advanced RISC Machines Limited公司设计开发的通用32位RISC微处理器体系结构。ARM处理器因其卓越的性能和显著优点,已成为高性能、低功耗、低本钱嵌入式处理器的代名词,成为32位嵌入式应用领域、全球范围内最广泛使用的处理器。ARM7系列微处理器采用亚微米制造工艺,是一种低电压、低功耗的32位RISC处理器,其内核基于ARMV4T(冯·诺依曼)体系结构,分为3级流水线,最高时钟频率为66MHz,使用3V/5V供电模式,最适合用于对价位和功耗要求较高的消费类应用。ARM7系列微处理器具有如下特点:具有嵌入式ICE-RT逻辑,调试开发方便;极低的功耗,适合对功耗要求较高的应用,如便携式产品;能够提供0.9MIPS/MHz的三级流水线结构;代码密度高并兼容16位的Thumb指令集;对操作系统的支持广泛,包括Windows CE、Linux、Palm OS等;指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代;主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。 4 实时操作系统μC/OS-Ⅱ在ARM上的内核移植 4.1 移植的条件 处理器的C编译器能产生可重入代码;在程序中用C语言就可以翻开或关闭中断;处理器支持中断,并且能够产生定时中断;处理器能够容纳一定数量的硬件堆栈;处理器有将堆栈指针和其他CPU存放器存储和读出到堆栈(或者内存)的指令。 4.2 移植μC/OS-Ⅱ主要包括的内容 重新定义一系列与编译器相关的数据类型。具体定义代码如下: typedef unsigned char BOOLEAN; typedef unsigned char INT8U;/x8位无符号整数x/ typedef signed char INT8S;/x8位有符号整数x/ typedef unsigned short INT16U;/x16位有符号整数x/ typedef signed short INT16S;/x16位无符号整数x/ typedef unsigned long INT32U;/x32位无符号整数x/ typedef signed long INT32S;/x32位有符号整数x/ typedef float FP32;/x单精度浮点数x/ typedef double FP64;/x双精度浮点数x/ 设置一个常量来标识堆栈增长方向。 typedef unsigned int OS_STK /x堆栈的单位,堆栈入口宽度为16位x/ #define OS STK GROWTH 1/x定义堆栈的增长方向,1表示高地址向低地址增长x/ 声明用于开关中断和任务切换的宏。具体代码如下: #define OS_ENTER_CRITICAL() ARMEnableInt() /x开启中断x/ #define OS_NTER_CRITICAL() ARMDisabIeInt() /x关闭中断x/ #define OS_TASK_SW() OSCtxSw() /x任务切换x/ 用汇编语言编写与处理器相关的函数(OS_CPU.A.ASM) 为了方便移植,大局部的μC/OS-Ⅱ代码是用C语言写的,但仍需要用C和汇编语言写一些与处理器相关的代码,这是因为μC/OS-Ⅱ在读写处理器存放器时只能通过汇编语言来实现。它包括以下四个子函数:OSStartHighRdy()是运行优先级最高的就绪任务、OSCtxsw()是任务级的任务切换函数、OSIntCtxSw()是中断级的任务切换函数、OSTickISR()是系统时钟节拍中断效劳函数 5 用C语言编写6个与操作系统相关的函数(OS_CPU_C.C) OSTaskInit:OSTaskCreate()和OSTaskCreateExt()通过调用OSTaskStkInit()来初始化任务的堆栈结构。在用户建立任务的时候,用户传递任务的地址,pdata指针,任务的堆栈栈顶和任务的优先级给OSTaskCreate()和OSTaskCreateExt()。一旦用户初始化了堆栈,OSTaskStkInit()就需要返回堆栈指针所指的地址。OSTaskCreate()和OSTaskCreateExt()会获得该地址并将它保存到任务控制块(OS_TCB)中。 OSTaskCreateHook:当用OSTaskCreate()和OSTaskCreateExt()建立任务时就会调用OSTaskCreateHook()。当μC/OS-Ⅱ设置完自己内部结构以后,会在调用任务调度程序之前调用OSTaskCreateHook()。 当 OSTaskCreateHook()被调用时,会收到指向已建立任务的OS_TCB指针,这样可访问所有的结构成员。 OSTaskDelHook:当任务被删除时会调用OSTaskDelHook()。该函数在任务从μC/OS-Ⅱ的内部任务链表中解开之前被调用。当它被调用时,会收到指向正被删除任务的OSJCB指针,这样可访问所有的结构成员。 OSTaskSwHook:当发生任务切换的时候就会调用OSTaskSwHook()。OSTaskSwHook()可以直接访问OSTCBCur和OSTCBHighRdy,因为它们是全局变量。OSTCBCur指向被切换出去的任务的OS_TCB,而OSTCBHighRdy指向新任务 OS_TCB。 OSTaskStatHook:OSTaskStatHook()每秒钟都会被OSTaskStat()调用一次。用户可以用OSTaskStatHook()来扩展统计功能。 OSTimeTickHook:OSTimeTickHook()在每个时钟节拍都会被OSTaskTick()调用。OSTimeTickHook()是在节拍被μC/OS-Ⅱ真正处理并通知用户的移植实例或应用程序之前被调用的。 完成了上述工作以后,μC/OS-Ⅱ就可以正常的运行在ARM处理器上了 结束语 μC/OS-II作为一个优秀的实时操作系统已经被移植到各种体系结构的微处理器上,而ARM体系结构在嵌入式领域也获得了广泛的应用和支持。将μC/OS-II移植到ARM平台上,能够使我们更深入地了解实时操作系统的构造,加快在ARM平台上的应用和开发,并为更高层次上的扩展和改良打下根底。 参考文献 [1]Jean J, 邵贝贝译. Labrosse. 嵌入式实时操作系统μC/OS-II. 北京 航空航天大学出版社. 2003. [2]田泽. 嵌入式系统开发与应用教程. 北京: 北京航空航天大学出版社, 2004.

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开