理论教育 关键字介绍:C28xDSP编译器的重要术语解析

关键字介绍:C28xDSP编译器的重要术语解析

时间:2023-06-15 理论教育 版权反馈
【摘要】:C28x DSP的C/C++编译器,支持标准的const、register、volatile等关键字,还扩展了cregister、interrupt、far、near等关键字。增加了关键字volatile后,则ctrl指针所指向地址不会优化成单次读,可以读取外部事件引起的单元内容的变化。interrupt关键字告诉编译器,以生成必需的寄存器保护和程序返回机制的代码。加上far关键字限定符的指针大小为22位,可以寻址4MW地址空间。

关键字介绍:C28xDSP编译器的重要术语解析

C28x DSP的C/C++编译器,支持标准的const、register、volatile等关键字,还扩展了cregister、interrupt、far、near等关键字。

1.关键字const

该关键字可以优化存储器的分配。加const到任何变量的定义可以确保其内的值不变。

2.关键字volatile

该关键字所定义的变量是可变的,可以被其他硬件修改,而不仅仅只能由C程序修改。优化器会尽量减少存储器的访问,所以有时必须禁止优化,特别是循环控制变量。例如

volatile unsigned int ∗ctrl;

while (∗ctrl!=0xff);

如果没有关键字volatile,ctrl指针所指向地址单元的内容在循环过程中不会发生变化,循环被优化成单次读,造成死循环。增加了关键字volatile后,则ctrl指针所指向地址不会优化成单次读,可以读取外部事件引起的单元内容的变化。

3.关键字cregster

该扩展关键字允许高级语言读/写控制寄存器。在C28x的C语言中,cregister仅限于中断使能寄存器IER和中断标志寄存器IFR,程序中应有如下声明:

extern cregister volatile unsigned int IER;

extern cregister volatile unsigned int IFR;

可以用运算符|(位或)和&(位与)进行操作,例如(www.daowen.com)

IFR|=0x100; //将IFR的第8位INT9设置为1,用位或运算

IFR&=0x100; //将IFR的第8位保持不变,其他位清零,用位与运算

4.关键字interrupt

该扩展关键字用来说明定义的函数是一个中断函数。中断函数被定义成返回void类型,而且无参数调用。interrupt关键字告诉编译器,以生成必需的寄存器保护和程序返回机制的代码。例如

interrupt void int_handler()

{

unsigned int flags;

}

有一个特殊的名为c_int00的中断程序(汇编语言中名称为_c_int00),用于DSP复位中断的处理。它可完成系统初始化并调用主函数main(),是用户C程序的入口。

5.关键字far

C/C++编译器的默认寻址空间是64KW。所有指针的默认大小为16位,支持的寻址空间达64KW。加上far关键字限定符的指针大小为22位,可以寻址4MW地址空间。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