IAR FOR AVR 生成eep文件

合集下载

IAR生成库文件操作说明

IAR生成库文件操作说明

IAR生成用户库文件的方法说明
1、首先新建一个项目,命名为LIBTEST
2、在项目名处右键选择Option,进行配置项目,如图将输出文件修改为Library
3.选择Library Configuration选项,将库类型选择为CLIB,如下图
4、点击OK保存,然后新建一个C文件,命名为LIBTEST.c。

并添加至项目中去。

5、接下来便可以将编辑添加需要生成库的函数。

此处添加1个将16进制转换成ASIIC码的函数,函数内容如下:
void HexToBCD(unsigned char *HexData, unsigned char
*BCDData, unsigned char Length)
{
unsigned char i;
unsigned char m;
for(i=0; i<Length; i++)
{
m = (*(HexData+i) >> 4) * 10;//得出10位上的值
*(BCDData+i) = (*(HexData+i) & 0x0f) + m;
}
}编译并链接,成功后输出如下图的编译信息。

由信息可知已经生成的库文件名为LIBTEST.r43 。

路径为:..\Debug\Exe\LIBTEST.r43
再为此库文件编写一个头文件,对里面的函数进行声名
6、新建一个正常的工程项目HexToASCII。

如下图所示,添加Main.c程序文件及上面生成的库文件,(之前的HexToASCII.c文件则可以删除掉了)并编译
函数了。

下图为仿真调试截图。

IARforAVR编程软件前期设置

IARforAVR编程软件前期设置

1、首先创建一个工作区以及创建一个新工程项目1)Project ----Create New Project2)在创建新工程项目界面,在Tool chain中选择AVR;Project template中选择Empty Project,创建一个空的工程项目,单机OK;弹出另存为对话框:将文件名改为自己需要的*****.ewp,工程项目保存在自己建好的文件夹下;这时工程项目就出现在左侧的工作区窗口中,系统产生两个创建配置:Debug(调试)和Release(发布这里选择Debug。

3).在向工程项目添加任何文件时(如输入的C源程序),首先应该保存工作区,选择File---Save Workspace后,出现Save Workspace As 对话框中,选择工作区存放的路径(存放在刚才新建的文件夹中)并输入工作区的名称(这里我们取名.eww),单击保存按钮;2.设置IAREW工程项目选项1)在工作区窗口中选中first-Debug ,然后选择主菜单栏中的Project----Option,弹出Option for node”first”的界面。

在Category栏中,选择General Option ;Target 选项配置如下:Library Options选项配置如下:System选项设置如下:在Category栏中,选择C/C++ Compiler ;Optimizations选项设置如下:在Category栏中,选择Linker ;Output选项设置如图所示的参数;在Category栏中,选择Debugger ;(选择下图所示的参数,该设置是在IAREW中使用软件仿真Simulator,当进行硬件调试时,可在IAREW中选择JTAGICE等JTAG仿真器。

)Setup选项设置如下:Plugins设置如下图:设置完后,点击OK完成工程项目的选项设置。

原创--IAR for AVR入门学习笔记

原创--IAR for AVR入门学习笔记

原创--IAR for A VR入门学习笔记A VR单片机的编译软件五花八门,用宋丹丹的话就是:那是相当的多汇编语言的开发平台就不说了(俺不大会,呵呵,说不出什么道道来)。

简单列举几个高级语言的开发平台:WINA VR(GNU GCC A VR);ICC A VRCodeVison A VRIAR for A VRBASIC A VRFastA VRBASCOM其中用得最多的是完全免费的WINA VR。

我一直都是用的这个。

最专业,最好的,对AVR支持最全面的是IAR。

但同时IAR也是最贵的一款开发软件(听说升级也要收费,真黑啊)。

呵呵,不过不怕,我们可以破解之。

下面就详细介绍如何破解IAR。

这里安装破解的是5.11B版本的。

全名IAREmbeddedWorkbenchforAtmelAVR,v.5.11B1、先到网上下载5.11B文件,大概133M。

