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地址空间。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。