用Python编写用于IAR内存上传和下载的motorola格式转换工具

news2024/11/18 7:29:17

需求背景

IAR导出和载入内存支持 motorola 格式和 intel-extended 格式:

IAR保存内存

其中 motorola 格式以16进制表示,在输出文件中可以直接看到内存地址信息,并且文本长度比 intel-extended 格式更短。

所以我这里以 motorola 格式为基础,用Python开发hex和bin文件之间的转换程序。

解析文件

打开一个IAR工程,从 0x0C8A4FE4 地址处开始截取一段内存,保存为 motorola.hex

得到的内容为:

S0030000FC
S3150C8A4FE401800011FBFFFFFEFFFFBFFF0002008159
S3150C8A4FF416210010BBFFFFFFFFFFBEFFC90000216D
S3150C8A500410000000FEFFFFFFFF7FFBFF000000007D
S3150C8A501440000000FFFFFFFBFDFF7FFE48100010D7
S3150C8A502410088210FFFBFFF9FFFFFFFD84000001C5
S3060C8A5034944B
S70500000000FA

参考motorola-s19格式标准:

整理一下按空格隔开,分为 命令长度地址数据校验位 这几个部分:

S0 03 0000 FC
S3 15 0C8A4FE4 01800011FBFFFFFEFFFFBFFF00020081 59
S3 15 0C8A4FF4 16210010BBFFFFFFFFFFBEFFC9000021 6D
S3 15 0C8A5004 10000000FEFFFFFFFF7FFBFF00000000 7D
S3 15 0C8A5014 40000000FFFFFFFBFDFF7FFE48100010 D7
S3 15 0C8A5024 10088210FFFBFFF9FFFFFFFD84000001 C5
S3 06 0C8A5034 94 4B
S7 05 00000000 FA

其中 校验位 必须要计算正确,不然是传不上去的,我已经试过了。

转换程序

由于快速开发的需求日益增多,我决定广泛使用自己开发的 lsx 库作为编程基础,而不仅仅再只使用内建库。

该库大小仅为24KB,不额外依赖第三方库,支持多种平台、支持3.4以上的Python版本,非常方便携带。

安装 lsx 库的方法:

pip install lsx -U

最后的程序、和测试例子:

import lsx
import struct
import binascii

def hex2bin(path):
    assert '.hex' == lsx.ext(path), lsx.ext(path)
    text = lsx.read(path)
    lines = text.splitlines()
    lines = [line[12:-2] for line in lines[1:-1]]
    data = binascii.a2b_hex(''.join(lines))
    lsx.write(lsx.p12(path, '.bin'), data)

def bin2hex(path, addr=0):
    assert '.bin' == lsx.ext(path), lsx.ext(path)
    lines = ['S0030000FC']
    data = lsx.readb(path)
    for block in lsx.split(data, 16):
        block = struct.pack('>i', addr) + block
        block = struct.pack('>b', len(block) + 1) + block
        block = block + bytes([0xFF - (sum(block) & 0xFF)])
        line = 'S3' + binascii.b2a_hex(block).upper().decode()
        lines.append(line)
        addr += 16
    lines.append('S70500000000FA')
    lsx.write(lsx.p12(path, '.out.hex'), lines)

if __name__ == '__main__':
    hex2bin('motorola.hex')
    bin2hex('motorola.bin', 0x0C8A5000)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【b站-湖科大教书匠】6 应用层 - 计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 6 应用层 6.1 应用层概述 6.2 客户-服务器方式和对等方…

【iOS】暑期第一周——ZARA app仿写

目录 前言无限轮播图分栏控件和滚动视图自定义cell遇到的问题调整图标大小单元格附件视图设置 总结 前言 暑假学习的第一周任务是对ZARA app进行仿写,充分运用之前学习的Objective-C语言和UI控件。我在编写demo的过程中遇到了一些问题,特写该博客作为学习…

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1:问题现象:问题分析: 问题2:问题现象:问题分析:解决方案: 事后现象 事前现象 问题1: 问题现象: 在本地调试时,一切顺利,但一…

2.10.批量归一化

批量归一化 ​ 损失出现在最后,所以后面的层训练比较快,而数据在最底部,则: 底部的层训练较慢底部层一变化,所有都会跟着变化最后的层需要重新学习多次 ​ 最后导致收敛变慢。 ​ 或许我们可以通过固定输出和梯度的…

古文:李密《陈情表》

原文 臣密言:臣以险衅,夙遭闵凶。生孩六月,慈父见背;行年四岁,舅夺母志。祖母刘愍臣孤弱,躬亲抚养。臣少多疾病,九岁不行,零丁孤苦,至于成立。既无伯叔,终鲜…

