首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

μC/OS II针对TMS320C32的移植 01

μC/OS II针对TMS320C32的移植 01

嵌入式操作系统mC/OS II是一个可移植可裁剪、占先式多任务OS。大部分源代码用ANSI C语言编写,只有很少的一部分用汇编语言编写,使移植工作简化。
  下面介绍如何将mC/OS-II移植到TI的浮点DSP芯片TMS320C32上。
  TMS320C32 DSP芯片介绍
  TMS320C3x是TI公司的浮点DSP芯片。TMS320C32是其中的一款,能工作在60MHz的时钟频率下,指令运行速度达到60 MFLOPS,是性价比很高的浮点处理器,有着广泛的应用。
  TMS320C32芯片的组成:浮点CPU、512字节RAM、2个DMA通道、1个串口、2个定时器、固化引导程序,另外还有如下的通用寄存器:8个40bit的寄存器(R0~R7),可以用来存放32bit的整数,同时也可以用来存放40bit的扩展精度的浮点数;8个32bit的辅助寄存器(AR0~AR7),它们的主要作用是存储地址、参与各种模式的寻址等,当然也可以作为一般的寄存器来使用;状态寄存器ST(含全局中断使能位)、堆栈寄存器SP、中断标志寄存器IF、中断使能寄存器IE、I/O标志寄存器IOF、数据页指针寄存器DP(每页容量为64K)、索引寄存器IR0、IR1、块寄存器BK、重复执行寄存器RS(块起始地址)、RE(块终止地址)、RC(重复次数)。
  要实现mC/OS-II向TMS320C32的移植,需要C3x的C编译器支持,否则无从下手。我们使用的是TI公司的C编译器Coder Composer V4.10.36。这个C编译器允许嵌入行汇编,另外还具有强大的优化C编译的功能。
  移植中所需修改的文件
  和CPU相关的文件主要有四个:C语言文件OS_CPU_C32.C、INCLUDES.H头文件、头文件OS_CPU_C32.H和汇编文件OS_CPU_C32.ASM,我们的主要移植工作就是针对这些文件做一些变动。
  OS_CPU_C32.H
  OS_CPU_C32.H包括typedef、#define定义的CPU相关信息如下:
  #ifndef __OS_CPU_H__
  #define __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;/* 32位单精度浮点数 */
  typedef  long  double  FP40; /*40位扩展精度浮点数*/
  typedef  unsigned  int  OS_STK; /*堆栈入口宽度位32位*/
  #define  OS_STK_GROWTH        0 /*堆栈由低地址向高地址增长*/
  #define  OS_CRITICAL_METHOD  1
  #if  OS_CRITICAL_METHOD == 1 /*方法一*/
  #define  OS_ENTER_CRITICAL() asm ("  AND 0DFFFH,ST ") /*关全局中断,进入临界区*/
  #define OS_EXIT_CRITICAL()  asm  ("  OR  02000H,ST ") /*开全局中断,退出临界区*/
  #endif
  #if  OS_CRITICAL_METHOD == 2  /*方法二*/
  /*保存中断禁止状态到堆栈,关全局中断,进入临界区*/
  #define  OS_ENTER_CRITICAL() {
  asm(" PUSH ST");
  asm(" AND 0DFFFH,ST");   }
  #define  OS_EXIT_CRITICAL()  asm("POP ST")  /* 恢复中断禁止状态*/
  #endif
  #define  OS_TASK_SW()    asm("TRAP 27")  /*用于任务切换的软中断*/
  数据类型
  由于不同的处理器有不同的字长,所以mC/OS-II的移植包括了一系列的数据类型的定义,以确保其可移植性。这里我们定义一些C32以及Code Composer都能识别、处理的数据类型。
  C32本质上只有4种数据类型:32位的无符号整数:0_4294967295;32位的有符号整数:-2147483648_2147483647;32位的浮点单精度浮点数:5.877472e-39_3.4028235e38;40位的扩展进度浮点数5.87747175e-39_3.4028236684e38;我们上面定义的8、16位数实际上都是32位的。另外C32中,堆栈都是按32位数据类型进行操作的,所以堆栈数据类型OS_STK申明为32位无符号整数;
返回列表