以前写过Keil的算法以及IAR的Flash Loader。两个都是ELF文件。Keil的更具技巧一点。
Keil算法是位置无关代码,分成两个加载区:一个加载区是代码;另一个是Flash的描述信息。
Keil根据Flash的描述信息掌握Flash的Sector Size及分布,把代码写到RAM之后,会调用其中的函数Init/UnInit/ProgramPage/EraseSector/EraseChip等。
调用前要配置CPU寄存器,R9作为Static Base保存全局变量的位置;通过R0、R1、R2进行传参;通过LR + Set BP at LR Location防止函数执行完毕跑飞。写入的时候按照Sector大小把Image Buffer写到代码位置的后面。