第6章C/C++语言程序设计 ■6.1C55xC/C++语言概述 6.2C55xC/C++语言编程基础 ■6.3 C55xC/C++编译器的使用 ■6.4TMS320C55x的C代码优化 6.5C55xC和汇编语言混合编程 3
第6章 C/C++语言程序设计 3 ◼6.1 C55x C/C++语言概述 ◼6.2 C55x C/C++语言编程基础 ◼6.3 C55x C/C++编译器的使用 ◼6.4 TMS320C55x的C代码优化 ◼6.5 C55x C和汇编语言混合编程
6.1C55xC/C++语言概述 ■61.1 C/C++语言概况 6.1.2 C55xC/C++语言概况 4
6.1 C55x C/C++语言概述 ◼ 6.1.1 C/C++语言概况 ◼ 6.1.2 C55x C/C++语言概况 4
6.1.1C/C++语言概况 。汇编语言依赖于计算机硬件,程序的可读性和 可移植性比较差。一般高级语言具有很好的可 移植性,但是难以实现汇编语言的某些功能 (如对内存地址的操作、位操作等)。 。C/C++语言作为一种高级语言,既可以访问物 理地址又可以进行位操作,能直接对硬件进行 操作,适合用作DSP开发语言。 5
6.1.1 C/C++语言概况 5 ⚫ 汇编语言依赖于计算机硬件,程序的可读性和 可移植性比较差。一般高级语言具有很好的可 移植性,但是难以实现汇编语言的某些功能 (如对内存地址的操作、位操作等)。 ⚫ C/C++语言作为一种高级语言,既可以访问物 理地址又可以进行位操作,能直接对硬件进行 操作,适合用作DSP开发语言
。C/C++语言具有如下基本特点: ◆语言简洁、紧凑,使用方便、灵活 ◆运算符丰富,表达式类型多样化 ◆数据结构类型丰富 ◆具有结构化的控制语句 ◆语法限制不太严格,程序设计自由度大 ◆C/C++语言允许访问物理地址,能进行位操 作,能实现汇编语言的大部分功能,能直接对 硬件进行操作 6
⚫ C/C++语言具有如下基本特点: ◆ 语言简洁、紧凑,使用方便、灵活 ◆ 运算符丰富,表达式类型多样化 ◆ 数据结构类型丰富 ◆ 具有结构化的控制语句 ◆ 语法限制不太严格,程序设计自由度大 ◆ C/C++语言允许访问物理地址,能进行位操 作,能实现汇编语言的大部分功能,能直接对 硬件进行操作 6
6.1.2C55xC/C++语言概况 C55xC/C++编译器全面支持ANSI C/C++语言标 准,能够把按照标准ANSI C/C++规范编写的源程序 进行全面优化,编译成C55x汇编语言源程序。 C55xC/C++编译器工具拥有完整的实时运行库,所 有的库函数均符合ANSI库标准 库函数包括标准输入 C55xC/C++编译器输出文件的特性输出、串操作、动态 C55xC/C++编译器生成的汇编语言便于查 内存分配、数据转换 看,用户能看到产生自C/C++源程序的代码。 三角函数、指数函数 COFF文件允许用户在链接时定义自己的系 双曲函数等,但是不 包含信号处理函数, 统存储器配置,使用户可把代码和数据链接 因为它们涉及到目标 进特定的内存区域,提高程序性能。 系统的具体特性。 COFF文件支持源程序级的调试
6.1.2 C55x C/C++语言概况 ⚫C55x C/C++编译器全面支持ANSI C/C++语言标 准, 能够把按照标准ANSI C/C++规范编写的源程序 进行全面优化, 编译成C55x 汇编语言源程序。 ⚫C55x C/C++编译器工具拥有完整的实时运行库, 所 有的库函数均符合ANSI库标准。 ⚫C55x C/C++编译器输出文件的特性。 ◆C55x C/C++编译器生成的汇编语言便于查 看, 用户能看到产生自C/C++源程序的代码。 ◆COFF文件允许用户在链接时定义自己的系 统存储器配置, 使用户可把代码和数据链接 进特定的内存区域, 提高程序性能。 ◆COFF文件支持源程序级的调试。 7 库函数包括标准输入 输出、串操作、动态 内存分配、数据转换、 三角函数、指数函数、 双曲函数等,但是不 包含信号处理函数, 因为它们涉及到目标 系统的具体特性
第6章C/C++语言程序设计 ■6.1C55xC/C++语言概述 ■6.2C55xC/C++语言编程基础 ■6.3C55xC/C++编译器的使用 ■6.4TMS320C55x的C代码优化 6.5C55xC和汇编语言混合编程 8
第6章 C/C++语言程序设计 8 ◼6.1 C55x C/C++语言概述 ◼6.2 C55x C/C++语言编程基础 ◼6.3 C55x C/C++编译器的使用 ◼6.4 TMS320C55x的C代码优化 ◼6.5 C55x C和汇编语言混合编程
6.2C55xC/C++语言编程基础 ■ 6.2.1数据类型 ■6.2.2关键字 ■6.2.3寄存器变量和参数 ■6.2.4asm指令 ■6.2.5 Pragma指令 ■6.2.6标准ANSIC语言模式的改变(-pk,-pr和-ps选项) 6.2.7存储器模式 ■6.2.8存储器分配 ■6.2.9中断处理 ■6.2.10运行时间支持算法及转换程序 ■6.2.11系统初始化 10
◼ 6.2.1 数据类型 ◼ 6.2.2 关键字 ◼ 6.2.3 寄存器变量和参数 ◼ 6.2.4 asm指令 ◼ 6.2.5 Pragma指令 ◼ 6.2.6标准ANSIC语言模式的改变(-pk,-pr和-ps选项) ◼ 6.2.7 存储器模式 ◼ 6.2.8 存储器分配 ◼ 6.2.9 中断处理 ◼ 6.2.10 运行时间支持算法及转换程序 ◼ 6.2.11 系统初始化 6.2 C55x C/C++语言编程基础 10
6.2.1数据类型 。C55xC语言支持的数据类型: 类型 长度(位) 内容 最小值最大值 r带符号)字符型(signed)char 16 ASCⅡ码 -32768 32767 无符号字符型unsigned char 16 ASCⅡ码 0 65535 带符号)短整型(signed)short 16 2补码 -32768 32767 无符号短整型unsigned short 16 二进制数 0 65535 r带符号)整型(signed)int 16 2补码 -32768 32767 无符号整型unsigned int 16 二进制数 0 65535 带符号)长整型(signed)long 32 2补码 -2147 2147 483648 483647 无符号长整型unsigned long 二进制数 4294 32 0 967295 11
6.2.1 数据类型 ⚫ C55x C语言支持的数据类型: 类型 长度(位) 内容 最小值 最大值 (带符号)字符型(signed) char 16 ASCII码 -32 768 32 767 无符号字符型unsigned char 16 ASCII码 0 65 535 (带符号)短整型(signed) short 16 2补码 -32 768 32 767 无符号短整型unsigned short 16 二进制数 0 65 535 (带符号)整型(signed) int 16 2补码 -32 768 32 767 无符号整型unsigned int 16 二进制数 0 65 535 (带符号)长整型(signed) long 32 2补码 -2 147 483 648 2 147 483 647 无符号长整型unsigned long 32 二进制数 0 4 294 967 295 11
C55xC语言支持的数据类型: 类型 长度(位 内容 最小值 最大值 带符号特长整型long long 40 2补码 -549755 549755 813888 813888 无符号特长整型 40 二进制数 1099511 0 unsigned long long 627775 枚举enum 16 2补码 -32768 32767 浮点float 32 32位EEE 1.18E-38 3.40E+38 双精度double 32 32位EEE 1.18E-38 3.40E+38 长双精度long double 32 32位EEE 1.18E-38 3.40E+38 数据指针(小存储器模式) 16 二进制数 0 0xFFFF 数据指针大存储器模式) 23 二进制数 0 0x7FFFFF 程序指针pointers(function) 24 二进制数 0 0xFFFFFF 12
类型 长度(位) 内容 最小值 最大值 带符号特长整型long long 40 2补码 −549 755 813 888 549 755 813 888 无符号特长整型 unsigned long long 40 二进制数 0 1 099 511 627 775 枚举enum 16 2补码 -32 768 32 767 浮点float 32 32位IEEE 1.18E-38 3.40E+38 双精度 double 32 32位IEEE 1.18E-38 3.40E+38 长双精度long double 32 32位IEEE 1.18E-38 3.40E+38 数据指针(小存储器模式) 16 二进制数 0 0xFFFF 数据指针(大存储器模式) 23 二进制数 0 0x7FFFFF 程序指针pointers (function) 24 二进制数 0 0xFFFFFF 12 ⚫ C55x C语言支持的数据类型:
6.2.1数据类型 定义各种数据类型时应注意如下规则: ◆避免设int和long为相同大小; ◆定点算法(特别乘法)尽量用int类型。用Iong类型作乘 法操作数会调用运行时间库(run-time library)程序; ◆用int或unsigned int类型而非long类型来循环计数; ◆最好使用it类型作循环指数变量和其它位数不太重要 时的整型变量,因为it是对目标系统操作最高效的整 数类型而不管芯片结构如何。 ◆避免设char为8位或long为64位, 13
⚫定义各种数据类型时应注意如下规则: ◆避免设int和long为相同大小; ◆定点算法(特别乘法)尽量用int类型。用long类型作乘 法操作数会调用运行时间库(run-time library)程序; ◆用int或unsigned int类型而非long类型来循环计数; ◆最好使用int类型作循环指数变量和其它位数不太重要 时的整型变量, 因为int是对目标系统操作最高效的整 数类型而不管芯片结构如何。 ◆避免设char为8位或long为64位; 13 6.2.1 数据类型