6.2.1数据类型 定义各种数据类型时应注意如下规则: ◆避免设int和long为相同大小; ◆定点算法(特别乘法)尽量用int类型。用Iong类型作乘 法操作数会调用运行时间库(run-time library)程序; ◆用int或unsigned int类型而非long类型来循环计数; ◆避免设char为8位或long为64位; ◆最好使用it类型作循环指数变量和其它位数不太重要 时的整型变量,因为it是对目标系统操作最高效的整 数类型而不管芯片结构如何。 13
⚫定义各种数据类型时应注意如下规则: ◆避免设int和long为相同大小; ◆定点算法(特别乘法)尽量用int类型。用long类型作乘 法操作数会调用运行时间库(run-time library)程序; ◆用int或unsigned int类型而非long类型来循环计数; ◆避免设char为8位或long为64位; ◆最好使用int类型作循环指数变量和其它位数不太重要 时的整型变量, 因为int是对目标系统操作最高效的整 数类型而不管芯片结构如何。 13 6.2.1 数据类型
6.2.2关键字 1.const ●C55xC编译器支持标准C语言的const:关键字。 ·将这个关键字使用到对任意变量或数组的定义上可以 确保它们的值不改变。 ●若定义一个对象为const,那么const段就会为该对象 分配存储空间。const数据存储分配有两个例外: ◆若定义对象时又加volatile(例volatile const int), volatile使分配到RAM(程序不改变const volatilel的 对象,但是程序外的东西可以改变之);7使const就 ◆若对象是auto变量(作用域为函数内);∫ 像没用一样. ●const关键字可定义大常数表并将之分配到系统ROM中。 例:const int digits[1={0,1,2,345,6,78,9; 14
6.2.2 关键字 1. const ⚫C55x C编译器支持标准C语言的const关键字。 ⚫将这个关键字使用到对任意变量或数组的定义上可以 确保它们的值不改变。 ⚫若定义一个对象为const, 那么const段就会为该对象 分配存储空间。 ◆若定义对象时又加volatile (例 volatile const int x), volatile使分配到RAM(程序不改变const volatile的 对象, 但是程序外的东西可以改变之) ; ◆若对象是auto变量(作用域为函数内) ; ⚫const关键字可定义大常数表并将之分配到系统ROM中。 14 使const就 像没用一样. 例: const int digits [] = {0,1,2,3,4,5,6,7,8,9}; const数据存储分配有两个例外:
2.ioport 。C55xC编译器对标准C语言进行了扩展,增加了ioport 关键字来支持工/O寻址模式。 ioport类型限定词可和标准类型(包括数组、结构体、 共用体和枚举)一起使用。 ioport int k; 当与数组一起用时,opot限制的是数组单元而非数组 类型本身。 ioport int x[5]; o可与const:或volatile一起使用。 ●ioport可单独使用,此时int限定词就是默认的。 ioport类型限定词只能用于全局或静态变量。局部变量 不能用ioport限制,除非变量是个指针。 15
2. ioport ⚫C55x C编译器对标准C语言进行了扩展, 增加了ioport 关键字来支持I/O寻址模式。 ⚫ioport类型限定词可和标准类型(包括数组、结构体、 共用体和枚举)一起使用。 ⚫当与数组一起用时, ioport限制的是数组单元而非数组 类型本身。 ⚫可与const或volatile一起使用。 ⚫ioport可单独使用, 此时int限定词就是默认的。 ⚫ioport类型限定词只能用于全局或静态变量。局部变量 不能用ioport限制, 除非变量是个指针。 15 ioport int k ; ioport int x[5] ;
例6-1,ioport关键字的使用。 ioport int k :/*正确,可限定全局变量*/ void foo(void) { ioport int i;/*错误,不能限定局部变量*/ ioport int*j,/*正确,可限定指针*/ } 3.interrupt C55xC编译器对标准C语言进行了扩展,增加了 interrupt关键字,来指定某个函数为中断函数。 interrupt void TIME_ISR() unsigned int flags; } 16
3. interrupt ioport int k ; /*正确,可限定全局变量* / void foo(void) { ioport int i ; /*错误,不能限定局部变量* / ioport int *j ; /*正确, 可限定指针* / } 16 ⚫C55x C编译器对标准C语言进行了扩展, 增加了 interrupt关键字, 来指定某个函数为中断函数。 例6-1,ioport关键字的使用。 interrupt void TIME_ISR() {unsigned int flags; ... }
4.onchip Onchip关键字声明一个特殊指针,该指针所指向数据 可用作双MAC指令的操作数。在链接时这些数据必须 被链接到DSP片内存储器,否则会导致经BB总线而引 用外部扩展存储器而发生错误。 例, onchip int x[100]; /*数组声明*/ onchip int *p /*指针声明*/ 17
4. onchip ⚫Onchip关键字声明一个特殊指针, 该指针所指向数据 可用作双MAC指令的操作数。在链接时这些数据必须 被链接到DSP片内存储器, 否则会导致经BB总线而引 用外部扩展存储器而发生错误。 17 例, onchip int x[100] ; /* 数组声明 */ onchip int *p ; /* 指针声明 */