首页 » 技术SOS » 嵌入式系统 » 中间件和软件库 » 关于IAP的问题 ?

关于IAP的问题 ?

助工
2007-08-22 08:00:33
1,一般IAP是作什么用的呢,更新代码还是数据呢? 2,现在我如果把某个程序比如functIon.o中的代码和数据(RO+RW+ZI)通过scatter的方式放到片内FLASH的指定位置(调用__maIn.o应该会自动拷贝RW+ZI到RAM中),现在假如我要更新这个functIon.c程序,新的代码和数据的大小 都和原来的不同,那应该怎么样操作才能用新的代码和数据覆盖原来的代码和数据,而且保证更新后正常执行新的代码,并且在下次上电启动时能正确的执行新的代码。 用的是LPC2294, ADS1.2
关键词: IAP, 在应用编程  

最佳回复

高工
2007-08-22 08:01:08
1楼

关于IAP的问题IAP就是提供自己烧录片内flash的功能。当需要更改部分代码时,建议更换整个应用代码(boot代码没有必要更换,如果有的话)。RW+ZI 要指定到ram中,编译器会自动帮您放在flash中,并用——maIn()拷贝到指定的ram中。当您的functIon.O改变时,整个工程中的代码连接地址被改变了,无法局部代换。

需求发布人评语:   多谢拉
助工
2007-08-22 08:01:31
2楼

请问:如何“更换整个应用代码”呢?谢谢你的答复,但我还有一些不明白的地方,希望得到您的解答: 1,您说的“建议更换整个应用代码”,是指更换整个maIn.c程序吗? 若用IAP的方法来更新,而更新后的应用代码和原来的相比,在代码和数据上都有所不同,如何实现IAP呢?有没有现成的代码可以参考? 一般程序启动时会调用__maIn.o,它会根据连接器生成的一些符号(Load$$regIon_name$$Base,Image$$regIon_name$$Base等),将FLASH中的RW+ZI复制到RAM,然后才能正常运行。若我只是简单的把新的代码数据覆盖掉原来的,那么在RAM中的对应RW+ZI还是没有得到及时更新,新的程序还是无法正常运行,这时应该怎样处理才能使得新的代码正常运行呢? 而且,下次启动程序调用__maIn.o时,还会根据原来的一些符号(但由于scatter文件没有更新,所以这些符号的值还是没有改变),那些符号表示的地址还是原来RO,RW,ZI的地址,那么进行复制的时候不是要出问题吗? 2, 若有多个加载域,__maIn.o也都会把他们各自的RW+ZI复制到RAM中的指定位置吗? 比如有两个加载域,其中分别有RW+ZI,那么在调用__maIn.o时,会分别把这两个加载域中的RW+ZI复制到RAM中指定的位置吗? 谢谢回答。