您的位置:首页 > 其它

自编写NorFlash项目的自动化工具链

2006-03-03 00:22 267 查看
试想,开发人员只需要编护一个配置文件,就可以立即根据配置信息产生最终的源代码文件和可执行文件,这是多么写意的一件事情。。。

最近进行NorFlash U盘项目的开发时,发现市面上的NorFlash型号非常多,因而要为每一款不同的Flash去编写机械而重复的汇编代码。除了汇编代码本身难编写之外,更重要的是支持当型号增多的时候,庞大的代码更是难以维护。

开发过程中发现汇编中的大部分代码是固定的,而不同的Flash只需要更改读写命令及一些控制的方式。为此,产生了写一个自动化工具的想法。首先把每款Flash的信息保存到某个文件,然后编写一个代码产生器,从文件中取得信息并产生代码;由于每款Flash除了最终生成的汇编代码外,还有其他一些配置文件,这些都应该一次性生成。这样,以后只要编护一个信息文件,就可以通过工具生成所有最终使用的文件。生成源代码后再调用汇编器编译程序,生产bin文件,最后可能还要进行一些后期处理。这些都应该自动化一气呵成地完成。

想法出现后立即按步就班实现:

首先把所有的Flash信息保存在一个xml文件中,每种型号的所有配置信息都写在这个文件中,如Flash容量,Secotr的大小,编程、擦除复位等命令及信息。使用xml的原因是因为他有统一简洁的格式,适合于保存任意的数据,而且有很多公开解释xml的源代码。
xml文件例子如下:

<NorFlash>
<MBM29DL323TD>
<Byte Version="V1.00" BlockTotal="0x40" SectorPerBlock="0x80" PostWriteDelay="0x00010F00" ZonePerChip="0x02" BlockPerChip="0x40" BootSectors="0x08" ResetTime="0x400" ClearStatus="0x00">
<Command ReadDelay="3" WriteDelay="4">
<ReadID cycle="5">
<cmd1 operate="write" address="0xAAA" data="0xAA"/>
<cmd2 operate="write" address="0x555" data="0x55"/>
<cmd3 operate="write" address="0xAAA" data="0x90"/>
<cmd4 operate="read" address="0x000" data="ID1"/>
<cmd5 operate="read" address="0x002" data="ID2"/>
</ReadID>
<Reset cycle="1">
<cmd1 operate="write" address="0x000" data="0xF0"/>
</Reset>
<SectorErase cycle="6">
<cmd1 operate="write" address="0xAAA" data="0xAA"/>
<cmd2 operate="write" address="0x555" data="0x55"/>
<cmd3 operate="write" address="0xAAA" data="0x80"/>
<cmd4 operate="write" address="0xAAA" data="0xAA"/>
<cmd5 operate="write" address="0x555" data="0x55"/>
<cmd6 operate="write" address="SA" data="0x30"/>
</SectorErase>
<ByteProgram cycle="4">
<cmd1 operate="write" address="0xAAA" data="0xAA"/>
<cmd2 operate="write" address="0x555" data="0x55"/>
<cmd3 operate="write" address="0xAAA" data="0xA0"/>
<cmd4 operate="write" address="PA" data="PD"/>
</ByteProgram>
</Command>
<BootSector Count="0x08" BeginAddress="0x003F0000" EndAddress="0x00400000" Space="0x2000">
<!--BootSector的配置情况-->
</BootSector>
<EraseStatus Mode="Toggle" Value="6">
<!--SectorErase的状态检查方式-->
</EraseStatus>
<ProgStatus Mode="Verify" Value="Equ">
<!--ByteProgram的状态检查方式-->
</ProgStatus>
</Byte>
<Word BlockTotal="0x40" SectorPerBlock="0x80" PostWriteDelay="0x00010F00" BootSectors="0x08" PatchTableOffset="0x200" PatchCodeOffset="0x1000" MsciCodeOffset="0x800"/>
</NorFlash>

然后,编写一个代码产生器,读取该xml文件中的信息,据此选择适当的代码模板,组合成汇编的源代码文件。而且,在这个步骤,也根据xml中的信息产生了其他配置文件。
这个代码产生器是一个命令行程序,读取每一款Flash,产生输出文件后再读取下一个款Flash的信息,再产生相应的文件。

最后,编写了一个小的外壳程序,该程序调用代码产生器,然后再调用汇编器编译链接刚产生的汇编文件,并且进行bin文件的后期处理。最终把运行结果显示出来。

虽然此工具链还未尝试支持更多的Flash,但是很容易在xml文件中加入新的配置项,而不影响原来的信息结构。整个工具链初版编写时间不到三天。使用效果还是不错的^o^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: