1、ARM IAR如何生成hexIAR EWARM5.20学习笔记(基于LPC2132)-从零起步 -在proteus中仿真运行(幻磁帝国原创)一:创建一个最简洁的工程模板目的:IARM EWARM5.20编程入门,学会怎么用EWARM5.20版来创建自己的工程。1.1 新建一个空的工程文件夹,这里起名为MyEWARMstartup1.2 新建EWARM工程创建一个空的EWARM工程:点击OK,选择刚才新建的文件夹,工程取名为MyEWARMsartatup,保存。这样一个空的新的工程文件就建好了。1.3 拷贝IAR EWARM安装目录下例程中的启动文件本例用的是LPC2132,顾找到软件安装目录下
2、的LPC213x的例程进去找到config文件夹,这个文件夹中装的就是LPC2132的启动文件可以看到这个文件加下面有四个文件Flash.icf Flash.mac RAM.icf 和 ram.mac。暂且不用理会这几个文件的具体内容,只要知道它是启动文件就可以了。拷贝config文件夹,复制到先前建立的工程文件夹MyEWARMstartup中。到此,准备工作基本完成。1.4 工程设置右键点击workspace中的工程名,选择Options,对工程进行相关设置。再Generral options中选择具体的ARM型号,这里选择LPC2132第二个要设置的选项是Output Converter,
3、即输出文件的设置,这里设置如下,生成hex文件,文件的目录可以直接加到hex文件名前面的。如:D: MyEWARMsartatup.hex接下来就是至关重要的启动代码的链接设置了,打开Linker选项如下,congfig选项卡中默认是没有勾选Override default的。这时候就要用到先前我们拷贝的config文件夹中的东东了,也就是启动文件了。勾选Override default,点击后面的选择链接,将路径选择到:C:Documents and SettingsAdministrator桌面MyEWARMstartupconfigRAM.icf 如果想在Flash中运行就选择FLASH
4、.icf 最后一个设置:本人是在proteus中仿真调试的,所以这里选择的是simulator方式,启动后运行到main函数。点击OK完成设置。1.5 创建自己的main.c文件然后将文件添加到工程当中(在MyEWARMstartup-Debug处点击右键-AddAdd“main.c”)点mack,OK,没有错误,大功告成!OK,在proteus中仿真运行,你就会看到你的劳动成果了一个闪烁的LED!呵呵简单吧!赶快自己动手试试吧。 如果需要下载到目标板中,则将1.4中的Linker中的连接选择到FLASH.icf(或者修改RAM.icf的起始终止地址也可以)。否则用Isp下载时会出现如下错误:
5、IAR EWARM v5.20下从零开始创建工程(总结+探索)下面开始对IAR Embedded Wrokbench v5.20进行设置,打开ProjectOptions选项,开始设置:下载 (17.79 KB)2008-11-23 17:03设置目标板类型:设置C/C+编译器:特别需要注意,在“Additonal include directories:”一项里,要填写头文件的路径,“$PROJ_DIR$.APPLICATION”表示头文件存放在当前工程文件上一级目录的APPLICATION文件夹下,另外一个同理。如果使用ISP方式,需要.HEX文件,在IAR520下,非常容易获得.HEX文
6、件,设置如下:设置Linker:就是前面提到的stm32f10x_flash.icf文件,注意,当整个文件夹路径发生变化时,需要重新设定stm32f10x_flash.icf,否则,LED.HEX文件将无法下载到豆皮开发板上。Make然后大家就会在C:STM32_DemoLEDEWARMDebugExe目录下看到LED.hex文件了,至此,LED跑马灯工程就算告一段落了,(*_*) 。将LED.hex文件用ISP方式下载到STM32F103VB6的Flash 里面就程序就可以跑起来了。ISP的具体设置请参考帖子豆皮 - STM32开发板入门教程(十二) - STM32 ISP下载(原创)帖子出
7、处 CodeinHexfileexceedsFlashLimitation!问题的解决我使用周立功公司的EasyARM开发试验板,芯片是lpc2114,有128kb的flash,但是当要使用LPC210x Flash ISP Utility下载只有4K代码的程序时,却出现“code in hex file exceeds flash limitations”错误。 因为平常使用ADS调试都是用的DebugInARM设置,所以在用LPC210x Flash ISP Utility下载程序时也是使用这个设置。上网查资料,找到了解决的办法: in RAM里调试并生成。生成的Hex文件不对,请注意在D
8、ebug in RAM里调试并生成的文件他将从40000000开始,这样软件当然会提示“code in hex file exceeds flash limitations”。” 所以我的解决办法是先使用DebugInFLASH设置,然后再用LPC210x Flash ISP Utility下载时即可成功!ARM初体验搞出来从片内RAM或片外flash启动了(来自网络)板子的硬件调试通过后,用了一周的时间才把一个简单的LED测试程序分别在片内RAM和片外flash调试通过,中间那个叫痛苦啊,首先记住一个教训:以后开发一种新的CPU,一定要在原理设计阶段就开始考虑程序设计,考虑玩玩开发板,熟悉新
9、的开发软件,不至于到硬件调试完后匆忙上阵,前面对CPU的认识又忘记的差不多了。另外软件不一定用最新的,这次用IAR5.20,结果跟4.X有很多不一样的地方,与别人交流都很困难。这次吃了大亏,年前这个程序不知道能不能完成,这可关系俺的饭碗啊。ARM:AT91SAM9260 开发环境:IAR5.20+H-JTAG(H-Flash)+wiggler主程序就是一个简单的点亮LED测试程序就不说了,关键是IAR的设置方面:首先是在片内RAM调试,关键在于IAR5.20的链接配置文件.icf文件(对应IAR4.X的XCL文件),开始时根据ATMEL的库文件Sdram.icf修改了一个icf文件,怎么都不行
10、,IAR5.20的icf格式又与4.X的XCL格式有很大的不同,没办法就死啃IAR的帮助文件,EWARM_DevelopmentGuide.ENU.pdf,这个文档的73页有一个ICF的范例,A Simple Example of A Configuration File,自己照葫芦画瓢写了一个简单的ICF文件,写多了,逐渐发现其中的猫腻了,这个文件无非包括三个内容:定义存储区域;初始化堆栈;放置代码和数据。定义存储区域就是声明你的硬件系统上的ROM和RAM地址范围,初始化堆栈就是定义堆栈大小并将其放到一个特定区域,放置代码和数据一般就是将readonly就是代码放置到ROM或FLASH,将r
11、eadwrite就是数据变量啥的放置到RAM,并且将中断向量放置到ROM或FLASH的起始位置。这个文件很熟了以后,万里长征就走了一大步了,片内RAM调试的话,就直接在ICF文件中将片内ROM的地址和片内RAM的地址都指向片内RAM的地址就可以了。就是这样子:9260的片内RAM起始地址为0x200000,片内ROM实际地址为0x100000,再此将其指向片内RAM。define symbol _ICFEDIT_region_ROM_start_ = 0x200000;define symbol _ICFEDIT_region_ROM_end_ = 0x207FFF;define symbol
12、 _ICFEDIT_region_RAM_start_ = 0x200000;define symbol _ICFEDIT_region_RAM_end_ = 0x200FFF;然后就是片外norflash启动,首先直接将BMS引脚接地,H-JTAG和banyan都是找不到芯片的,正确的做法是,将BMS接高,片内启动,将IAR生成的Binary文件烧进flash然后在BMS接地,程序从norflash启动。说到烧flash自然想起H-JTAG的小弟H-FLASH,可是这个H-FLASH不是那么好用的,用过的都知道,里面要用到一个初始化脚本,开始我不懂这个东东是干啥用的,随便下载了一个脚本就用上
13、了,其实这个初始化脚本与前面说到的icf文件一样都是与自己的硬件系统息息相关的,这个初始化脚本重要的有两处:制定合法的RAM和片外flash地址和初始化片外存储器。为什么要合法的RAM地址,因为H-JTAG的下载机制是先将一个程序A下载到RAM,然后这个程序A再将你真正要下载的程序B下载到flash。所以要一个合法的RAM地址,片内RAM足够了,不知道为啥我的片外RAM就不行(后面也初始化了)?flash地址一定是真正的地址,比如说0x10000000。另外就是初始化你的片外flash,不初始化,照样找不到。同样此时,在IAR的icf文件中,你要声明你的片外flash地址。并将中断向量存放到片
14、外flasha起始地址。至于MAC文件,这里只要的作用好像与H-flash的初始化脚本重复了,都是初始化片外存储器的作用,好像不要也可以,具体还没有试。这样就可以在IAR中编译生成Binary文件然后在BMS接高的情况下,下载到片外flash中,然后断电,将BMS接地,程序将从norflash启动运行。接下来就是试验Remap到RAM,好像有点难,一直没能成功,先不搞了,先把我的应用程序写出来,马上过年了,我可不想年前就失业。前面的过程,我自己搞了好久,一度很郁闷,但最后还是走出来了,也请教了很多朋友,有公司的同事SYD,ouravr的bozai,小马哈等网友,向他们表示感谢。也希望陷在ARM魅力下的朋友能够越学越好。