Keil debug command SAVE 命令保存文件的解析

本文介绍了如何使用Python脚本将Keil调试时dump出的INTEL HEX386格式文件转换为人可读的文本格式。通过解析由Keil debug命令SAVE产生的文件,脚本将32位对齐的目标地址内容写入TXT文件,便于理解和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

使用 Keil debug 很方便,把内存中的一段区域 dump 出来也很方便,例如使用命令 SAVE filepath startAddr, endAddr, typeCode 。但是要查看 dump 出来的内容却很不方便。因为 dump 出来的格式是 INTEL hex386 格式的,这个格式是给机器读的而不是给人读的。

例如下面是一个完成的 INTEL HEX386 格式的文件,你能看懂是什么意思吗?

:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF

把 hex386 格式的文件翻译成人能看到的格式是很有必要的,我参考 keil 官方资料 编写了一个 Python 脚本,输入的文件必须是 SAVE filepath startAddr, endAddr, 0x04 产生出来的文件,其中的 typeCode=0x04 表示目标地址时 32bit 对齐的。

脚本所做的事情就是读取输入文件(例如 abc.hex)处理之后把寄存器的地址-值对写到输出文件(和输入文件名相同,后缀名为 txt)。

Python 脚本

脚本内容如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 18 09:46:05 2019

@author: LinTeX9527

@version: v0.1-20190718

@desc: convert HEX386 file to txt file.
"""

import os.path

class RegAddrCls:
    """
    an entity represents register addr-value pair.
    """
    def __init__(self, addr, value):
        #super(RegAddrCls, self).__init()
        # default value
        self.__addr = 0
        self.__value = 0
        self.__valid = False
        
        self.regAddr = addr
        self.regValue = value
     
   
    @property
    def regAddr(self):
        return self.__addr
    
    @regAddr.setter
    def regAddr(self, addr):
        if isinstance(addr, int):
            self.__addr = addr
        else:
            raise TypeError("@addr must be a number")
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值