关于IAP的问题 ?
最佳回复
关于IAP的问题IAP就是提供自己烧录片内flash的功能。当需要更改部分代码时,建议更换整个应用代码(boot代码没有必要更换,如果有的话)。RW+ZI 要指定到ram中,编译器会自动帮您放在flash中,并用——maIn()拷贝到指定的ram中。当您的functIon.O改变时,整个工程中的代码连接地址被改变了,无法局部代换。
需求发布人评语: 多谢拉请问:如何“更换整个应用代码”呢?谢谢你的答复,但我还有一些不明白的地方,希望得到您的解答: 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中指定的位置吗? 谢谢回答。