解压后,有如下文件:a1.jpg (29.87 KB)2009-12-20 00:282、到网上下载破解文件解压后生成文件Keygen包,将它复制到C盘根目录下,如下图a2.jpg (63.75 KB)2009-12-20 00:283、打开文件包keygen,双击文件IARID.exe,出现本电脑ID号,如图,记下来a3.jpg (42.68 KB)2009-12-20 00:284、从电脑的“程序---运行”输入“CMD”回车,按照下图操作,得到sn.txt文件;注意输入计算机ID号的时候,所有字符全部大写,包括"0X"中的"X"也要大写,a4.jpg (161.06 KB)2009-12-20 00:285、然后运行安装文件中的autorun.exe,开始安装IAR,当出现要求输入注册号的时候,请用记事本打开刚刚生成的sn.txt 文件,找到"EW A VR" version "2.25_WIN"对应的号码段,先输入序列号,NEXT后,再复制key:后面的一串字符,注意只复制#之前的那一部分,包括#也要复制。

IAR for AVR 学习笔记

IAR for AVR 学习笔记

IAR for AVR 学习笔记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}; 法二:__flashunsigned 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变量,但实际上一般只能作为常量使用了.感谢您的阅读,祝您生活愉快。

IAR_AVR_C编译器的使用A

IAR_AVR_C编译器的使用A

3
Functions............................................................................................................. 14
3.1.1 用于函数的扩展关键字(EXTENDED KEYWORDS FOR FUNCTIONS).......... 14
有意见或建议,可 E-mail 至:timini@
I
3.3.1 中断函数(INTERRUPT FUNCTIONS)................................................................. 15 3.3.2 元函数(MONITOR FUNCTIONS).........................................................................16 3.3.3 C++与特殊函数类型(C++ AND SPECIAL FUNCTION TYPES).........................18 3.3.4 函数命令(FUNCTION DIRECTIVES).................................................................. 18
2
Data storage........................................................................................................... 6
2.2.1 数据存储(STORING DATA).................................................................................... 6 2.1.2 用于数据的扩展关键字(EXTENDED KEYWORDS FOR DATA)........................6

IAR编译器配置(AVR)

IAR编译器配置(AVR)

IAR编译器配置(AVR)IAR编译器配置(AVR)⼀、EEPROM 区域数据存储:__eeprom unsigned char a;//定义⼀个变量存放在EEPROM空间__eeprom unsigned char a @ 0x8;//定义⼀个变量存放在EEPROM空间0X08单元__eeprom unsigned char p[] @ 0x22//定义⼀个数组存放在EEPROM空间,开始地址为0X22单元__eeprom unsigned char a @ 0x08=9;//定义⼀个常数存放在EEPROM空间0X08单元__eeprom unsigned char p[] @0x22={1,2,3,4,5,6,7,8};EEPROM操作宏取函数:在comp_a90.h intrinsics.h头⽂件⾥有详细说明。

⾃动⽣成.eep⽂件置:在Project->Options->linker->config>的linker command line中观察该Project使⽤了哪个XCL⽂件。

本⽂使⽤M8编译,使⽤⽂件是”TOOLKIT_DIR$\src\template\cfgm8.xcl”-Ointel-extended,(CODE)=.hex-Ointel-extended,(XDATA)=.eep⼆、FLASH 区域数据存储:⽤关键字 __flash 控制来存放, __ flash 关键字写在数据类型前后效果⼀样__flash unsigned char a @ 0x8;//定义变量存放在flash 空间0X08单元__flashunsigned char p[] @ 0x22//定义数组存放在flash 空间,开始地址为0X22单元__flash unsigned char a @ 0x08=9;//定义常数存放在flash 空间0X08单元__flash unsigned char p[] @ 0x22={1,2,3,4,5,6,7,8};unsigned int __flash * p;//定义个指向flash 空间地址的指针,16位。

IARAVR怎么生成HEX文件啊

IARAVR怎么生成HEX文件啊

IAR A VR怎么生成HEX文件啊IAR同时输出多个文件的说明,在IAR225E(30天限时版)中通过。

操作步骤:1、在Project->Options->XLINK->Include中观察该Project使用了哪个XCL文件。

2、在该XLC文件中加入以下两行:-Ointel-extended,(CODE)=.hex-Ointel-extended,(XDA TA)=.eep3、在Project->Options->XLINK->Output->Format->Other中选择UBROF6格式输出。

以下为MAP文件的部分内容,生成了与Project名称相同的三个文件:test.dbg:兼容于A VR STUDIO的调试文件(也可以任意指定文件名)test.hex:INTEL HEX格式的程序代码文件test.eep:INTEL HEX格式的EEPROM初始化数据文件。

