MPLAB X IDE中使用hexmate工具生成的16位checksum问题

[复制链接]
200|1
手机看帖
扫描二维码
随时随地手机跟帖
JackTang1994|  楼主 | 2022-7-28 10:27 | 显示全部楼层 |阅读模式
请问下,我在使用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算法是怎样的?

使用特权

评论回复
lcczg| | 2022-7-29 15:55 | 显示全部楼层
-FILL=0x3FFF@0x0000:0x7FFB
将0x0000到0x7FFB之间未用的空间填充为0X3FF。
-CK=0x0800-0x0802@0x7FFC+0x00w-2t34g1 -o${ImagePath}
计算从0x0800到0x0802的校验和,结果放在0x7FFC,初始值是0x00。校验和结果为2字节宽,算法是加8位值,结果嵌入34。

把你的memory贴图上来看一下呀。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则