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