############################################################################## ### ## IAR Universal Linker V4.53F/WIN ## ## Link time = 20/Jan/2001 14:49:35 ## Target CPU = A90 ## List file = "D:\IAR Systems\user_A vr\Debug\List\test.map" ## Output file 1 = "D:\IAR Systems\user_A vr\Debug\Exe\test.dbg" ## Format: ubrof6 ## UBROF version 6.0.0 ## Output file 2 = "D:\IAR Systems\user_A vr\Debug\Exe\test.hex" ## Format: intel-extended, variant: -y(CODE) ## Output file 3 = "D:\IAR Systems\user_A vr\Debug\Exe\test.eep" ## Format: intel-extended, variant: -y(XDA TA) #注意:1、可以修改IAR Embedded Workbench安装位置中所有cfg?s.xcl cfg?l.xcl cfg?t.xcl文件,这样就不需每次修改了,对Project->Options->XLINK->Output->Format中其余两个选项没有影响。

ICCavr编译生成文件

ICCavr编译生成文件

ICC avr 编译成功后会生成很多文件,对我们普通用户以及新手,有用的只有一个文件,*.cof 调试用,*.hex 机器码。

首先看图:
1. main._c main.c修改并保存时,程序自动备份的文件,如果确认main.c没有问题了,可以删除。

2. main.c 主程序文件
3. main.cof COFF 格式输出文件用于在ATMEL 的AvrStudio 环境下进行程序调试<记住这个文
件>
4. main.dbg ImageCraft 调试命令文件
5. main.dp2
6. main.hex INTEL HEX 格式文件其中包含了程序的机器代码
7. main.lis
8. main.lk
9. main.lst 列表文件在这个文件中列举出了目标代码对应的最终地址
10. main.mak
11. main.mp 内存映象文件它包含了您程序中有关符号及其所占内存大小的信息
12. main.o 由汇编文件汇编产生的目标文件多个目标文件可以链接成一个可执行文件
13. main.prj 工程文件
14. main.s 表示是汇编语言源文件
15. MAIN.SRC 工程配置记录
16. main_cof.aps 使用AvrStudio调试后保存的调试环境相关信息。

IAR(For AVR.MSP)与Proteus联合单步调试

IAR(For AVR.MSP)与Proteus联合单步调试

一、IAR for AVR_Proteus—联合调制1.首先是由于IAR for A VR可以产生很多类型的文件。

但是在我们所遇到的情况下,只有如下一种设置可以使生成的文件在PROTEUS上得到完美的仿真效果。

下图为详细的设置方法:两点注意:1)这里一定要注意了:输出文件的默认后缀名是hex,请自己修改为.d902)生成文件的格式转换,强制ubrof82.仿真这个不用说就该知道什么意思了,跟以前的Keil和Proteus联合调制差不多的了,一步步走的~哈哈二、IAR for MSP430_Proteus—联合调制大体了解了MSP430并且安装好必要软件IAR Embedded Workbench for MSP430和proteus后我们就可以直观的看一下了。

下面将给出一个从工程的创建到仿真实现的过程演示。

1.打开IAR,选择Project 选择Create New Project出现如下图示选择OK,然后会提示所要创建的新工程的名称以及将要保存的地址。

在此我们可以将工程保存在新创建的一个命名为Diode flashing文件夹中 工程名字也为Diode flashing。

然后File->New->File创建文件,点击保存,提示输入文件名,我们在此依旧为Diode flashing然后我们输入本次要运行的程序,使与P3口得P3.0引脚连接的发光二极管闪烁。

在左边Workspace中右击工程名称,选Add,添加刚刚编写的文档到工程中。

在生成可执行代码前,我们需要对工程做些设置。

右击工程选择Options2.在Device中选择要使用的MSP430的型号,然后点Linker选项3.在此需要修改两个参数。

在Output file 下选中Override default,并将文件后缀改为.d90。

在Format选项中选中other,并将其下的Output选为intel-extended.设置完后结果如下。

iar avr说明

iar avr说明

IAR A VR使用说明总结(以IAR for A VR 5.11B A VR M16为例)iar 是目前编译效率较高的编译器,支持软件仿真和实事仿真,包括简易版M16版jtag ice 。

软件可以从iar官方网站下载使用,demo version 30 days 全功能使用,目前所谓破解版一般是这个版本的破解。

