程序固化后运转方法:
程序开端运转后需求将RW 和ZI段搬移到RAM中去,程序下载进Flash中今后,上电后是怎样将RW ZI断搬移到RAM中去的?留意IAR和ADS在进行完.s文件的初始化今后都不是直接跳转到main函数去履行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中依据icf文件的装备,将RW和ZI段搬移到icf文件规则的RAM区域中。假如程序的运转时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?因为.s文件的开端部分是CODE RO的,不需求RAM空间,所以可以在.s文件中对片外RAM进行装备。还有一个问题,这个问题是在硬件规划时有必要留意的,假如需求程序固化在外部Flash中,有必要留意外接的Flash有必要是片子上电后默许片外总线就支撑的片子。
程序在RAM中调试的运转方法
为了调试的便利,程序有时候是不需求下载进flash进行调试,而是直接在RAM中运转,将icf文件中的ROM 和RAM地址都设成硬件RAM的地址,将Flashloader的使能关掉,那么程序就运转在RAM中了。可是问题又产生了,因为有时咱们想在外部RAM中调试代码,所以片外RAM控制器需求在代码下载进RAM之前进行初始化,怎样可以完结呢?IAR是经过.mac文件完结的。在程序下载之前先履行了。mac文件中的程序,下面是一个比方
execUserFlashInit()
{
}
该比方是lpc初始化外部RAM的比方。装备好了外部RAM就可以在里面跑代码了。
程序的IAR下载
1.
这是最简略也是最常用的方法,一般的ARM芯片都会带有片内Flash,IAR会经过Flashloader将二进制的可履行文件下载到Flash中。下载的方法如下:假如要将程序B下载到片子里,IAR先将一个程序A(IAR事前编好的程序)下载到片内的RAM中,然后使用这个程序A经过JTAG和Flashloader交互完结程序B的下载。
2.
IAR下载进RAM中的程序A有必要支撑片外的Flash,他可以完结片外Flash的擦除。往往这个程序需求自己写。像HJTAG的下载机制也是这样,HJTAG中列举了许多HJTAG支撑的芯片,所谓支撑便是HJTAG很有这些芯片的A程序。在HJTAG中有必要要指定程序A即将下载到的RAM的地址,并且这个地址的RAM有必要是可用的,比方假如用的片外SDRAM的话就有必要初始化SDRAM控制器。这在HJTAG的Init Script中完结、在IAR的mac文件中完结。
3.
因为这两种方法不需求Flashloader的参加,这时程序的加载时域和运转时域是相同的,程序运转后不触及程序的搬移,所以只要给IAR指定运转时域的RAM地址就行了,假如是内部RAM,那十分省劲,直接在icf文件中将地址都设置成内部RAM就行,假如是外部RAM那么在mac文件中初始化外部SDRAM控制器或许其他的RAM,然后IAR就可以完结将程序放在现已初始化好的外部RAM里,并运转。