首页 理论教育 ARM处理器上移植了9.5μC/OS-Ⅱ内核

ARM处理器上移植了9.5μC/OS-Ⅱ内核

时间:2023-11-23 理论教育 版权反馈
【摘要】:实验目的掌握把μC/OS-Ⅱ移植到ARM7 处理器上的基本步骤及方法。实验内容①移植μC/OS-Ⅱ到三星的S3C44BOX ARM7TDMI 处理器上。它们的作用是将μC/OS-Ⅱ操作系统紧紧地附着在ARM 处理器上,实现软件与硬件的协同。首先,由于不同的处理器有不同的字长,所以μC/OS-Ⅱ的移植包括了一系列的数据类型的重定义,以确保其可移植性。这样,就使得μC/OS-Ⅱ能够保护临界区的代码免受多任务或中断服务子程序的侵扰。在该基本框架的基础上深入学习μC/OS-Ⅱ的移植,将会事半功倍。

ARM处理器上移植了9.5μC/OS-Ⅱ内核

(1)实验目的

掌握把μC/OS-Ⅱ移植到ARM7 处理器上的基本步骤及方法。

(2)实验内容

①移植μC/OS-Ⅱ到三星的S3C44BOX ARM7TDMI 处理器上。

②运行提供的移植项目,在CPU 板上观察D7、D8 的闪烁。

(3)实验设备

①EL-ARM-830 教学实验箱,Pentium Ⅱ以上的PC 机,仿真器电缆

②PC 操作系统Win98 或Win2000 或WinXP,ADS1.2 集成开发环境,仿真器驱动程序。

(4)实验步骤

①本实验仅使用实验教学系统的CPU 板,在进行本实验时,音频的左右声道开关、液晶的显示开关、AD 通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

②参照μC/OS-Ⅱ的作者的权威教材《嵌入式实时操作系统μC/OS-Ⅱ》,可以知道,要将μC/OS-Ⅱ移植到ARM7TDMI 处理器上,必须写三个文件,这三个文件都是与处理器的架构紧密相关的,它们是OS_CPU.h、OS_CPU_A.s 和OS_CPU_C.c。 它们的作用是将μC/OS-Ⅱ操作系统紧紧地附着在ARM 处理器上,实现软件与硬件的协同。

③通常OS_CPU.h 文件中主要包括:

a.将编译器类型数据重定义为μC/OS-Ⅱ内核所用的数据类型。

b.编写相应ADS 编译器的开关中断的函数。

c.定义单个堆栈的数据宽度。

d.定义微处理器的堆栈的增长方向。

首先,由于不同的处理器有不同的字长,所以μC/OS-Ⅱ的移植包括了一系列的数据类型的重定义,以确保其可移植性。 虽然μC/OS-Ⅱ不用浮点数据,但仍定义了浮点数据类型。

与所有的实时内核一样,μC/OS-Ⅱ需要先禁止中断,然后再访问代码的临界区,并在访问完后重新允许中断。 这样,就使得μC/OS-Ⅱ能够保护临界区的代码免受多任务或中断服务子程序的侵扰。 在移植过程中,使用ARM ADS 编译器定义的开关中断的方法:

上面这条语句定义了CPU 状态寄存器的容量,即CPSR 的长度,它进一步定义了变量cup_sr的长度,即OS_CPU_SR=cpu_sr。

接下来,用户还必须将任务的堆栈数据类型通知μC/OS-Ⅱ,以确定出入栈的宽度。

最后,要确定堆栈的生长方向,大多数微控制器和微处理器的堆栈方向是由高地址到低地址生长的,但一些微处理器却是相反。 μC/OS-Ⅱ可以使用两种方式工作:

④在文件OS_CPU_C.c 中主要包括10 个函数,其中一个是任务堆栈初始化函数,其他9个为操作系统扩展的钩子函数。 在OSTaskCreate()和OSTaskCreateExt()中,通过调用任务堆栈初始化函数OSTaskStkInit()来初始化任务的堆栈结构,初始完毕后,堆栈看起来就像刚发生过中断并将所有的寄存器内容保存到该任务堆栈中的情形一样。

(www.xing528.com)

钩子函数是为用户提供扩展的函数。 根据具体的实际要求添加函数里的内容。

⑤文件OS_CPU_A.s 中主要包括5 个函数:

void OSStartHighRdy     启动最高优先级任务

void OSIntCtxSw       中断中的任务切换

void OSCtxSw        任务切换

void OSCPUSaveSR       保存中断前的寄存器状态

void OSCPURestoreSR      中断完成后,恢复中断前的状态

当μC/OS-Ⅱ初始化完毕后,它要寻找最高优先级的任务,找到后跳到最高优先级任务中执行。

以下为寻找代码:

跳到最高优先级任务后,开始执行,最高优先级要挂起一段时间,或是等待某个事件,以使较低的优先级任务得到运行的权利,这时将发生任务间的切换。

源代码如下:

当在发生中断时,也有可能进行任务的切换,所以,在中断级的任务切换也应该考虑到。下面为中断级的任务切换源码:务

至此,中断级任务切换完成。 再加上临界段代码的实现方式,即开关中断状态,前面已述,则UCOSII 就移植到ARM7 处理器上。

图9.20 μC/OS-Ⅱ在ADS1.2 环境下的目录结构及源文件结构组成的基本框架

⑥通过运行提供的移植代码来体验移植后操作系统简单的工作为方便实验,先给出一个感性认识,这里已经将μC/OS-Ⅱ移植到了ELARM-830 实验系统上,并编写了多任务应用程序,即:一个熄灭D7、D8 灯的任务,一个点亮D7熄灭D8 的任务,一个熄灭D7 点亮D8 的任务,三个任务轮流输出。 该程序存放在plant. mcp(ADS1. 2 下) 项目中, 而此项目存放在/S3C44BOX实验程序/实验四中。 图9.20 为该项目在ADS1.2 环境下的目录结构及源文件结构组成的基本框架。

其中,Application/INC 目录下存放的是操作系统下的应用程序的头文件,Application/SRC 目录下存放的是操作系统的应用程序;Startup44b0/INC目录下存放的是ARM 的启动代码和 CPU 板初始化程序的头文件,Starup44b0/SRC目录下存放的是ARM 的启动源代码文件44binit.s、库文件44blib. c、CPU 板的初始化文件target. c。 在μC/OS-Ⅱ/CPU 目录下存放的是操作系统的移植文件,μC/OS-Ⅱ/INC 目录下存放的是与应用任务相关的头文件,μC/OS-Ⅱ/SRC 目录下存放的是UCOSII 操作系统的源代码,它们是由Ucos_II. C 文件嵌进来的。

了解了移植文件的基本结构,也有利于驱动的编写。 在μC/OS-Ⅱ的正常运行之前,还必须进行硬件系统的初始化,这也就是需要文件夹Startup44b0 的理由。 接好EL-ARM-830 实验系统电源,仿真器连接正确,上电,在PC 上打开ADS1.2 开发环境,打开plant.mcp 项目,先编译一下,然后运行,观察CPU 板上LED 灯D7、D8 的闪烁情况,该应用任务显示了三个任务的交替运行的结果。 在该基本框架的基础上深入学习μC/OS-Ⅱ的移植,将会事半功倍。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