废话不讲了,以m16为例,解释IAR的使用,软件版本5.11b, 30天限制版,希望和大家共同学习IAR FOR A VR 。

IAR A VR使用说明总结(以IAR for A VR 5.11B A VR M16为例)1.新建一个开发环境的1.1单击[IAR Embedded Workbench]图标,选择[Project] / [Create New Project ...], 参考下图1.2设置[Tool chain]选择[A VR];设置[Project templates]选择[Emply project];然后单击[OK],参考下图1.3保存设置,选择保存路径和文件名, 参考如下1.4工具的基本设置,单击[Tool] / [Options], 参考如下1.5单击[Configure], 参考如下1.6工程设置,单击[Project] / [Options],1.7[General Options]选项1.7.1[target]选项卡,[Processor configuation]选择目标mcu, 参考如下1.7.2[Output]选项卡,输出文件设置,选择[Executable], 参考如下1.7.3[Library Configuration]选项卡,[Library]设置,选择[CLIB], 参考如下1.8[C/C++ Compiler]选项1.8.1[Language]选项卡参考如下1.8.2[Optimizations]选项卡参考如下1.8.3[Output]选项卡参考如下1.8.4[List]选项卡参考如下1.9[Linker] 选项卡控制输出文件格式1.10[Debugger] 选项卡, 设置仿真工具,[Simulator]软件仿真,[JTAGEIC]JTAG仿真,参考如下1.11[JTAGICE] 选项卡设置JTAG选项1.12单击[OK],完成设置1.13保存工程设置单击[File] / [save workspace], 选择保存路径和文件名1.14添加文件到工程单击[Project] / [add files], 选择文件,然后单击[OK]2生成可烧写文件(*.hex 和*.eep ,以IAR for A VR 5.11B/W32 (5.11.2.5) 和M16为例)2.1配置[Linker] 选项卡, 在[Format]选择[other],[Output format]选择[ubrof 6 (forced) ],参考下图2.2查看*.xcl文件2.2.1在可以[config]选项卡中看到,如下图红色方框中所示为”cfgm16.xcl’(不同mcu对应的*.xcl文件不同), 默认路径为C:\Program Files\IAR Systems\Embedded Workbench5.0 Evaluation\avr\src\template2.2.2修改次文件, 在“*.xcl”文件末,添加下面两行代码-Ointel-extended,(CODE)=.hex-Ointel-extended,(XDATA)=.eep2.2.3数据定义在eeprom中,使用关键词”__eeprom”, 但是需要增加前前缀”__root”, 使用方法, 参考如下如下__root __eeprom unsigned char table[]={0,1,2,2,3,4};__root __eeprom unsigned char tablex[] @0x10 ={10,11,12,12,13,14}; //绝对地址定义2.定义数到flash空间,使用关键词”__flash” , 使用方法, 参考如下如下__flash unsigned char tablex []={1,2,2,3,4,5,6}__flash unsigned char tablex []@0x10={1,2,2,3,4,5,6} //绝对地址定义3.关键词”__root”功能保证没有使用的函数和变量也能够包含在目标代码中,定义放在flash 空间的数据,在程序编译时会自动生成代码嵌入到flash代码中,对于程序没有使用的也要求编译的数据,必须加入关键词” __root”,编译器才会输出目标代码。

AVR单片机下载手册_V1.0

AVR单片机下载手册_V1.0

AVR单片机下载手册
本手册用于AVR单片机的下载,下载模式为ISP,目标器件为ATmega 16A,开发环境为IAR for AVR(版本号5401),下载环境为AVR Studio(版本号为4.18)。

(1)打开IAR for AVR工作界面
(2)右键点击工程,选中Rebuild All,编译所有的文件:
(3)编译完成后,build信息框中不提示Error和Warnbing:
(4)打开AVR Studio工作界面
(5)单击工具栏中的CON或者AVR按钮
(6)单击后出现下载仿真器界面
(7)选择对应的下载器和电脑连接端口后,点击Connect出现,下载界面。

(8)指定HEX文件(代码)和EEP文件(数据),点击Program进行下载注:每次下载HEX文件后,必须同时下载EEP文件,不能只下载一个!
HEX文件下载成功!
EEP文件下载成功!。

使用IAR-AVR心得

使用IAR-AVR心得

1.IAR-AVR不让用位定义?在OPTIONS/sys/勾选EN_BIT。

