IAR for AVR 学习笔记

更新时间:2024-01-17 18:28:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

IAR FOR AVR 学习笔记

在AVR编程一直是C,从ICC->GCC->IAR IAR是一个唯一自己选择的.ICC由于入门容易所以选择了开始,GCC因为不要钱,所以后来就用了它.随着对GCC的不断认识,缺点不断显露,开始对IAR产生了兴趣.

IAR在51,AVR,ARM的C上都是非常优秀的,它针对不同的单片机都有不同的C版本.唯一一点遗憾的是IAR的价格是个人和小公司难以承受的.当然网上有很多破解,现在的最新版4.20A也有了破解.

IAR FOR AVR相关信息:

破解方法:ID号注意一定要大写,不然注册将会失败 ,另外并不是每个号都是能用的了,要多试几次.如果注册成功后,编译就会通过.不然就报\没有可的证书\错误. 注意点:

如何输出HEX文件?

在配置文件后面加入以下代码,便可输出HEX文件,A90文件与HEX文件一样,SLISP都能识别.

// Output File

-Ointel-extended,(XDATA)=.eep //产生eeprom文件 -Ointel-extended,(CODE)=.A90 //产生烧写文件 -Ointel-extended,(CODE)=.hex //产生烧写文件 中断向量的使用

IAR中定义中断函数的格式是 ///////////////////////////////// #pragma vector=中断向量

__interrupt void 中断服务程序(void) {

//中断处理程序 }

/////////////////////////////////////

中断的初始化要另外加入代码,可在主程序内加入。如下是各个中断函数的定义。 //中断定义

#include

#pragma vector=INT0_vect

__interrupt void INT0_Server(void) { }

#pragma vector=INT1_vect

__interrupt void INT1_Server(void) { }

#pragma vector=TIMER2_COMP_vect

__interrupt void TIMER2_COMP_Server(void) { }

#pragma vector=TIMER2_OVF_vect

__interrupt void TIMER2_OVF_Server(void) { }

#pragma vector=TIMER1_CAPT_vect

__interrupt void TIMER1_CAPT_Server(void) { }

#pragma vector=TIMER1_COMPA_vect

__interrupt void TIMER1_COMPA_Server(void) { }

#pragma vector=TIMER1_COMPB_vect

__interrupt void TIMER1_COMPB_Server(void) { }

#pragma vector=TIMER1_OVF_vect

__interrupt void TIMER1_OVF_Server(void) { }

#pragma vector=TIMER0_OVF_vect

__interrupt void TIMER0_OVF_Server(void) { }

#pragma vector=SPI_STC_vect

__interrupt void SPI_STC_Server(void) { }

#pragma vector=USART_RXC_vect

__interrupt void USART_RXC_Server(void) { }

#pragma vector=USART_UDRE_vect

__interrupt void USART_UDRE_Server(void) { }

#pragma vector=USART_TXC_vect

__interrupt void USART_TXC_Server(void) { }

#pragma vector=ADC_vect

__interrupt void ADC_Server(void) { }

#pragma vector=EE_RDY_vect

__interrupt void EE_RDY_Server(void) { }

#pragma vector=ANA_COMP_vect

__interrupt void ANA_COMP_Server(void) { }

#pragma vector=TWI_vect

__interrupt void TWI_Server(void) { }

#pragma vector=INT2_vect

__interrupt void INT2_Server(void) { }

#pragma vector=TIMER0_COMP_vect

__interrupt void TIMER0_COMP_Server(void) { }

#pragma vector=SPM_RDY_vect

__interrupt void SPM_RDY_Server(void) { }

如何把常数字符串定义在flash 空间?

法一:unsigned char __flash temptab[] = {1,2,3,4,5}; 法二:__flash unsigned char temptab[] = {1,2,3,4,5}; 法三:#pragma type_attribute=__flash unsigned char temptab[]={1,2,3,4,5};

法四:const unsigned char temptab[]={1,2,3,4,5};

注:第三种方式用#pragma说明后,下面的定义的变量将都在FLASH空间了,用于定义一批FLASH变量,但实际上一般只能作为常量使用了.

本文来源:https://www.bwwdw.com/article/02vo.html

Top