原创 IAR扩展关键字

2009-4-23 11:15 4087 6 6 分类: 工程师职场

IAR扩展关键字


本人只是初学C51,今天看到一段代码,貌似中断服务程序,但不知道怎么用,后来查阅了一些资料,原来和IAR的扩展关键字有关,就简单整理了一下。

#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{
......
}


        扩展关键字可以用来解决数据,函数的存放等。有了它我们就可以定义变量存放在EEPROM,FLASH空间。定义中断函数,指针等等。IAR关键字很多,这里只列举常用的。


1. 用于控制数据和指针的扩展关键字:


__eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放


__tinyflash, __flash, __farflash, __hugeflash 用于flash 存储空间, 控制数据存放,控制指针类型和存放


__ext_io, __io 用于I/O存储空间, 控制数据存放,控制指针类型和存放


__regvar 放置一个变量在工作寄存器中


2. 函数扩展关键字:


__nearfunc __farfunc 用于控制数据存放,这组关键字必须在函数声明和定义的时候指定


__interrupt. 关键字控制函数的类型。这组关键字必须在函数声明和定义的时候指定


__root. 关键字仅仅控制有定义的函数


3. 其它特别的关键字:


@ 用于变量的绝对地址定位。也可以用#pragma location 命令


#pragma vector 提供中断函数的入口地址


__root 保证没有使用的函数或者变量也能够包含在目标代码中


__no_init 禁止系统启动的时候初始化变量


asm, __asm 插入汇编代码


 


特别说明一下,IAR中定义中断函数的格式是:


#pragma vector="中断向量"


__interrupt void 中断服务程序(void)
{
//中断处理程序
}


        其中,interrupt放在一个非主函数的前面就表示这个函数是一个中断服务程序,人为的调用它是不行的(除非是自己写的软件中断)。值得注意的是中断服务程序,其函数类型必须是VOID型,传输参数也是VOID。


        中断的初始化要另外加入代码,可在主程序内加入。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /3 下一条