说说你对redis的理解

数据结构 String:缓存对象、常规计数、分布式锁、共享session信息 hash:(包含键值对的无序散列表) list:消息队列 set:聚合计算、点赞、公共关注、抽奖活动 zset:(格式key、val…

【Streamlit学习笔记】Streamlit-ECharts热力图tooltip提示信息拓展

Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件,用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制热力图展示 在基础热力…

【强化学习的数学原理】课程笔记--5(值函数近似,策略梯度方法)

目录 值函数近似一个例子TD 算法的值函数近似形式Sarsa, Q-learning 的值函数近似形式Deep Q-learningexperience replay 策略梯度方法(Policy Gradient)Policy Gradient 的目标函数目标函数 1目标函数 2两种目标函数的同一性 Policy Gradient 目标函数的…

18967 六一儿童节

这个问题可以使用贪心算法来解决。我们可以先将孩子们的需求和巧���力的重量都进行排序,然后从最大的需求开始,找到能满足这个需求的最大的巧克力,将其分给这个孩子。然后继续处理下一个需求,直…

基于微信小程序+SpringBoot+Vue的自助点餐系统(带1w+文档)

基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序的自助点餐系统前后台分离,让商品订单,用户反馈信息,商品信息等相关信息集中在后台让管理员管理,让用…

【进程间通信机制】管道和 FIFO、信号、消息队列、信号量、共享内存、套接字(Socket)

进程详细剖析,移步:https://blog.csdn.net/Thmos_vader/article/details/140750535 进程间通信 前文介绍:如何通过 fork()或 vfork()创建子进程,以及在子进程中通过 exec()函数执行一个新的程序; 谓进程间通信指的是…

考题相似度 AI 分析 API 数据接口

考题相似度 AI 分析 API 数据接口 基于 AI 的相似度评估,专有 AI 模型,包含评估详情 。 1. 产品功能 基于自有专业模型进行 AI 智能分析;提供详细的相似度评分和结果描述;高效的模型分析性能;全接口支持 HTTPS&#…

乐鑫ESP32-H2设备联网芯片,集成多种安全功能方案,启明云端乐鑫代理商

在数字化浪潮的推动下,物联网正以前所未有的速度融入我们的日常生活。然而,随着设备的激增,安全问题也日益成为公众关注的焦点。 乐鑫ESP32-H2致力于为所有开发者提供高性价比的安全解决方案,这款芯片经过专门设计以集成多种安全…

【时时三省】unity test 测试框架 下载

目录 1,unity test 测试框架介绍 2,源码下载 3,目录架构 4,git for window 下载安装方法: 1,unity test 测试框架介绍 Unity是一个用于C语言的轻量级单元测试框架。它由Throw The Switch团队开发&#…

工作很难受,还要不要继续留在职场上?

先说结论:我非常赞同大家离开职场 虽然小编现实的工作是有关于人力资源的,高级点叫做猎头,低俗点讲就叫“人贩子” 原因可能和其他人不太一样,大家自行理解 1.现在的社会资源太少,“蛋糕”太小 大家要明白最重要的…

TVL 破 3 亿美元的 Pencils Protocol,缘何具备持续盈利的能力?

Pencils Protocol 是行业内首个 DeFi Auction 的一站式聚合收益平台,其不仅支持 LaucnhPad、Staking、杠杆挖矿等系列功能,并有望成为 Scroll 生态重要的流动性枢纽,其目前正在基于该体系为 LRT 赛道赋能,目前在质押端不仅支持 ST…

【公式】因果卷积神经网络公式与应用解析

因果卷积神经网络公式与应用解析 因果卷积神经网络的核心作用 因果卷积神经网络(Temporal Convolutional Network, TCN)是一种专为时间序列预测而设计的网络结构。它通过因果卷积层,能够有效地处理时间序列数据,捕捉时间序列中的…

mediasoup simulcast实现说明

一. 前言 二. 空间可伸缩与时间可伸缩 三. mediasoup simulcast实现代码分析 1. 推流客户端开启 simulcast 2. mediasoup服务端接收simulcast流 3. mediasoup服务端转发流数据给消费者 a. SimulcastConsumer类声明 b. 获取预估码率,切换SimulcastConsumer的目…

大脑自组织神经网络通俗讲解

大脑自组织神经网络的核心概念 大脑自组织神经网络,是指大脑中的神经元通过自组织的方式形成复杂的网络结构,从而实现信息的处理和存储。这一过程涉及到神经元的生长、连接和重塑,是大脑学习和记忆的基础。其核心公式涉及神经网络的权重更新…