我正在尝试编写脚本以将Intel HEX文件转换为Verilog mem格式。 我可以打印我要保存的字符串OK(例如,读取和解析位工作)但是当我尝试写入文件时,没有任何内容出现:(
ihexf = open("test.hex","r")
vmemf = open("test.mem","w")
for line in ihexf:
rlen_s = line[1:3]
addr_s = line[3:7]
rtyp_s = line[7:9]
rlen = int(rlen_s, 16)
addr = int(addr_s, 16)
rtyp = int(rtyp_s, 16)
# print(rlen_s,addr_s,rtyp_s)
if rtyp == 0:
# print('@'+addr_s)
vmemf.write('@'+addr_s+'\n')
for i in range (0, rlen):
laddr = addr + i
val_s = line[9+i*2:9+i*2+2]
val = int(val_s, 16)
# print(val_s)
vmemf.write(val_s+'\n')
# print("")
else:
print("------- End Of File ------")
ihexf.close()
vmemf.close()
我的test.hex看起来像
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF555540FF0A
:20000800155540FF055540FF015540FF005540FF001540FF000540FF000140FF000040FF56
:20001000000040FF000140FF000540FF001540FF005540FF015540FF055540FF155540FF4E
:00000001FF
我做错了什么线索?
答案 0 :(得分:0)
确保您已关闭文件,非常重要的是您将文件指针重新定位到文件的开头并开始阅读块。
ihexf.seek(0,0)
答案 1 :(得分:0)
好的 - 我知道发生了什么(我想!)
现有代码适用于Linux但不适用于Windows。 在Windows上,我在脚本完成后看到以下内容:
@0000
@0008
@0010
@0018
------- End Of File ------
Traceback (most recent call last):
File "C:\Users\Nigel\SkyDrive\Files\python\intexhex2v.py", line 8, in <module>
rlen = int(rlen_s, 16)
ValueError: invalid literal for int() with base 16: ''`
在文件读取结束时,事情看起来很糟糕。
在文件结束打印后添加break
修复了所有内容
由于