【问题标题】:trace32 using python: how to interpreat return data from function T32_ReadMemoryObjtrace32 使用 python:如何解释函数 T32_ReadMemory Obj 的返回数据
【发布时间】:2023-03-27 07:16:01
【问题描述】:

代码用于从 32 位地址读取 40 字节数据:

    size = 40
    addr = 0x02051000
    buffer = (c_uint8 * size)()
    buffer_handle = c_void_p()
    address_handle32 = c_void_p()
    self.t32_api.T32_RequestBufferObj(byref(buffer_handle), 0)
    self.t32_api.T32_RequestAddressObjA32(byref(address_handle32), addr)
    self.t32_api.T32_ReadMemoryObj(buffer, address_handle32, size)
    self.t32_api.T32_CopyDataFromBufferObj(buffer, size, buffer_handle)
    self.t32_api.T32_ReleaseBufferObj(byref(buffer_handle))
    return ''.join(map(str, buffer))

返回数据:000000004000000003213746596610040000000000000000 但在跟踪 32 窗口中显示

API 是否返回不正确的数据?或者我的代码无效?

【问题讨论】:

  • 嗨 Nirmi,你确定你读的是同一个内存吗?您没有设置任何访问等级。可以添加整个 Data.dump 窗口的图片吗?
  • @dev15 更新了准确值和图片
  • 您使用的是哪种架构? Remote API 总是使用字节地址,而 TRACE32 有一些地址乘数,取决于多种因素。
  • 另一个猜测:您可以尝试使用T32_SetAddressObjAccessString 设置访问类,在您的情况下是这样的:self.t32_api.T32_SetAddressObjAccessString(byref(address_handle32), b"MD")self.t32_api.T32_RequestAddressObjA32(byref(address_handle32), addr) 之后。
  • 最新的 DVD R.2020.09 也有一个 Python 模块,它可以帮助你很多,但请确保你的许可证有效:你可以在这里得到它:lauterbach.com/frames.html?download_trace32.html

标签: embedded python-3.8 trace32 lauterbach


【解决方案1】:

它以整数格式返回字节大小

从缓冲区获取每个整数并将其转换为十六进制对我来说也适用于另外一个代码更改:

    self.t32_api.T32_ReadMemoryObj(buffer_handle, address_handle32, size)

在前面的代码中,我传递的是缓冲区而不是缓冲区句柄。 添加代码将每个字节转换为十六进制得到输出后:000000000000000004000100000000027856341200000000000000000000000000000000000000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2013-02-18
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多