2.不能C语言和汇编同步仿真?在Linker -> Output -> Format中选择Debug information for C-SPY,然后勾选其下的两个选项即可。

3. IAR头文件修改使用?IAR的iomacro.h文件里定义了I/O寄存器。

我们就可以进行位书写。

/user1/1306/archives/2007/43702.html4在c语言里对位的操作如一般如下:PORTB|=(1<<2);//置PORTB的第2位=1PORTB&=~(1<<2);//置PORTB的第2位=0PORTB^|=(1<<2);//取反PORTB的第2位While(PORTB&(1<<2));//判断1While(!(PORTB&(1<<2)));//判断为0IAR编译器对位的支持更强大,除了上面的方法外还有以下更简单的操作方法:PORTB_ Bit2=1; //置PORTB的第2位=1PORTB_ Bit2=0; //置PORTB的第2位=0PORTB_ Bit2=~ PORTB_ Bit2;//取反PORTB的第2位While(PORTB_ Bit2);或者while(PORTB_Bit2==1);//判断1while(PORTB_ Bit2==0);//判断0PORTC_Bit4=PORTB_Bit2;//把PORTB的第2位传送到PORTC的第4位5. 位变量定义?由于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;然后就可以用以下位变量了。

ImageCraft ICCAVR 的中文使用说明

ImageCraft ICCAVR 的中文使用说明

广州市天河双龙电子有限公司
3
选择双龙电子 选择未来科技
ImageCraft ICCAVR 的中文使用说明
三 ICCAVR 向导 1 起步 自你启动 IDE 后 首先从 Project 菜单系统选择 Open 命令 进入\icc\examples.avr 目 录并且选择并打开 led 工程 工程管理器显示在这个工程中只有一个文件 led.c 然 后从 Project 菜单中选择 Options 命令打开工程编译选项 在"Target"标号下选择目标处理 器 然后从 Project 菜单中选择 Make Project 命令 IDE 将调用编译器编译这个工程文件 并且在状态窗口中显示所有的信息
中时必须被使 读者可参考访问 EEPROM 的例子
#pragma abs_address:<address> 函数与全局数据不使用浮动定位 重定位
在访问中断向量和其它硬件项目时特别有用
而是从<address>开始分配绝对地址 这
#pragma end_abs_address 结束绝对定位 使目标程序使用正常浮动定位 C++ 注释
如果你选择了编译扩充(Project->Options->Compiler) 你可以在你的源代码中使用 C ++ 的 // 类型的注释 二进制常数
如果你选择了编译扩充(Project->Options->Compiler) 你可以使用 0b<1|0>* 来指定二 进制常数 例如 0b10101 等于十进制数 21 在线汇编
ICCAVR 是一个 32 位的程序 支持长文件名 出于篇幅考虑 本说明书并不介绍通用的 C 语言语法知识 仅介绍使用 ICC AVR 所 必须具备的知识 因此要求读者在阅读本说明书之前 应对 C 语言有了一定程度的理解 2 ICCAVR 中的文件类型及其扩展名 文件类型是由它们的扩展名决定的 IDE 和编译器可以使用以下几种类型的文件 输入文件 .c 扩展名----表示是 C 语言源文件 .s 扩展名----表示是汇编语言源文件 .h 扩展名----表示是 C 语言的头文件 .prj 扩展名----表示是工程文件 这个文件保存由 IDE 所创建和修改的一个工程的有 关信息 .a 扩展名----库文件 它可以由几个库封装在一起 libcavr.a 是一个包含了标准 C 的 库和 AVR 特殊程序调用的基本库 如果库被引用 链接器会将其链接到您的模块或文件中 您也可以创建或修改一个符合你需要的库 输出文件 .s 对应每个 C 语言源文件 由编译器在编译时产生的汇编输出文件 .o 由汇编文件汇编产生的目标文件 多个目标文件可以链接成一个可执行文件 .hex INTEL HEX 格式文件 其中包含了程序的机器代码 .eep INTEL HEX 格式文件 包含了 EEPROM 的初始化数据 .cof COFF 格式输出文件 用于在 ATMEL 的 AvrStudio 环境下进行程序调试 .lst 列表文件 在这个文件中列举出了目标代码对应的最终地址 .mp 内存映象文件 它包含了您程序中有关符号及其所占内存大小的信息 .cmd NoICE 2.xx 调试命令文件 .noi NoICE 3.xx 调试命令文件 .dbg ImageCraft 调试命令文件 3 附注和扩充 #pragma 编译附注 这个编译器接受以下附注

