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

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

 

4.2 系统的移植

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

copyright paper51.com

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

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

内容来自论文无忧网 www.paper51.com

²       处理器的C编译器能产生可重入代码; 内容来自www.paper51.com

²       用C语言就可以打开和关闭中断; http://www.paper51.com

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

copyright paper51.com

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

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

paper51.com

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

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

copyright paper51.com

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

typedef unsigned char  BOOLEAN;   

内容来自论文无忧网 www.paper51.com

typedef unsigned char  INT8U;        //无符号8位数

paper51.com

typedef signed   char  INT8S;        //有符号8位数 内容来自www.paper51.com

typedef unsigned int   INT16U;        //无符号16位数 http://www.paper51.com

typedef signed   int   INT16S;        //有符号16位数 copyright paper51.com

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

copyright paper51.com

typedef signed   long  INT32S;        //有符号32位数 copyright paper51.com

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

内容来自www.paper51.com

typedef double        FP64;         //双精度浮点数 内容来自论文无忧网 www.paper51.com

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

内容来自论文无忧网 www.paper51.com

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

copyright paper51.com

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

内容来自www.paper51.com

#define  OS_EXIT_CRITICAL()   EA=1    //开中断 内容来自论文无忧网 www.paper51.com

#define  OS_STK_GROWTH    0          //堆栈从下往上增长  1=向下, 内容来自www.paper51.com

//0=向上

内容来自论文无忧网 www.paper51.com

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

http://www.paper51.com

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

内容来自论文无忧网 www.paper51.com

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

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

内容来自论文无忧网 www.paper51.com

 void *ptos, INT16Uopt) reentrant paper51.com

{    内容来自www.paper51.com

    OS_STK *stk; http://www.paper51.com

    ppdata = ppdata; http://www.paper51.com

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

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

内容来自论文无忧网 www.paper51.com

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

paper51.com

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

paper51.com

    *stk++ = (INT16U)task>> 8;    //任务地址高8位   

内容来自www.paper51.com

    *stk++ = 0x00;                //PSW

copyright paper51.com

    *stk++ = 0x0A;                //ACC

copyright paper51.com

    *stk++ = 0x0B;                //B copyright paper51.com

    *stk++ = 0x00;                 //DPL

copyright paper51.com

    *stk++ = 0x00;                 //DPH http://www.paper51.com

    *stk++ = 0x00;                 //R0 内容来自www.paper51.com

    *stk++ = 0x01;                 //R1

paper51.com

    *stk++ = 0x02;                 //R2

copyright paper51.com

    *stk++ = 0x03;                  //R3 copyright paper51.com

    *stk++ = 0x04;                 //R4 内容来自论文无忧网 www.paper51.com

    *stk++ = 0x05;                 //R5 内容来自www.paper51.com

    *stk++ = 0x06;                 //R6

内容来自www.paper51.com

    *stk++ = 0x07;                 //R7 内容来自论文无忧网 www.paper51.com

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

http://www.paper51.com

    *stk++ = (INT16U)(ptos+MaxStkSize) >> 8;

paper51.com

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

内容来自论文无忧网 www.paper51.com

    *stk++ = (INT16U)(ptos+MaxStkSize) & 0xFF; 内容来自www.paper51.com

 /*?C_XBP 仿真堆栈指针低8位*/ copyright paper51.com

     return ((void *)ptos);

copyright paper51.com

} 内容来自www.paper51.com

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

void OSTaskDelHook (OS_TCB *ptcb)reentrant; http://www.paper51.com

void OSTaskSwHook (void) reentrant;

内容来自www.paper51.com

void OSTaskStatHook (void) reentrant;

内容来自www.paper51.com

void OSTimeTickHook (void) reentrant; 内容来自论文无忧网 www.paper51.com

3). 用汇编语言编写OS_CPU_A.ASM中4个与处理器相关的函数 http://www.paper51.com

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

内容来自www.paper51.com

²          OSCtxSw ( ) :任务级的任务切换函数

http://www.paper51.com

²          OSIntCtxSw ( ):中断级的任务切换函数 内容来自www.paper51.com

²          OSTickISR ( ):中断服务函数

内容来自论文无忧网 www.paper51.com

以上四个函数的具体内容见附录。

内容来自www.paper51.com

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

http://www.paper51.com

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