我在Virtex4 FPGA中使用Xilinx Microblaze CPU内核。我想在我当前的代码中添加一个新的代码部分,但是我的代码将超过它所烧的闪存的大小。因此,我想将添加的代码刻录到另一个闪存中。
我的代码由引导加载程序复制到RAM,然后跳转到RAM并开始定期执行。我打算以相同的方式从第二个闪存中复制新代码,相邻(在RAM中)到从已经使用的闪存中复制的代码。
为此,我实际上需要两个单独的elf可执行文件,每个文件用于每个烧录闪存,以及它们之间的精确分隔,定义每个文件中驻留的例程。应启用跨文件的例程调用。
我的问题:我如何制作这些单独的精灵文件,并在每个文件中准确说明例程?有没有办法将一个可执行文件拆分成两个单独的文件?或者是否存在另一种解决方案,用于生成单独的可执行文件/库文件作为嵌入式系统中单个链接的输出?
谢谢, Ishai
答案 0 :(得分:2)
如果您可以在RAM中重新组合二进制文件,那么链接到单个二进制文件然后拆分生成的文件应该非常好。您必须保证引导加载程序功能包含在主要部分中。最简单的方法是创建一个独立的引导加载程序二进制文件。
答案 1 :(得分:2)
假设您已经完成了明显的并且运行'strip'来生成没有调试符号的二进制文件的副本。调试信息对实际目标没有用。
如果剥离的二进制文件仍然大于FLASH,则可以使用S-RECORD tools拆分该二进制文件。除了分割文件之外,它还有更多选项,例如添加校验和,CRC,以及支持大量文件格式。
如果你的RAM大到足以容纳你的所有程序,那么就没有特别需要制作单独的ELF文件/ DLL。只需将您的程序构建为一个在ROM地址空间中运行的大型整体程序,并让您的引导加载程序将其中的一部分从Flash加载到RAM中。
答案 2 :(得分:0)
如果您可以使用动态库,则可能会将可执行文件中的某些代码分解为一个,只需将一个文件放在每个闪存区域中。