搜索
bottom↓
回复: 15

寻找一款文件捆绑工具

[复制链接]

出0入0汤圆

发表于 2013-9-23 22:25:53 | 显示全部楼层 |阅读模式
功能要求能把指定的多个文件按顺序简单合成一个文件(首尾相连),并输出每个文件开始的偏移地址。

周立功TKStudio里面有一款文件捆绑工具,但是不是自动把每个文件首尾相接的,而是要求手工指定每个文件的起始地址。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-9-23 22:55:47 | 显示全部楼层
用C#写一个,应该不难的。

出0入0汤圆

发表于 2013-9-23 22:58:20 | 显示全部楼层
同意楼上的,看要求是专门定制工具,
自己动手丰衣足食
VB也可以。
网上大把教程

出0入0汤圆

发表于 2013-9-23 23:04:06 | 显示全部楼层
首尾顺序相连,用COPY命令行就行,偏移根据文件大小自己算一下,比如用excel排个表,套个SUM公式上去。

出0入0汤圆

 楼主| 发表于 2013-9-24 07:12:40 | 显示全部楼层
twitter 发表于 2013-9-23 23:04
首尾顺序相连,用COPY命令行就行,偏移根据文件大小自己算一下,比如用excel排个表,套个SUM公式上去。 ...

哦,谢谢!
有一千多个文件,自己统计偏移地址的话工作量会很大。实在没有现成的工具的话只能自己做一个软件了。

出0入0汤圆

发表于 2013-9-24 08:37:19 | 显示全部楼层
WHY?
         

出0入0汤圆

 楼主| 发表于 2013-9-24 08:48:16 | 显示全部楼层
tiger5 发表于 2013-9-24 08:37
WHY?

用来捆绑UI图片。本来想用YAFFS2的,但是因为是只读的,用YAFFS2的话杀鸡用牛刀了,运行速度上反而更慢了。所以准备直接把图片捆绑成一个文件,烧写到NAND Flash里直接通过偏移地址寻址。
坏块管理准备采用直接跳过坏块的方法。因为是只读的,新的坏块我觉得主要还是在擦除和编程的时候出现的,另外因为是图片,错个一两位也未必看的出来,所以准备不使用ECC校验。

出0入0汤圆

发表于 2013-9-24 10:48:00 | 显示全部楼层
shandian 发表于 2013-9-24 08:48
用来捆绑UI图片。本来想用YAFFS2的,但是因为是只读的,用YAFFS2的话杀鸡用牛刀了,运行速度上反而更慢了 ...

谢谢回复。

只在SPI显示过汉字图片。

出0入0汤圆

发表于 2013-9-24 23:09:24 | 显示全部楼层
直接将图片转成c语言数组,编译成程序使用。

出0入24汤圆

发表于 2013-9-24 23:39:08 | 显示全部楼层
shandian 发表于 2013-9-24 07:12
哦,谢谢!
有一千多个文件,自己统计偏移地址的话工作量会很大。实在没有现成的工具的话只能自己做一个 ...

COPY *.* ALL.XXX 命令合并 ,DIR *.* >ALL.TXT 命令输出各个文件大小信息,将ALL.TXT最后用EXCEL处理一下即可。

出0入0汤圆

发表于 2013-9-25 01:24:02 | 显示全部楼层
shandian 发表于 2013-9-24 08:48
用来捆绑UI图片。本来想用YAFFS2的,但是因为是只读的,用YAFFS2的话杀鸡用牛刀了,运行速度上反而更慢了 ...

我的SPIflash中有中英文各两种种字体字库,两百来段WAV语音,还有十来张图片,母本是用STM32+SD卡+fatfs按一定的规则顺序(同时可以生成一个类似目录的地址表存放在靠前地址,方面查找)写入flash中,然后将整个flash读出来生成一个HEX文件。

出0入0汤圆

 楼主| 发表于 2013-9-25 06:59:39 | 显示全部楼层
solisgood 发表于 2013-9-24 23:39
COPY *.* ALL.XXX 命令合并 ,DIR *.* >ALL.TXT 命令输出各个文件大小信息,将ALL.TXT最后用EXCEL处理一 ...

非常感谢,我试试。

出0入0汤圆

 楼主| 发表于 2013-9-25 07:01:12 | 显示全部楼层
zyw19987 发表于 2013-9-25 01:24
我的SPIflash中有中英文各两种种字体字库,两百来段WAV语音,还有十来张图片,母本是用STM32+SD卡+fatfs ...

恩,这样的话工作量其实和在电脑上用C#做个程序差不多,可能还是在电脑上弄更快一点。

出0入8汤圆

发表于 2013-9-25 08:19:18 | 显示全部楼层
本帖最后由 kebaojun305 于 2013-9-25 08:48 编辑

俺用python做的脚本(只需安装python2.7版的就可以了)  组合制定目录下的所有文件,并输出一个.h的头文件  头文件中包含所有文件的起始地址和文件大小。 前面有defin宏定义。
这个脚本还有很多改进的地方。刚学的时候 写的。
  1. # -*- coding: GBK -*-
  2. #!/usr/bin/env python   
  3. """本程序的目的是把指定目录下的所有文件合并成一个文件(二进制合并)."""   
  4. import os,sys

  5. class FileIntegrater(object):
  6.     def __init__(self, fn):
  7.         self._fhandle = open(fn, 'wb+')
  8.         self.statinfo=os.stat(fn)
  9.         self.length = self.statinfo.st_size
  10.         self.outinfo=[
  11. """/******************************************************\r\n\
  12. * 本文档输出的地址和数据单位是字节\r\n\
  13. *******************************************************/\r\n\
  14. """]
  15.         print self.length

  16.     def append(self, fn,name,cou):
  17.         _contents = []
  18.         
  19.         #outfile=open('f:/pro.txt','w')
  20.         if os.path.isfile(fn):
  21.             self.statinfo=os.stat(fn)
  22.             _len=self.statinfo.st_size
  23.             #_contents = open(fn, 'rb').read(_len)
  24.             _contents = open(fn, 'rb').read()
  25.             self._fhandle.write(_contents)
  26.             self._fhandle.flush()
  27.             if cou>76 :
  28.                 self.outinfo.append('#define A'+str(cou-76)+' ')               
  29.             else :
  30.                 self.outinfo.append('#define P'+str(cou)+' ')
  31.             self.outinfo.append(repr(self.length))
  32.             
  33.             if cou>76 :
  34.                 self.outinfo.append('/2,'+repr(_len)+'/2  /*')
  35.             else :
  36.                 #self.outinfo.append('/2,'repr(_len)+'/2,')
  37.                 self.outinfo.append('/2,')
  38.                 name_len=len(name)               
  39.                 x_len=name.find('x',(name_len-12),name_len)
  40.                 d_len=name.find('.',(name_len-12),name_len)
  41.                 h_len=name.find('_',(name_len-12),name_len)
  42.                
  43.                 self.outinfo.append(name[(h_len+1):x_len]+',')
  44.                 self.outinfo.append(name[(x_len+1):d_len]+' /*')
  45.             self.outinfo.append(name)
  46.             self.outinfo.append('*/ \r\n')
  47.             self.length += _len
  48.             #print outinfo
  49.            # print 'New File length:',self.length
  50.           #  print 'INFO:', fn, '[length: ' + repr(_len) + ']', 'has been appended.'
  51.         else:
  52.             print 'ERROR:', fn, 'is not a file.'
  53.             return

  54.     def close(self):
  55.         self._fhandle.close()
  56.         print 'End file length:',self.length
  57.         f=open('h:\PROJECT\screw_oil_expeller\project\榨油机\const.h','wb')
  58.         for i in self.outinfo:
  59.         
  60.             f.write(i)
  61.         f.close
  62.        # outfile.write(outinfo)
  63.       #  outfile.close()
  64.         
  65. def walkdir(dirname,out_file_name):
  66.    
  67.     fi=FileIntegrater(out_file_name)
  68.     count=0;
  69.     try:
  70.         ls=os.listdir(dirname)
  71.     except:
  72.         print 'access deny'
  73.     else:        
  74.         for l in ls:
  75.             temp=os.path.join(dirname,l)
  76.             count=count+1;
  77.             #temp.encode('gb2312')            
  78.             fi.append(temp,l,count)
  79.             if(os.path.isdir(temp)):
  80.                 walkdir(temp)
  81.             else:
  82.                 print temp
  83.         fi.close()


  84. if __name__=="__main__":
  85.    
  86.     #b=raw_input("请输出输出文件的目录和文件名:")
  87.     #r=raw_input("请输出要合并的目录:")
  88.    
  89.     walkdir('h:/PROJECT/screw_oil_expeller/bin','F:/PROJECT/screw_oil_expeller/pro.bin')
  90.     #sys.exit()
复制代码
输出的头文件 是这样格式的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-9-25 09:40:21 | 显示全部楼层
kebaojun305 发表于 2013-9-25 08:19
俺用python做的脚本(只需安装python2.7版的就可以了)  组合制定目录下的所有文件,并输出一个.h的头文件  ...

太感谢了,我来研究下怎么使用。不会的地方再向你请教。

出0入8汤圆

发表于 2013-9-25 11:34:04 | 显示全部楼层
shandian 发表于 2013-9-25 09:40
太感谢了,我来研究下怎么使用。不会的地方再向你请教。

可以   python的64位安装程序 才15M  代码编写用记事本就可以了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 06:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表