原创 学习Tcl(二)——二进制文件操作

2007-7-4 13:11 9986 6 5 分类: FPGA/CPLD

    一个把十六进制数转换为十进制数的小程序: riple


proc h2d {{hex_num 0}} {
  set tmp1 0x
  append tmp1 $hex_num
  set tmp2 [format "%d" $tmp1]
  return $tmp2
}


 


    一个读取二进制文件的小程序: riple


# Show current directory
set tmp [pwd]
puts "\n Current dir : $tmp"
# Open file
puts "\n Type in the file name"
gets stdin disk_file_name
set disk_file_fileid [open "$disk_file_name" "r"]
fconfigure $disk_file_fileid -translation binary
# Main loop
while {1} {
    # Set read original address                           
    puts "\n Type in the addrByte"
    gets stdin addrByte
    seek $disk_file_fileid $addrByte start                           
    # read binary                           
    puts "\n Type in the numByte"
    gets stdin numByte
    set disk_read [read $disk_file_fileid $numByte]
    binary scan $disk_read "H*" tmp0
    puts "\nReturned [expr [string bytelength $tmp0] / 2] Byte(s) : "
    puts "$tmp0"
    puts "\n"


}
# Close file
close $disk_file_fileid


 


    一个顺序执行初始化、写入、读出的交互式创建文件的小程序 riple


proc wr_file {{file_id} {Byte_content 5A} {Byte_num 512}} {
  set loop_end $Byte_num
  set loop_num 0
  while {$loop_num < $loop_end} {
    puts -nonewline $file_id $Byte_content
    set loop_num [expr $loop_num + 1]
  }
  flush $file_id
}


proc rd_file {{file_id} {Byte_num 512}} {
  return [read $file_id [expr $Byte_num * 2]]
}


# show current directory
  set tmp [pwd]
  puts "\n Current dir : $tmp"
# open file
  file mkdir disk_sector
  puts "\n Type in the file name"
  gets stdin disk_file_name 
  set disk_fileid [open "disk_sector/$disk_file_name" "w+"]
  fconfigure $disk_fileid -translation binary
# init file
  puts "\n INIT FILE"
  puts "\n Type in the Byte content"
  gets stdin Byte_content
  puts "\n Type in the Byte number"
  gets stdin Byte_num
  wr_file $disk_fileid $Byte_content $Byte_num
# write file
  puts "\n WRITE FILE"
  puts "\n Type in the Byte content"
  gets stdin Byte_content
  puts "\n Type in the Byte address"
  gets stdin Byte_addr
  puts "\n Type in the Byte number"
  gets stdin Byte_num
 
  seek $disk_fileid [expr $Byte_addr * 2] start
  wr_file $disk_fileid $Byte_content $Byte_num
# read file
  puts "\n READ FILE"
  puts "\n Type in the Byte address"
  gets stdin Byte_addr
  puts "\n Type in the Byte number"
  gets stdin Byte_num
 
  seek $disk_fileid [expr $Byte_addr * 2] start
  puts [rd_file $disk_fileid $Byte_num]


# close file
  close $disk_fileid


 


    文件访问权限: riple


    r+ :可取可存;文件必须已经存在。 riple


    w+ :先存后取;文件存在会被清空,文件不存在会被创建。 riple

文章评论1条评论)

登录后参与讨论

用户377235 2014-6-7 09:46

binary scan $disk_read "H*" tmp0 这个是把disk_read中的每个1或0转换为ACSII码,然后以16进制的字符串显示出来,不是把一个二进制字符串转换为对应的16进制字符串,上面的写法有问题吧!

相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
我要评论
1
6
关闭 站长推荐上一条 /2 下一条