ZigBee学习笔记 - zhiganglet的BLOG http://zhiganglet.52rd.net - 复制 - 收藏
Rcikli 发表于 2008-9-27 17:39:00

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。

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

阅读全文(861) | 评论(1)
评 论
1楼 52RD网友(游客) 发表于 2008-12-30 9:47:00
谢谢了。我到处找这个东西(不想为了这些去买99%没有用的书)。
9 1 :
昵 称: 匿名
验证码: 8556
博 主
进入zhiganglet的首页
博客名称:ZigBee学习笔记
日志总数:84
评论数量:123
访问次数:90090
建立时间:2008年3月24日
导 航
日 历
«Mar.2010»
123456
78910111213
14151617181920
21222324252627
28293031
公 告
记录成长的脚印,分享失败、成功的智慧。( 大部分日志转自网络,如有侵权,即删。)
日 志
评 论
链 接