EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2008/9/26 11:08:33

标签: IAR  扩展关键字  中断服务程序  

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。

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

系统分类: 通信网络   |   用户分类: C51   |   来源: 整理   |   【推荐给朋友】   |   【添加到收藏夹】

2

阅读(1227)  |  评论(1)  |  收藏(3)  |  举报  

投一票您将和博主都有获奖机会!

最新评论