IAR FOR AVR EEPROM读写程序

IAR FOR AVR  EEPROM读写程序

#include <iom32.h> //Free_Bird#include <intrinsics.h>//这个头文件包含了EEPROM操作的库函数/*------------------PDF中的两个示例函数--------------------------*/unsigned char EEPROM_read(unsigned int uiAddress){/* 等待上一次写操作结束*/while(EECR & (1<<EEWE));/* 设置地址寄存器*/EEAR = uiAddress;/* 设置EERE 以启动读操作*/EECR |= (1<<EERE);/* 自数据寄存器返回数据*/return EEDR;}void EEPROM_write(unsigned int uiAddress, unsigned char ucData){/* 等待上一次写操作结束*/while(EECR & (1<<EEWE));/* 设置地址和数据寄存器*/EEAR = uiAddress;EEDR = ucData;/* 置位EEMWE */ /* 同时清零EEWE */EECR = (1<<EEMWE);/* 置位EEWE 以启动写操作*/EECR |= (1<<EEWE);}/*---------------------变量在EEPROM空间的声明和定义方法----------------------*/__eeprom unsigned char a1 = 0x35;//默认会被分配到0x0000单元__root __eeprom unsigned char a2 = 0x55;__no_init __eeprom unsigned char a3;/*---------------------变量在EEPROM空间的绝对定位有两种方法----------------------*/ __root __eeprom unsigned char a4 @ 0x102 = 0x00; //方法1#pragma location = 0x110__root __eeprom unsigned char a5 = 0x00; //方法2//宏定义一个EEPROM “起始地址”#define ADDR 0x100void main(){/*---------------------------------------------------------*/// 0-----变量定义/*---------------------------------------------------------*/unsigned char i = 0;unsigned char Temp = 0xff;unsigned char EEP_data[20] = {0};/*---------------------------------------------------------*/// 1-----PDF上示例函数应用/*---------------------------------------------------------*/for(i = 0; i < 20; i++)//将EEPROM空间的0x100~0x114 区间都写成0xaa{EEPROM_write((ADDR+i),0xaa);}for(i = 0; i < 20; i++)//将EEPROM里0x100~0x114区间的数据读出并依次赋给数组{EEP_data[i] = EEPROM_read((ADDR+i));}/*---------------------------------------------------------*/// 2-----IAR自带库函数应用前提是#include <intrinsics.h>/*---------------------------------------------------------*/__EEPUT(0x110,0x22); //写0x22到EEPROM区间的0x110单元__EEGET(Temp,0x102); //读EEPROM区间0x102单元的数据并赋给变量Temp/*---------------------------------------------------------*/// 3-----对定义到EEPROM空间的变量操作,IAR会自动完成读写工作/*---------------------------------------------------------*/a1++;Temp = a1;while(1);}。

IARFORAVR编译环境中启动代码和堆栈设置的分析

IARFORAVR编译环境中启动代码和堆栈设置的分析

IARFORAVR编译环境中启动代码和堆栈设置的分析1.例子1程序中仅包含一个空的main()函数,代码如下:#include <ioavr.h>int main(void){}此时对应的map文件显示:表中CSTACK的区域由编译环境中DATA STACK的值确定,起始位置是0060H,而RSTACK区域的起始地址就是CSTACK的最大地址+1,即RSTACK紧接着CSTACK,其大小由编译环境则为Return address stack中的值*2。

从0000-0025都是中断向量表的区域,从0026-0049才是程序代码中断向量表的区域如下图所示:从表中可以看出,上电复位后的第一条指令就转移到启动代码?C_STARTUP中。

程序代码如下图所示:在启动代码中,首先设置堆栈指针SP位009FH,这个值就是MAP文件中给出的RSTACK区域的最大地址。

然后将(R29,R28)寄存器对设置成0080H,这个值就是MAP文件中给出的RSTACK区域的最小地址。

由于在AVR中,当压栈时,堆栈指针进行减法,出栈时进行加法,所以栈顶就是009FH,实际上堆栈可使用的区域为0080到009FH。

这部分区域主要用来保存返回地址,因此在编译环境中也被称为返回地址的堆栈,而CSTACK则称为数据堆栈。

