Damogu H86CONVERTER
提示:H86转Hex文件
开发者:大蘑菇(919740574@qq.com)
时间支配:Two Night Finished
总结设计的需求、理念以及对知识的沉淀。
文章目录
前言
为何会做这样一个工具?
1.台架搭建耗费大量时间
2.工具生成的是H86
3.客户需求是Hex文件
4.出差在外无法搭建台架反读
5.工具紧缺及工具成本
6.简单的工作耗费大量人力物力
7.设计开发人员干活很累
8.提升面向对象的开发过程的能力
提示:以下是本篇文章正文内容,下面案例可供参考
一、H86CONVERTER是什么?
1.1简介
H86CONVERTER是一款基于MFC窗体应用的对话框程序;
功能:将H86文件转换为Hex文件
优点:告别台架、无需硬件支持,仅需要一款软件就能实现
1.2诞生背景
说来还真是不好意思,就是为了不想加班;
在一次下班的过程中,出差的同事临时打电话让把生成的H86转成Hex格式,无奈只能留在公司搭好台架,通过烧写器将程序烧录并进行反读,虽然是一个很简单的工作,但是耽误了下班的班车。
我的师傅曾经说过:懒人才能推进科技的进步!
二、页面布局
2.1整体布局
2.2Logo设计
2.3精简界面
二、需求
2.1基本需求
SWR1:软件依赖性检查对Hex文件的严格要求,必须是连续的Hex文件。
SWR2:如何在出差的情况下,没有台架的情况下完成格式的提取
2.2进阶需求
SWR3:转换的起始地址和终止地址动态可调
SWR4:转换后的文件每行的有效数据动态可调
三、设计思路
3.1格式转换的大框架
3.1.1输入H86
输入的就是H86文件的路径
输入路径设置好了以后要做的就是对该文件的读操作
3.1.2输出Hex
输出的就是hex文件的路径
输出路径设置好了以后要做的就是对该文件的写操作
3.1.3答疑
1.H86和Hex文件不都是Intel格式,为何还要用来转换?
答:Keil生成的H86文件不是连续的区域,不符合当前依赖性检查策略
2.转换的H86有什么前提要求吗?
答:有的,需要将FillByte填充为0x00
3.设置起始地址和终止地址软件能够自动判断要转换的区域吗?
答:可以的,软件会通过输入的起始地址和终止地址来判断它即将要写的扇区及大小
4.假如起始地址和终止地址计算的值不足设置的行有效长度会如何?
答:系统会自动判断最后一次循环的长度,实现设置转换到目标地址
四、Intel 格式解读
五、读取文件设计思路
1.遍历所有行读取每一行的数据
2.获取当前行数据,并将当前行的数据依次提取其有效长度、偏移地址、数据类型、有效数据等
3.读取完所有数据后,按照偏移地址将数据存放在缓存变量中
4.计算文件有效数据总体大小以及每个扇区有效数据长度总大小
5.上述信息将用于写操作
六、分析起始地址、终止地址
1.获取起始地址、终止地址数据的数据并拆分获取相关信息;
2.获取起始地址扇区、终止地址扇区;
3.拆解出起始的偏移地址及终止偏移地址;
4.获取设置的每行有效数据大小的值;
5.通过起始地址、终止地址计算出写操作要进行的数据大小
6.通过终止地址扇区计算写操作的大循环要执行次数
7.通过起始地址扇区决定大循环循环的起始扇区
8.构造一个计算单行数据Crc的函数接口
9.写操作考虑特殊情况下数据类型为04时候的写操作
10.判断写多少个扇区,执行多少个大循环
11.考虑一行数据写多长,计算一个扇区需要执行多少个循环才能把数据写完
12.考虑数据不足一个扇区的时候,循环多少行
13.考虑程序循环过程中的计数,是否达到或者循环到最后一次循环
14.考虑最后一次循环的长度与设置的长度之间的对比
15.考虑如何写完一行后把校验值计算并加载在该行末尾
16.考虑最后一行数据是否跟设置相符合
17.考虑写完成后如何完成最后一行的写操作
做一个设置的功能真的需要考虑很多很多的因素,以上信息概括不完全,在实际的编码实现中,嵌套了很多层switch及for循环,逻辑很庞大,最终完成了设置代码的设置。
七、写操作
1.H86有数据的地方按照偏移地址依次书写
2.没有数据的地方填充为0x00
3.格式转换的设计主要是读和写的过程,当然,最主要的是设置功能的实现,需要考虑的诸多因素。
八、演示
九、测试
在后续的多组测试中,发现转换后的文件与直接将H86刷入文件后反读出来的数据是完全一致的,同时,设置的起始地址和终止地址也能完美的解决动态地址及大小读取。
总结
总结也是一场修行,自己写的代码可能过一段时间便会逐渐遗忘,但是编程的思想是会保留的,编程思想>实现。