DSP

HPI加载DSP

2019-07-13 14:58发布

偶然翻出2011年做嵌入式时写的小东西,现在看着它当时的场景还历历在目,希望能给需要它的提供一点点帮助       想要从HPI加载DSP首先要了解编译生成的DSP目标文件的格式,也就是COFF文件。关于COFF文件格式大家可以GOOGLE,有许多相关资料,这里就不说了。大家了解COFF文件后也许还是一头雾水,只是一个标准的文件格式,如何才能将它放入内存中运行起来?只要将段落数据(Section Data)写入指定的内存中,可是内在地址又在哪里?就是段落头(Section Header)中的地址。也不是所有的Section Data都要加载,只加载运行必要的Section Data就可以了,所以在这里我们需要一定的判断条件,这个判断条件就是Section Header中的ulFlags,只加载(0x0040 STYP_DATA)和(0x0080 STYP_BSS )就可以了,这样可执行的数据加载完成了。不过这样DSP还是不能跑起来,因为它需要知道程序的入口啊。程序的入口点在可选头(Optional Header)中,将入口点地址写入DSP启动寄存器就可以了,然后启动DSP,是不是完美的运行起来了。值得注意的是在加载过程序大家要注意文件的大小端问题。       在实现过程中有可能写入DSP启动寄存器的地址并不是一个完整的入口地址(6446中只有高22位有效),这样安上面的做法DSP还是没启动,这是为什么呢?大家不防用仿真器看看启动地址那里放的是什么,对,是垃圾数据,这样当然启不来了。解决有两个方法:1.可以将中断向量段写到这里一份。2.自己做个跳转指令写到这里,跳转到真正的入口地址。