问题描述:量产的产品中发现某数据阈值不合适,需要更改阈值,发现服务器中的源码(keil工程stm32单片机)并非现有hex的源码,由于原有开发人员离职,现在改阈值可以通过直接改hex中的数据;

所需工具:数据比较软件compare++,数据和校验小工具Calcu Check,下载工具jlink V8+jflash软件;

方法如下:

   在现有代码中找到要更改的值,发现该阈值在某结构体中,两次更改阈值并通过keil生成新的两个hex文件,通过软件compare++比较这两个hex的差异处,找到阈值的存储方式,如查找到多处则查看前后数据是否对应源码中结构体中其他数据,依次来确定阈值在hex中的存储方式和值;如下图:

源码与现有烧写的hex文件不对应,在hex中更改某数据的方法

通过 

https://blog.csdn.net/p1279030826/article/details/106497858?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://blog.csdn.net/dongdong0071/article/details/53149348?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-10.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-10.nonecase

明白了每行数据的存储方式为小端模式

1)大端模式:

低地址 -----------------> 高地址
0x12  |  0x34  |  0x56  |  0x78
2)小端模式:

低地址 ------------------> 高地址
0x78  |  0x56  |  0x34  |  0x12
可见,大端模式和字符串的存储模式类似。

方式(大小端存储)

明白了每行的意思:数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][检验码1Byte]

例如如下:需要修改结构体中的22000,则通过比较法找到差异处(红色字):

const LinerMotorParam XAxisMtParam=
{
    24000,//totalsteps 4字节
    200,//sensretsteps4字节
    0,//orignpos4字节
    400,4字节
    1,//postdir1字节
    0x2 ,//senslimit1字节
}; //

差异处行代码(16进制):1057A00000F00E00DC050000C8002602F0550000E5

由上分析可知10表示16个字节的数据,57A0是存储地址(4个字符表示),00表示类型,之后就是16个字节数据,最后一个是校验码,校验方法该行的所有字节(校验码不加进去)相加,之后用0x100减去和就得到校验码;链接中有说明。

举一个简单的例子,如第一行020000040800F2

0x02+0x00+0x00+0x00+0x04+0x08+0x00 = 0x0E

0x100 – 0x0E = 0xF2.

由此可知差异处的F0550000即是22000,有计算器换算可确认,如下图:

源码与现有烧写的hex文件不对应,在hex中更改某数据的方法源码与现有烧写的hex文件不对应,在hex中更改某数据的方法

而该行接下面的一行是:1057B000C80000000000000090010000010200008D

其中C800000000000000900100000102分别对应结构体变量中的其他几个数据,由此可以完全确定阈值是否定位准确;

更改22000为24000,即在compare++中将F055改为C05D,另外通过校验和小工具计算更改后的和为0x73(每个字节用空格隔开),并0x100减去0x73得到检验码为0x8D,都更改后保存并通过jflash烧写到stm32中,测试通过;

源码与现有烧写的hex文件不对应,在hex中更改某数据的方法

检验码不正确是无法通过jflash 下载进去的。

源码与现有烧写的hex文件不对应,在hex中更改某数据的方法

相关文章:

  • 2022-01-11
  • 2021-09-11
  • 2022-02-27
  • 2021-05-24
  • 2021-07-25
  • 2021-06-30
  • 2021-09-20
猜你喜欢
  • 2022-12-23
  • 2021-05-17
  • 2022-12-23
  • 2022-12-23
  • 2021-11-10
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案