这个部分区域应该是用于局部变量的操作,因此要小心设置改值,否则会导致空间溢出。

2.例子2程序包含有一个main()函数,其中定义了一个10个字节的数组,如下图所示:int main(void){unsigned char i;char s[10];for(i=0;i<10;i++){s[i] = 0x55;}}这个程序编译后,生成的MAP图如下:从这里可以发现,没有CSTACK和RSRTACK没有发生变化。

启动代码部分如下所示:可以看出,也没有什么变化。

那么再来看看main()函数的汇编代码,如下图所示:通过读代码,可以看出R16用于存储局部变量i,用于for循环的计数。

IAR_使用最全方法

IAR_使用最全方法

软件介绍AVR® IAR Embedded Workbench® IDE用户手册的这部分包括以下章节:产品介绍已安装文件1.1产品介绍嵌入式IAR Embedded Workbench®是一个非常有效的集成开发环境(IDE),它使用户充分有效地开发并管理嵌入式应用工程。

作为一个开发平台,它具备任何在用户每天的工作地方所想要的特性。

本章介绍了嵌入式IAR Embedded Workbench IDE,旨在使用户获得对本产品的所有集成工具的总体了解。

1.1.1嵌入式IAR Embedded Workbench IDE嵌入式IAR Embedded Workbench IDE提供一个框架,任何可用的工具都可以完整地嵌入其中,这些工具包括:高度优化的IAR AVR C/C++编译器;AVR IAR汇编器;通用IAR XLINK Linker;IAR XAR库创建器和IAR XLIB Librarian;一个强大的编辑器;一个工程管理器;IAR C-SPY TM调试器,一个具有世界先进水平的高级语言调试器。

嵌入式IAR Embedded Workbench适用于大量8位、16位以及32位的微处理器和微控制器,使用户在开发新的项目时也能在所熟悉的开发环境中进行。

它为用户提供一个易学和具有最大量代码继承能力的开发环境,以及对大多数和特殊目标的支持。

嵌入式IAR Embedded Workbench有效提高用户的工作效率,通过IAR工具,用户可以大大节省工作时间。

我们称这个理念为:“不同架构,同一解决方案”。

如果用户想获得关于所支持的目标处理器的更详细的信息,请与用户的软件提供商或者与用户的IAR代理联系,或者登陆IAR .iar. 以查询最新的产品信息。

一个可扩展的模块化的环境尽管嵌入式IAR Embedded Workbench IDE可以提供完成一个成功工程所需的所有工具,但我们也认识到集成其他工具的必要性。

使用_IAR_FOR_AVR_时需要注意的几个地方

使用_IAR_FOR_AVR_时需要注意的几个地方

在AVR 所有的编译器中,IAR for AVR 是编译效率最高的编译器, 但是相对来说IAR for AVR 的设置项也非常多,如果使用不当反而会出现很多莫名其妙的问题.一. 关于堆栈的设置问题GCC 和IAR 分配堆栈的方式不同,IAR 先分配堆栈空间,相当于定义一个全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;GCC 不用先分配堆栈,自动把RAM 剩余空间作为堆栈空间,堆栈初始为RAM 最高地址。

初学者很容易忽视这个问题,造成程序跑飞而找不到问题的症结,我在用IAR For MSP430 的时候没遇到过这个问题,因为MSP430 的RAM 比较大,IAR 默认是80 字节,足够一般程序使用。

但是使用IAR For SAM8 的时候,有一个比较耗费堆栈的程序运行一段时间后出问题,由于要记录一个24 小时的数组,而数组元素的值是在堆栈里改变的,所以,记录到一定时间以后,出现了堆栈不足的情况,初学者如果没有仿真器,是很难发现这个问题的,还好我用的OPENice i500 仿真器在Debug 的时候出现了堆栈不足的警告,我才意识到是这里问题。

IAR For SAM8 默认堆栈是32 字节,既然不够用,那么就要增大,但是设置到多少合适呢?首先编译你的程序,看程序用了多少自己的RAM,在看看芯片的Datasheet,看看芯片总共有多大的RAM,(原文件名:9428.JPG) 引用图片好了现在你就知道剩余多少RAM 了:208-142=66(Byte)前面说过IAR 的CSTACK,NEAR_HEAP 和RSTACK 是预先分配好的,占用存储空间是固定不变的,相当于定义了一个全局数组,GCC 堆栈策略与IAR 不同,堆栈大小不是预先分配好的,而是把SRAM 里面剩余空间作为堆栈空间。

