硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1424|回复: 4
收起左侧

[其它] 每次发程序太麻烦,写个脚本调JFlash合并Bin文件

[复制链接]

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2021-12-16 20:59:34 | 显示全部楼层 |阅读模式
分享主体函数,我的开发环境:Python3.8。
  1. def merge_2bin(path, bin1, bin2, hex):
  2.     if Path(bin1).exists() and Path(bin2).exists():
  3.         bin1 += ',' + Bin1FileAddr
  4.         bin2 += ',' + Bin2FileAddr
  5.         cmd = JFlash_Path + " -hide -open" + bin1 + " -merge" + bin2 + " -saveas" + hex + " -exit"
  6.         if Path(hex).exists():
  7.             print("Override exist file:" + hex)
  8.         os.system(cmd)
  9.         if Path(hex).exists():
  10.             print("Generate file:" + hex)
  11.         else:
  12.             print("Execute failed:" + cmd)
  13.     else:
  14.         print("Path:", path, "Bin File Not Found.")
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2021-12-16 21:28:21 | 显示全部楼层
谢谢楼主分享,其实有更方便的办法,不需要依赖j-flash和python了。

仅需使用srec_cat.exe绿色小软件即可

使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载
https://www.armbbs.cn/forum.php? ... 6166&fromuid=58
(出处: 硬汉嵌入式论坛)



回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
 楼主| 发表于 2021-12-16 22:54:03 | 显示全部楼层
eric2013 发表于 2021-12-16 21:28
谢谢楼主分享,其实有更方便的办法,不需要依赖j-flash和python了。

仅需使用srec_cat.exe绿色小软件即 ...

知道它,不过一直在收藏夹里
开发环境中都有这俩软件,以后再加功能,也方便点。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
 楼主| 发表于 2021-12-17 16:23:11 | 显示全部楼层
增加1个判断一个Bin是不是包含另一个Bin:

  1. def CheckIfBinIncludeInBin(path, bin1, bin2):
  2.     if Path(bin1).exists() and Path(bin2).exists():
  3.         read_size = 1024

  4.         f1 = open(bin1, 'rb')
  5.         f2 = open(bin2, 'rb')
  6.         # 寻找头部匹配
  7.         buffer1 = f1.read(read_size)
  8.         f1_read_cnt = read_size
  9.         f2_read_cnt = 0
  10.         find_head = False
  11.         while True:
  12.             buffer2 = f2.read(read_size)
  13.             f2_read_cnt += len(buffer2)
  14.             if len(buffer2) == 0:
  15.                 print("File read end, head not matched.")
  16.                 break
  17.             elif buffer1 == buffer2:
  18.                 print("File %s head matched at 0x%X." % (bin1, f2_read_cnt - len(buffer2)))
  19.                 find_head = True
  20.                 break

  21.         if find_head is True:
  22.             while True:
  23.                 buffer1 = f1.read(read_size)
  24.                 buffer2 = f2.read(read_size)
  25.                 f1_read_cnt += len(buffer1)
  26.                 if len(buffer1) == 0:
  27.                     print("File %s compare end." % bin1)
  28.                     break
  29.                 elif len(buffer1) <= len(buffer2):
  30.                     if buffer1 == buffer2[:len(buffer1)]:
  31.                         continue
  32.                     else:
  33.                         addr = f1_read_cnt - len(buffer1)
  34.                         PrintDiff(addr, buffer1, buffer2[:len(buffer1)])
  35.                         continue
  36.                 else:
  37.                     print("File %s Compare failed." % bin1)
  38.                     break
  39.     else:
  40.         print("Path:", path, "Bin File Not Found.")
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2021-12-17 19:45:24 | 显示全部楼层
emwin 发表于 2021-12-17 16:23
增加1个判断一个Bin是不是包含另一个Bin:

Python的语法确实跟Lua差不多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 22:34 , Processed in 0.162267 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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