
图3中的黑体字部分,是嵌入了Loader程序的自举表,有了图3这样形式的并行自举表,系统就可以实现多页程序的并行自举。建立这样的自举表很简单,只需要将hex500格式转换工具生成的 Loader的并行自举表和用户程序的并行自举表按图3给定的格式,通过简单的文件操作合并在一起就可以了。注意:Loader程序要占用一部分RAM空间,用户程序空间不能和Loader的RAM空间重叠在一起。
2.2 Loader程序的具体实现
下面以分布在2个Flash页面的程序为例,给出5410并行自举的示例程序。程序中,当I/O端口5写人数据O时,选中Flash第1页;写1时选中第2页。程序里用黑体字标出的注释部分,是Loader程序设计的重点或难点。
示例程序中,DSP上电后,Bootloader将Loader程序加载到RAM中,然后执行Loader程序:Loadelr程序从Flash第1页的 8080H开始读取用户程序自举表,当Flash读取计数值超过31 K时,将Flash切换到页面2,继续加载,自举完成后,跳转到用户程序入口地址执行用户程序。在编写自举程序过程中,有这样几个问题需要注意:
①在换页时,一般情况下程序段都会跨越两个页面,因此在确定需要换页时要计算出第1页和第2页分别要加载的段长度。
②整个用户程序段开始时有2个字的入口信息,每一个程序段都有3个字的段信息,因此需要在Flash读取计数时给予修正,才能正确加载数据。
③在确定需要换页时要将换页标志置为1,换页后要将换页标志置为0,而且换页后要将数据读取指针指向第2页的开头地址。
如果要使用本文的示例程序,一定要将Loader程序烧写到Flash第1页8000H的位置,用户程序段烧写到8080H以后的位置。再次提醒, Loader程序加载到RAM中的地址,不能和用户程序段加载到RAM中的地址重叠。例如Loader使用了RAM中的7F80H~8000H这段空间,则用户程序不能使用这段空间,否则会出现错误。Loader的自举流程如图4所示。

3 总 结
要实现5410的多页程序并行自举,有如下几个步骤:
①根据用户程序的需求以及实际使用Flash的分页设置,参考第2部分提供的思路和例子编写Loader程序;
②使用hex500代码转化工具分别生成Loader程序和用户程序的自举表;
③将两个自举表按图2的格式生成一个新的自举表,再使用第1部分介绍的方法将新的自举表分页烧写到Flash上。
使用本文介绍的方法,通过多次试验,系统上电后,能够很好地实现2个页面程序的并行自举。虽然是以2个页面为例介绍Flash烧写和并行自举的方法,但是对于2页以上的程序烧写和并行自举同样适用,只需要进行一些细微的改动即可。本文提供的方法以不到128字的RAM空间代价,在5410上实现了将大于 32 K字的程序并行自举到片上RAM,大大提高了编程的自由度和程序的运行速度,降低了系统功耗。这个方法有很强的通用性,可以在很多存在类似问题的DSP芯片(5409、5416等)上进行应用,具有较高的实用价值。