μC/OS II针对TMS320C32的移植 01
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
μ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位无符号整数; |
|
|
|
|
|