利用仿真软件的Semihost功能烧写Flash(附例程和烧写任务工具)

[复制链接]
 楼主| wowow 发表于 2007-5-13 10:12 | 显示全部楼层 |阅读模式
ARM的C函数库中的文件操作函数/printf函数可以用来读写主机上的文件/向主机发送字符串,这些功能的实现需要调试软件Semihost功能的支持。具体实现原画是利用了ARM的SWI,在SWI服务程序中调试软件与ARM可以交换数据。这些功能不能脱离仿真环境使用,用来调试及烧写Flash还是很不错的。<br /><br />支持Semihost的仿真软件有ADS1.x和RVDebug,其它软件不详。本例在是RVDS&nbsp;2.2中的RVDebug实现的,ADS帮助里说支持Semihost,应该也可以。IAR/Keil好像这两个自带了烧写功能,可惜不支持我的Multi-ICE仿真器,没有试过。<br /><br />附件内容:<br />1.Burnjob.exe,Burn.job:生成烧写任务文件,ARM程序执行时先读Burn.job文件中存贮的烧写文件路径和烧写起始地址。最多可以存4个烧写任务,并可以指定是否烧写该任务。<br />2.Mainfunc.c:&nbsp;烧写示例程序<br /><br />使用前需要做的:<br />1.建立一个项目,加入示例程序与自己的启动文件/初始化程序。<br />2.更改Flash烧写的命令以适用于自己的Flash芯片,示例中的用的是SST39VF800<br />3.更改示例程序中Burn.job文件的路径。<br />4.编译。<br />5.运行Burnjob.exe,选择你要烧写的程序/字库/其它数据表等(目前只支持bin格式!),并对当前要烧写的文件前打勾,然后保存烧写任务。<br />6.加载运行烧写程序。<br /><br /><br />其它说明:<br />1.注意fread()函数需要在HEAP中开缓冲区,一定要确认足够大的HEAP。以我的经验,如果你每次读x&nbsp;byte,HEAP最好大于2x。<br /><br />2.由于编译后的程序比较大,对于只有几k大小的内部RAM是不够的,只能放到外部中SDRAM。如果你的Flash是完全空白的,没有初始化SDRAM的程序,那么就会出现无法加载程序的情况。因此你需要建一个只包含实始化程序的小程序,先把它加载跑一下就行了。其它烧写工具一般是由主机主控的,加载到ARM中的程序很小,所以可以直接加载到内部RAM,不用初始化SDRAM。不过只要你的flash烧过了正确启动程序,以后上电时就会初始化好SDRAM了。<br /><br />3.本方案作为备选方案,在以下情况下是最佳选择:<br />-其它烧写工具在你的板子上不**。<br />-其它烧写工具不支持你工作用的仿真器,时不时换仿真器挺麻烦。<br />-其它烧写工具不能满足一次烧写多段程序/数据的要求时。<br />当然前提是你用的调试软件支持Semihost&nbsp;:-)<br /><br />4.这个程序对我目前的工作比较适用,也没有做后续改进,如果哪位把它改进得更通用一些,也请放上来共享共享。<br /> 相关链接:<a href='http://bbs.21ic.com/upfiles/img/20075/2007513101211864.rar'>http://bbs.21ic.com/upfiles/img/20075/2007513101211864.rar</a>
 楼主| wowow 发表于 2007-5-15 15:02 | 显示全部楼层

貌似没多少人感兴趣?

  
hqgboy 发表于 2007-5-15 16:48 | 显示全部楼层

你太牛了。告诉一下,在哪儿下的REALVIEW2,下了几个都不能

  
 楼主| wowow 发表于 2007-5-15 18:20 | 显示全部楼层

上两张图片

<img src="http://bbs.21ic.com/upfiles/img/20075/2007515181942439.gif">
 楼主| wowow 发表于 2007-5-15 19:27 | 显示全部楼层

可能那个patch你没用好

crack列表里所有的文件都要patch<br /><br />原映像中Z.W.T有关要进行patch操作的说明中文件列表不够完整,最终会导致无法正常debug。<br />以下为完整列表:<br /><br /><br /><br />%Install&nbsp;Path%IDEsCodeWarriorCodeWarrior5.6.11592win_32-pentiuminPluginsLicenseoemlicense.dll<br />%Install&nbsp;Path%IDEsCodeWarriorRVPlugins1.086win_32-pentiumoemlicenseoemlicense.dll<br />%Install&nbsp;Path%RDIarmsd1.3.166win_32-pentiumarmsd.exe<br />%Install&nbsp;Path%RDIAXD1.3.198win_32-pentiumaxd.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentiumarmasm.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentiumarmcc.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentiumarmcpp.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentiumarmlink.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentiumfromelf.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentium        cc.exe<br />%Install&nbsp;Path%RVCTPrograms2.2349win_32-pentium        cpp.exe<br />%Install&nbsp;Path%RVDCore1.8734win_32-pentiumin        vs.exe<br />%Install&nbsp;Path%RVDCore1.8734win_32-pentiuminxry100.dll<br />%Install&nbsp;Path%RVARMulatorARMulator1.4.1206win_32-pentiumarmiss.sdi<br />%Install&nbsp;Path%RVARMulatorARMulator1.4.1206win_32-pentiumarmulate.sdi<br />%Install&nbsp;Path%RVARMulatorARMulator1.4.1206win_32-pentiumv6armiss.sdi<br />%Install&nbsp;Path%RVARMulatorv6ARMulator1.4.1238win_32-pentiumv6thumb2.sdi<br />%Install&nbsp;Path%RVARMulatorv6ARMulator1.4.1238win_32-pentiumv6trustzone.sdi
hqgboy 发表于 2007-5-15 19:53 | 显示全部楼层

谢谢。。。。

  
mohanwei 发表于 2007-5-15 20:11 | 显示全部楼层

楼主比较强悍,有机会多多交流,呵呵

我正在做一块AT91SAM9260的简易开发板,还没开始调试,估计到时候会碰到不少问题……^_^<br />http://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2530533&tp=AT91SAM9260%u7B80%u6613%u5F00%u53D1%u677F%uFF082%u5C42%uFF09PCB%u548C%u539F%u7406%u56FE <br /> 相关链接:<a href='http://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2530533&tp=AT91SAM9260%u7B80%u6613%u5F00%u53D1%u677F%uFF082%u5C42%uFF09PCB%u548C%u539F%u7406%u56FE'>http://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2530533&tp=AT91SAM9260%u7B80%u6613%u5F00%u53D1%u677F%uFF082%u5C42%uFF09PCB%u548C%u539F%u7406%u56FE</a>
xieqin 发表于 2007-11-19 09:11 | 显示全部楼层

呵呵

bun.job主要用来记录bin的路径和loadregion的起始地址啊.<br />为何不改成直接解析hex文件格式哦?&nbsp;这就没有&quot;烧写任务&quot;最多4个限制了.<br />感觉这种烧写方法ulink差不多.都是通过运行一个程序烧写另一个程序.<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

649

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

59

主题

649

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部