自编写NorFlash项目的自动化工具链
来源:互联网 发布:数据结构与算法考点 编辑:程序博客网 时间:2024/05/21 17:17
试想,开发人员只需要编护一个配置文件,就可以立即根据配置信息产生最终的源代码文件和可执行文件,这是多么写意的一件事情。。。
最近进行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^
最近进行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^
- 自编写NorFlash项目的自动化工具链
- 使用KSH编写的一个自动化工具
- Python 编写自动化工具
- Gulp 自动化的项目构建工具
- C#借助API实现黑盒自动化测试工具的编写
- C#借助API实现黑盒自动化测试工具的编写
- C#借助API实现黑盒自动化测试工具的编写
- C#借助API实现黑盒自动化测试工具的编写
- norflash驱动编写
- norflash驱动编写
- norflash驱动编写
- Android的自动化测试六:adt自带的自动化测试工具monkey优缺点解析
- 内核自带norflash的编译与实验
- 内核自带norflash的编译与实验
- 关于项目自动化工具的知识(ant,maven,gradle)
- 美菱项目(AU1200):NorFlash相关的设定
- 使用Adt自带的工具进行Android自动化测试(一)
- 使用Adt自带的工具进行Android自动化测试(二)
- 我对web2.0的一些看法
- Half or five tenths?
- [翻译] Effective C++, 3rd Edition, Item 49: 了解 new-handler 的行为(下)
- C++中接口与实现分离的技术
- Delphi中直接关闭子窗体
- 自编写NorFlash项目的自动化工具链
- 鱼和水的故事(完整版) 感动
- Robot research links
- asp常见错误参数1
- ASP错误大全
- C++类对象的复制-拷贝构造函数()
- 【原创】LoadRunner如何获得参数化中每个关键字的搜索响应时间
- 读内存管理(整理)
- Log4j日志等级