新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 实时操作系统C/OS-II在ARM7上的移植

实时操作系统C/OS-II在ARM7上的移植

作者:时间:2012-12-04来源:网络收藏

  4 μC/OS-II在S3C44B0X上移植代码分析

  4.1 OS_CPU.H文件分析

  OS_CPU.H包括用#define定义的与处理器有关的常量、宏和类型定义。

  (1)定义与编译器相关的数据类型。

  μC/OS-II为了保证可移植性,程序中没有直接使用int、unsigned int等定义,而是自己定义了一套数据类型,例如,INT8U表示8位无符号整型,INT16U表示16位无符号整型等。对于ARM这样的32位内核,INT16U是unsigned short型;若是16位的处理器,则是unsigned int型。不能使用bit型变量,把BOOLEAN型定义成unsigned char型。另外S3C44B0X数据宽度和堆栈宽度都是32位,分别将OS_STK和OS_CPU_SR定义成unsigned int型。

  (2)义堆栈增长方向

  在μC/OS-II中,用OS_STK_GROWTH来设置堆栈的增长方向,OS_STK_GROWTH为0表示堆栈从低地址向高地址增长;OS_STK_GROWTH为l表示堆栈从高地址向低地址增长,其宏定义为:

  #define OS_STK_GROWTH l; //堆栈从高地址向低地址增长

  #define OS_STK_GROWTH 0; //堆栈从低地址向高地址增长

  (3)代码临界区

  μC/OS-II在进入系统临界代码区之前需关中断,退出临界区后再开中断,则μC/OS-II能够保护临界区代码免受多任务或中断服务例程的破坏。在S3C44B0X中,通过设置状态寄存器CPSR中的中断禁止位来实现。μC/OS-II中的宏#define OS_ENTER_CRITICAL() IRQFIQDE定义将状态寄存器中的中断禁止位置位,以禁止所有的中断;#define OS_EXIT_CRITICAL() IRQFIQRE定义将状态寄存器的中断禁止位置零,以允许所有的中断。

  (4)定义OS_TASK_SW宏

  OS_TASK_SW宏是μC/OS-II从低优先级任务切换到高优先级任务时的调度,可以采用下面两种方式定义:一种是如果处理器支持软中断,那么可以使用软中断将中断向量指向OSCtxSw函数;另一种是直接调用OSCtxSw函数。本文用的是后一种方式。

  4.2 OS_CPU_A.ASM文件分析

  (1) OSStartHighRdy()函数

  OSStart()函数调用OSStartHighRdy(),使就绪态任务中优先级最高的任务开始执行。

  其示意性代码如下:



评论


相关推荐

技术专区

关闭