21ic问答首页 - MPLAB X IDE中使用hexmate工具生成的16位checksum问题
MPLAB X IDE中使用hexmate工具生成的16位checksum问题 赏100家园币
JackTang19942022-07-28
请问下,我在使用hexmate生成的16位checksum与hexmate手册中CheckSum算法代码所生成checksum不一样?以下为hexmate用户手册7.1.1 Addition Algorithms中的checksum生成代码
#include <stdint.h>
typedef uint8_t read_t; // size of data values read and summed
typedef uint16_t result_t; // size of checksum result
// add to offset, n additions of values starting at address data,
// truncating and returning the result
// data: the address of the first value to sum
// n: the number of sums to perform
// offset: the intial value to which the sum is added
result_t ck_add(const read_t *data, unsigned n, result_t offset)
{
result_t chksum;
chksum = offset;
while(n--) {
chksum += *data;
data++;
}
return chksum;
}
实际工程中的checkSum设置:
hexmate ${ImagePath} -FILL=0x3FFF@0x0000:0x7FFB -CK=0x0800-0x0802@0x7FFC+0x00w-2t34g1 -o${ImagePath}
在MPLAB X IDE的Program Memory窗口中查看到的0x400地址处内容为0x3184,如果按照上述checkSum计算方法得到的checksum值为B5,而使用hexmate生成的checksum值为C9
请问下,到底这个hexmate生成的16位checksum算法是怎样的?
#include <stdint.h>
typedef uint8_t read_t; // size of data values read and summed
typedef uint16_t result_t; // size of checksum result
// add to offset, n additions of values starting at address data,
// truncating and returning the result
// data: the address of the first value to sum
// n: the number of sums to perform
// offset: the intial value to which the sum is added
result_t ck_add(const read_t *data, unsigned n, result_t offset)
{
result_t chksum;
chksum = offset;
while(n--) {
chksum += *data;
data++;
}
return chksum;
}
实际工程中的checkSum设置:
hexmate ${ImagePath} -FILL=0x3FFF@0x0000:0x7FFB -CK=0x0800-0x0802@0x7FFC+0x00w-2t34g1 -o${ImagePath}
在MPLAB X IDE的Program Memory窗口中查看到的0x400地址处内容为0x3184,如果按照上述checkSum计算方法得到的checksum值为B5,而使用hexmate生成的checksum值为C9
请问下,到底这个hexmate生成的16位checksum算法是怎样的?
赞0
做Bootloader升级用的,IDE生成代码时产生一个checksum,然后MCU程序里再读取升级的bin文件再次计算一次checksum。比对两次checksum来确认checksum镜像文件是否合法。
评论
2023-04-21
赞0
评论
2023-01-07
赞0
评论
2023-01-06
赞0
评论
2023-01-05
赞0
评论
2023-01-05
赞0
评论
2022-11-08
赞0
将0x0000到0x7FFB之间未用的空间填充为0X3FF。
-CK=0x0800-0x0802@0x7FFC+0x00w-2t34g1 -o${ImagePath}
计算从0x0800到0x0802的校验和,结果放在0x7FFC,初始值是0x00。校验和结果为2字节宽,算法是加8位值,结果嵌入34。
把你的memory贴图上来看一下呀。
评论
2022-07-29
不好意思,我没认真看清楚。后面查看了手册是确实累加算法,我自己看错累加的数据个数了,0x0000-0x7FFB是从0开始的并且包含0x7FFB地址。代码中用的CheckSum是标准的16位CheckSum计算算法。
您需要登录后才可以回复 登录 | 注册