UL要求我们在运行时验证我们的软件——这意味着计算包含程序的内存部分的校验和,并将其与已知值进行比较。问题是,在源代码的任何地方包含这个已知值会改变内存中生成的二进制文件/映像。2003年的一个线程(见底部)建议可以手动将校验和附加到.bin文件,然后从程序中访问该值。这似乎是我最好的选择,但有一些问题:

我必须使用RFU来上传.bin,这意味着没有调试(很大的缺点)

目前还不清楚如何准确计算追加的值将在内存中结束的位置(在值之前添加一个“魔术字符串”,然后搜索该字符串,有助于此)。

这个值很难获得——每次重新构建软件时都必须重新计算它,而且我不知道如何通过查看.bin文件来获得它。在我看来,我必须在Rabbit上运行代码,并让它在串行端口上输出正确的校验和,然后将该值附加到.bin文件

有没有更好的办法?也许.bin文件已经内置了一个校验和。是否有一些文件指定了。bin文件的格式?任何关于Rabbit编译器的最终/中间输出的文档,或者可以处理这些输出的工具,在这里都可能很有用。

http://osdir.com/ml/hardware.rabbit-semiconductor/2003-04/msg00178.html

我附加了一个短程序,它为flash中的整个程序计算16位校验和。您可以将其作为需求的基础。

int ChkSumBuffer [256];
main ()

长TopOfProgram;
长导火索;
int CheckSum, i,j;

TopOfProgram = prog_param.HPA.aaa.a。addr + (prog_param.HPA.aaa.a.base<<12);

CheckSum = 0;// init校验和值
FlashPointer = 0;// flash开始点
while (FlashPointer < TopOfProgram)
{j = xmem2root (ChkSumBuffer, FlashPointer, 512);
(我= 0;我< 256;CheckSum += ChkSumBuffer[i];
FlashPointer += 512;
}
}

我遇到的另一个问题是,每次重新编译时,二进制文件的校验和都会发生变化。我可以通过导航来解决这个问题
选项- >选项- >定义项目

创建一个新的条目,写着

FIRMWARE_TIMESTAMP= 0 x00

干杯