C24x DSP的C编译器,支持标准的const、register、volatile等关键字,还扩展了inte r⁃rupt、io port(I/O端口)等关键字。
1.关键字const
该关键字可以优化存储器的分配。加关键字const到任何变量的定义中可以确保其内的值不变。
2.关键字volatile
该关键字所定义的变量是可变的,可以被其他硬件修改,而不仅仅只能由C程序修改。优化器会尽量减少存储器的访问,所以有时必须禁止优化,特别是循环控制变量。例如:
如果没有关键字volatile,ctrl指针所指向地址单元的内容在循环过程中不会发生变化,循环被编译优化成单次读,造成死循环。增加了关键字volatile后,则ctrl指针所指向的地址不会优化成单次读,可以读取外部事件引起的单元内容的变化。
3.关键字ioport
该关键字允许访问DSP的I/O空间,其一般形式为:
其中,ioport指示这是定义一个端口变量的关键字。type(类型)必须是char(字符型)、short(短整型)、int(整型)或对应的无符号类型。porth exnum为定义的端口变量,其格式必须是“port”后面跟一个十六进制数,如“port0A”是定义访问空间地址0Ah的变量。(www.xing528.com)
例如:下面的程序段声明了一个无符号I/O端口变量10h,将a写到端口变量10h,再从端口10h读入b。
再例如:访问地址映射到I/O空间0xFFFF的等待状态控制寄存器WSGR。在头文件中有如下定义:
此时访问等待状态控制寄存器,既可以用portFFFF,也可以用WSGR,比如:
【例4-6】DSP扩展外部I/O接口,4个拨码开关连接的输入端口的I/O地址为0xC001,4个LED指示灯的连接的输出端口I/O地址为0xC000,编程将4个开关的状态反应到4个指示灯。
4.关键字interrupt
该扩展关键字用来说明定义的函数是一个中断函数。中断函数被定义成返回void类型,而且无参数调用。inte rrupt关键字告诉编译器,以生成必需的寄存器保护和程序返回机制的代码。例如:
有一个特殊的名为c_int0的中断程序(汇编语言中名称为_c_int0),用于DSP复位中断的处理。它完成系统初始化并调用主函数main(),是用户C程序的入口。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。