论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP JSP .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 代写论文

A450嵌入式系统在多点温度控制中的应用

 

4.2 系统的移植

移植是指使一个实时操作系统能够在某个微处理器平台上运行。每个实时嵌入式操作系统都支持很多种处理器,为了使其在具体的硬件平台上工作,必须根据具体的硬件平台完成移植工作。为了便于用户的使用,嵌入式操作系统生产商一般提供一些通用的板级支持包(Board Support Package,BSP)(有的称为硬件抽象层(Hardware Abstract Layer, HAL)),用户只需选择与自己相近的BSP进行修改,可以很容易完成移植工作。

内容来自论文无忧网 snowings.com

μC/OS-II没有提供BSP,需要用户独立完成此工作。由于在设计时已经充分考虑了可移植性,移植工作并不太复杂,要根据具体硬件平台,对文件OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM进行合理的修改。

内容来自论文无忧网 snowings.com

要使其正常运行,处理器首先需满足以下要求:

http://snowings.com

²       处理器的C编译器能产生可重入代码;

内容来自snowings.com

²       用C语言就可以打开和关闭中断; copyright paper51.com

²       处理器支持中断,并且能够产生定时中断(通常在10Hz至100Hz之间);

内容来自snowings.com

²       处理器支持能够容纳一定数量数据(可能是几千字节)的硬件堆栈;

内容来自论文无忧网 snowings.com

²       处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。

内容来自论文无忧网 snowings.com

针对本论文论文中选用的SM5964微处理器和开发工具Keil C51 7.0,进行移植时,重点考虑函数的重入和任务栈的结构及大小的确定。对三个文件进行的修改如下。

http://snowings.com

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

paper51.com

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

http://snowings.com

typedef unsigned char  BOOLEAN;    内容来自snowings.com

typedef unsigned char  INT8U;        //无符号8位数 内容来自论文无忧网 snowings.com

typedef signed   char  INT8S;        //有符号8位数 paper51.com

typedef unsigned int   INT16U;        //无符号16位数

http://snowings.com

typedef signed   int   INT16S;        //有符号16位数

内容来自论文无忧网 snowings.com

typedef unsigned long  INT32U;        //无符号32位数 paper51.com

typedef signed   long  INT32S;        //有符号32位数 http://snowings.com

typedef float         FP32;         //单精度浮点数

copyright paper51.com

typedef double        FP64;         //双精度浮点数 paper51.com

typedef unsigned char  OS_STK;        //栈单元宽度为8比特

内容来自snowings.com

/ *           处理器相关代码 (大模式)     */

内容来自论文无忧网 snowings.com

#define  OS_ENTER_CRITICAL()  EA=0    //关中断

内容来自论文无忧网 snowings.com

#define  OS_EXIT_CRITICAL()   EA=1    //开中断

copyright paper51.com

#define  OS_STK_GROWTH    0          //堆栈从下往上增长  1=向下,

http://snowings.com

//0=向上 paper51.com

#define  OS_TASK_SW()     OSCtxSw()    /*因为微处理器没有软中断指令,所以用程序调用代替*/ copyright paper51.com

2).在OS_CPU_C.C中用C语言编写6个与操作系统相关的函数

内容来自snowings.com

在此文件中主要是完成任务初始化函数OSTaskStkInit ( )的编写,每个任务在创建时,要初始化自己的任务堆栈,任务堆栈的结构类似系统发生一次中断后的堆栈结构,在进行任务切换时,它要用来存储与本任务相关的所有信息。其它5个函数需要声明,因在此用不到, 没有实际内容。如果需要使用可以进行编程。

内容来自论文无忧网 snowings.com

void  *OSTaskStkInit (void(*task)(void *pd), void *ppdata,

内容来自论文无忧网 snowings.com

 void *ptos, INT16Uopt) reentrant

paper51.com

{   

copyright paper51.com

    OS_STK *stk; copyright paper51.com

    ppdata = ppdata; paper51.com

    opt    = opt;                 /*opt没被用到,保留此语句防止报警产生 */  http://snowings.com

    stk    = (OS_STK *)ptos;       //用户堆栈最低有效地址 paper51.com

    *stk++ = 15;                  //用户堆栈长度

copyright paper51.com

    *stk++ = (INT16U)task &0Xff;  //任务地址低8位

copyright paper51.com

    *stk++ = (INT16U)task>> 8;    //任务地址高8位    内容来自snowings.com

    *stk++ = 0x00;                //PSW

http://snowings.com

    *stk++ = 0x0A;                //ACC 内容来自论文无忧网 snowings.com

    *stk++ = 0x0B;                //B 内容来自snowings.com

    *stk++ = 0x00;                 //DPL

内容来自论文无忧网 snowings.com

    *stk++ = 0x00;                 //DPH

内容来自论文无忧网 snowings.com

    *stk++ = 0x00;                 //R0

paper51.com

    *stk++ = 0x01;                 //R1

http://snowings.com

    *stk++ = 0x02;                 //R2

http://snowings.com

    *stk++ = 0x03;                  //R3

paper51.com

    *stk++ = 0x04;                 //R4

paper51.com

    *stk++ = 0x05;                 //R5

copyright paper51.com

    *stk++ = 0x06;                 //R6

内容来自论文无忧网 snowings.com

    *stk++ = 0x07;                 //R7

内容来自snowings.com

                                   /*不用保存SP,任务切换时根据用户堆栈长度计算得出。*/ paper51.com

    *stk++ = (INT16U)(ptos+MaxStkSize) >> 8; copyright paper51.com

   /*?C_XBP 仿真堆栈指针高8位*/

内容来自snowings.com

    *stk++ = (INT16U)(ptos+MaxStkSize) & 0xFF;

内容来自论文无忧网 snowings.com

 /*?C_XBP 仿真堆栈指针低8位*/

paper51.com

     return ((void *)ptos); paper51.com

} http://snowings.com

void OSTaskCreateHook (OS_TCB *ptcb)reentrant; paper51.com

void OSTaskDelHook (OS_TCB *ptcb)reentrant;

copyright paper51.com

void OSTaskSwHook (void) reentrant; copyright paper51.com

void OSTaskStatHook (void) reentrant;

内容来自论文无忧网 snowings.com

void OSTimeTickHook (void) reentrant;

内容来自snowings.com

3). 用汇编语言编写OS_CPU_A.ASM中4个与处理器相关的函数 内容来自论文无忧网 snowings.com

²          OSStartHighRdy ( ):运行优先级最高的就绪任务 paper51.com

²          OSCtxSw ( ) :任务级的任务切换函数 copyright paper51.com

²          OSIntCtxSw ( ):中断级的任务切换函数 paper51.com

²          OSTickISR ( ):中断服务函数 http://snowings.com

以上四个函数的具体内容见附录。 内容来自snowings.com

完成上述3个文件的编写之后,μC/OS-II就可以在系统的硬件平台上正常运行了。 paper51.com

------分隔线----------------------------
联系方式