如果是GCC,那么编译器就会自动设置剩余的RAM 为数据堆栈(和数据返回堆栈RSTACK,NEAR_HEAP 等)。

在IAR 里,STACK 应该设置到多少呢?在工程-》Options-》Linker-》List(不同的IAR 版本会稍有不同),选择生成LIST 文件,并包含stack 选项(原文件名:iar.JPG) 引用图片在./Debug/list 目录下,得到.map(可能是.lst 等其他格式)文件,用记事本打开,找到以下内容:******************************************* CALL GRAPH******************************************* ->Sub-tree of type: Interrupt function tree that does not make: indirect callsCSTACK01Stack used (prev) :int_T0_OV00000000| Stack used (prev) : 00000000 | + function block : 0000000C......(省略N 行)01 main| Stack used (prev) : 0000003A| + function block : 00000000<-Sub-tree of type: Function tree| Stack used : 0000003A找到最大的Stack used,我的就是0000003A,58 个字节,这就是用到的最大的堆栈空间,保守一点,我设置成64 字节,没有超过剩余RAM,再重新编译,运行,仿真器没有堆栈不足警告,程序也能正常运行了。

IAR中同时输出多个文件的说明

IAR中同时输出多个文件的说明
-Ointel-extended,(XDATA)=.eep
3、在Project->Options->XLINK->Output->Format->Other中选择UBROF6格式输出。
方法二:操作步骤:
1、在Project->Options->Custom Build->Output files中添加如下:
-Ointel-extended,(CODE)=.hex //生成INTEL 扩展格式的*.HEX文件
2、在Project->Options->XLINK->Output->Format->Other中选择UBROF6格式或UBROF7格式输出即可。
以上方法经在多个版本中经过多次实践没有问题,如果有疑问可以和我进行切磋探讨。
-Ointel-extended,(XDATA)=.eep //生成往EEPROM中写入的文=.A90 //生成调试文件
-Ointel-extended,(CODE)=.hex //生成INTEL 扩展格式的*.HEX文件
2、在Project->Options->XLINK->Extra Option中添加如下:
-Ointel-extended,(XDATA)=.eep //生成往EEPROM中写入的文件
-Ointel-extended,(CODE)=.A90 //生成调试文件
IAR中同时输出多个文件的说明
方法一:操作步骤:
1、在Project->Options->XLINK->Include中观察该Project使用了哪个XCL文件。
2、在该XLC文件中加入以下两行:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IAR FOR AVR 中如何生成*.eep文件Free_Bird
1:首先,要先勾选Project->Option->Linker->Extra Options->Use command line options并在其中添加下面三个语句:
-Oraw-binary,(CODE)=.bin
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep
则可在D:\Program Files\IAR Systems\Embedded Workbench 5.3\***\Debug\Exe分别生成*.bin\*.hex\*.eep 文件
2:被关键字__eeprom修饰的变量将被定义到EEPROM空间
__eeprom unsigned char A = 0x35;/ /默认是从eeprom的0x0000地址开始存放。

3此时,:如果程序中用到了变量A,编译器就会将其生成到*.eep文件中,可顺利下载;并且我发现,每次下载*.eep文件,都要将芯片中的程序全部擦除后再进行,并且写完*.eep文件要紧接着将EESA VE熔丝位挑上;然后再烧写Flash 文件,否则数据可能会被破坏;
4:如果程序中没有用到变量A,编译器则不会将其生成到*.eep文件中,此时向芯片中下载*.eep文件会提示“The Intel Hex input file is empty”即:eep文件为空。

如下图:
此时可用关键字__root 来修饰变量,如下
__root __eeprom unsigned char A = 0x35; //告诉编译器,未使用的代码也要编译这样,即使程序中没有用的变量A,它也会被生成到*.eep文件中。

4:还有一个__no_init 要说,如下:__no_init __eeprom unsigned char A;
它是说:禁止系统启动时初始化变量
此时即使程序中用了变量A,编译器也不会将其生成到*.eep文件中。

即:生成的*.eep文件还是空的;
以上是本人的一些经验,可能不一定全对,但希望能够帮到需要的人;。

相关文档
最新文档