云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > μCOS-II 在ARM 微处理器上的移植

μCOS-II 在ARM 微处理器上的移植

  • 62 次阅读
  • 3 次下载
  • 2025/6/6 1:54:34

μCOS-II 在ARM 微处理器上的移植

一、 实验目的

1. 了解UC/OS-II 内核的主要结构。

2. 掌握将UC/OS-II 内核移植到ARM7 处理器上的基本方法。

二、 实验内容

1. 将UC/OS-II 内核移植到ARM7 处理器上。 2. 按键盘上的任意键,在超级终端上显示对应的键值。

三、 预备知识

1. 掌握在ARM SDT 2.5 集成开发环境中编写和调试程序的基本过程。

2. 会使用Source Insight 3 编辑C 语言源程序。

3. 了解ARM7 处理器的结构。 4. 了解UC/OS-II 系统结构。

四、 实验设备及工具

硬件:ARM 嵌入式开发板、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentumn100 以

上。

软件:PC 机操作系统win98、ARM SDT 2.51 集成开发环境、仿真器驱动程序、Source

Insight 3.0 五、 实验原理

所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然μCOS-II 的大部分源代码是用C 语言写成的,但是,仍需要用C 语言和汇编语言完成一些与处理器 相关的代码。比如:μCOS-II 在读写处理器寄存器时只能通过汇编语言来实现。因为μCOS-II 在设计的时候就已经充分考虑了可移植性,所以,μCOS-II 的移植还是比较容易的[1]。

要使μCOS-II 可以正常工作,处理器必须满足如下要求:

1. 处理器的C 编译器能产生可重入代码。

可重入的代码指的是一段代码(比如:一个函数)可以被多个任务同时调用,而不必担 心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又 可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。

下面的两个例子可以比较可重入型函数和非可重入型函数:

程序1:可重入型函数 void swap(int *x, int *y)

{ int temp; temp=*x; *x=*y; *y=temp;

}

程序2:非可重入型函数

int temp;

void swap(int *x, int *y)

{ temp=*x; *x=*y; *y=temp;

}

程序1 中使用的是局部变量temp 作为变量,通常的C 编译器,把局部变量分配在栈中。 所以,多次调用同一个函数,可以保证每次的temp 互不受影响。而程序2 中temp 定义的是

全局变量,多次调用函数的时候,必然受到影响。

代码的可重入性是保证完成多任务的基础,除了在C 程序中使用局部变量以外,还要C 编译器的支持。笔者使用的是ARM SDT 的集成开发环境,可以生成可重入的代码。

2. 在程序中可以打开或关断中断。

在μCOS-II 中,可以通过OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏来控制 系统关闭或者打开中断。这需要处理器的支持。在ARM7TDMI 的处理器上,可以设置相应

的寄存器来关闭或者打开系统的所有中断。

3. 处理器支持中断,并能产生定时中断(通常在10Hz~1000Hz 之间)。 μCOS-II 是通过处理器产生的定时器的中断来实现多任务之间的调度的。在

ARM7TDMI 的处理器上可以产生定时器中断。

4. 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。 5. 处理器有将堆栈指针和其他CPU 寄存器读出和存储到堆栈或内存中的指令。

移植工作包括以下几个内容:

1. 用#define 设置一个常量的值(OS_CPU.H)。

2. 声明10 个数据类型(OS_CPU.H)。 3. 用#define 声明三个宏(OS_CPU.H)。 4. 用C 语言编写六个简单的函数(OS_CPU_C.C)。 5. 编写四个汇编语言函数(OS_CPU_A.ASM)。

μCOS-II 进行任务调度的时候,会把当前任务的CPU 寄存器存放到此任务的堆栈中, 然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存

器的入栈和出栈是μCOS-II 多任务调度的基础。

在移植过程中,INCLUDES.H 使得用户项目中的每个.C 文件不用分别去考虑它实际上 上需要那些头文件。使用INCLUDES.H 的唯一缺点是,它可能会包括一些实际不相关的头 文件。这意味着每个文件的编译时间可能会增加。但由于它增强了代码的可移植性,所以我 们还是决定使用这一方法。用户可以通过编辑INCLUDES.H 来增加自己的头文件,但用户

的头文件必须添加在头文件列表的最后。

uC/OS 硬件和软件体系结构

六、 实验步骤

1. 设置OS_CPU.H 中与处理器和编译器相关的代码

/********************************************************************

*

* 与编译器相关的数据类型

*********************************************************************

/

typedef unsigned char BOOLEAN;

typedef unsigned char INT8U; //8 位无符号整数 typedef signed char INT8S; //8 位有符号整数 typedef unsigned int INT16U; //16 位无符号整数 typedef signed int INT16S; //16 位有符号整数 typedef unsigned long INT32U; //32 位无符号整数 typedef signed long INT32S; //32 位有符号整数

typedef float FP32; //单精度浮点数 typedef double FP64; //双精度浮点数

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

#define BYTE INT8S //字节型

#define UBYTE INT8U //为了与 uC/OS V1.xx.

兼容

#define WORD INT16S // ... uC/OS-II.

#define UWORD INT16U #define LONG INT32S #define ULONG INT32U

/********************************************************************

* 与 ARM 处理器相关的代码

********************************************************************/

#define OS_ENTER_CRITICAL() ARMDisableInt() /*关闭中断*/ #define OS_EXIT_CRITICAL() ARMEnableInt() /*开启中断*/

/* 设施堆栈的增长方向 */

#define OS_STK_GROWTH 1 /*堆栈由高地址向低地址增长*/ 2. 用C 语言编写六个操作系统相关的函数(OS_CPU_C.C)

void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos, INT16U opt)

{

unsigned int *stk;

opt = opt; /* 因为'opt' 变量没有用到,防止编译器产生警告*/

stk = (unsigned int *)ptos; /*装载堆栈指针*/

/* 为新任务创建上下文 */

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

*--stk = 0; /* r12 */ *--stk = 0; /* r11 */ *--stk = 0; /* r10 */ *--stk = 0; /* r9 */ *--stk = 0; /* r8 */ *--stk = 0; /* r7 */ *--stk = 0; /* r6 */ *--stk = 0; /* r5 */ *--stk = 0; /* r4 */ *--stk = 0; /* r3 */ *--stk = 0; /* r2 */ *--stk = 0; /* r1 */

*--stk = (unsigned int) pdata; /* r0 */

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

return ((void *)stk);

}

void OSTaskCreateHook (OS_TCB *ptcb)

{

ptcb=ptcb;//防止编译时出现警告

}

void OSTaskDelHook (OS_TCB *ptcb)

{

ptcb=ptcb;//防止编译时出现警告

}

void OSTaskSwHook (void) void OSTaskStatHook (void)

搜索更多关于: μCOS-II 在ARM 微处理器上的移植 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

μCOS-II 在ARM 微处理器上的移植 一、 实验目的 1. 了解UC/OS-II 内核的主要结构。 2. 掌握将UC/OS-II 内核移植到ARM7 处理器上的基本方法。 二、 实验内容 1. 将UC/OS-II 内核移植到ARM7 处理器上。 2. 按键盘上的任意键,在超级终端上显示对应的键值。 三、 预备知识 1. 掌握在ARM SDT 2.5 集成开发环境中编写和调试程序的基本过程。 2. 会使用Source Insight 3 编辑C 语言源程序。 3. 了解ARM7 处理器的结构。 4. 了解UC/OS-II 系统结构。 四、 实验设备及工具 硬件:ARM 嵌入式开发板、用于ARM7TDMI 的JTA

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com