新闻中心

EEPW首页>嵌入式系统>设计应用> 【IAR学习】学习笔记

【IAR学习】学习笔记

作者: 时间:2016-11-25 来源:网络 收藏
1、怎么生成.map文件:


本文引用地址://m.amcfsurvey.com/article/201611/321232.htm

4、IAR编译器默认支持的指针变量最大为0xFFFF,如果超过0XFFFF,则需要再OPTION内进行设置。Project-->Option-->General-->Target-->Data model选择Large。

原文有图片,请到原文看:http://www.52solution.com/bbs/redirect.php?tid=1128&goto=lastpost
IAR学习笔记(摘抄)
IAR for AVR 学习笔记(1)--数据类型

数据类型(编译器支持 ISO/ANSI C 基本数据类型和一些附加数据类型)

1.1.整型数据

bool 数据类型在C++语言里是默认支持的。如果你在C代码的头文件里包含stdbool.h, bool数据类型也可以使用在C语言里。也可以使用布尔值 false和 true。

1.2.浮点数据类型:

1.3.指针类型:指针有数据指针和函数指针。

1、数据指针:

数据指针的大小为8位,16位,24位。定义为:在整型数据类型后加”*”符号。
例如:char * p;
整型数据没有24位,具体定义指针见后面扩展关键字章节。

2、函数指针:函数指针的大小为16位,24位。
指针定义:在函数类型后加”*”符号

IAR for AVR 学习笔记(2)--扩展关键字

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

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

__eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放
__tinyflash, __flash, __farflash, __hugeflash 用于flash 存储空间, 控制数据存放,控制指针类型和存放:
__ext_io, __io 用于I/O存储空间, 控制数据存放,控制指针类型和存放
__regvar 放置一个变量在工作寄存器中

2.2.函数扩展关键字:。

__nearfunc __farfunc 用于控制数据存放,这组关键字必须在函数声明和定义的时候指定:
__interrupt. 关键字控制函数的类型。这组关键字必须在函数声明和定义的时候指定
__root. 关键字仅仅控制有定义的函数:

2.3.其它特别的关键字:

@ 用于变量的绝对地址定位。也可以用#pragma location 命令
#pragma vector 提供中断函数的入口地址。
__root 保证没有使用的函数或者变量也能够包含在目标代码中
__no_init 禁止系统启动的时候初始化变量.
asm, __asm 插入汇编代码

IAR for AVR 学习笔记(3)--位操作

3.1.在c语言里对位的操作如一般如下:

PORTB|=(1<<2);//置PORTB的第2位=1
PORTB&=~(1<<2);//置PORTB的第2位=0
PORTB^|=(1<<2);//取反PORTB的第2位
While(PORTB&(1<<2));//判断1
While(!(PORTB&(1<<2)));//判断为0

3.2.IAR编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作方法:

PORTB_ Bit2=1; //置PORTB的第2位=1
PORTB_ Bit2=0; //置PORTB的第2位=0
PORTB_ Bit2=~ PORTB_ Bit2;//取反PORTB的第2位
While(PORTB_ Bit2);或者while(PORTB_Bit2==1);//判断1
while(PORTB_ Bit2==0);//判断0
PORTC_Bit4=PORTB_Bit2;//把PORTB的第2位传送到PORTC的第4位

3.3.位变量定义:

由于iar使用了扩展语言,它对位域的支持变为最小为char类型,我们可以很方便地用来定义位变量。

采用结构体来定义位变量:

struct
{
unsigned char bit0:1;
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
unsigned char bit4:1;
unsigned char bit5:1;
unsigned char bit6:1;
unsigned char bit7:1;
}t;

然后就可以用以下位变量了。

t.bit0=1;
t.bit0=~t.bit0;

但是采用以上结构体做出来的位变量只可以访问t的位,不能够直接访问变量t,和标准的IAR位操作也不一样。采用联合体来定义效果更佳。

#i nclude
union
{
unsigned char t;
struct
{unsigned char t_bit0:1,
t_bit1:1,
t_bit2:1,
t_bit3:1,
t_bit4:1,
t_bit5:1,
t_bit6:1,
t_bit7:1;
};
};
void main(void)
{
t_bit0=1;//访问变量t的位
t_bit0=~t_bit0;
PORTB=t;//直接访问变量t
}

位变量也可以直接定义在工作寄存器里。

3.4 bool 数据类型在C++语言里是默认支持的。


上一页 1 2 3 下一页

关键词:IAR学习学习笔

评论


技术专区

关闭