This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在编程过程中将 CRC 装入 Flash

按规定,我必须计算 CRC,然后再与存储在 Flash 存储器中上一个位置的 CRC 进行比较。那么在我将程序的其余部分加载到 Flash 中时,我应如何填充 Flash 中的上一个可用地址呢?我想把这两件事情一步完成,而不是分为两步,因为我需要将其发送给我们加载程序的生产小组,目的是让相关流程尽可能地简单。

  • 是的,您不应该使用代码安全段。另外,Flash 的切入点也在那里,应尽量避开。不过您对 Flash 的理解有一些不正确的地方,您不能只简单地擦除两个字节(即,对我们这个案例来说是两个字),您必须一次性擦除整个段。您可以不管这两个字,先编写大部分段,同时它们会保持被擦除状态,然后可以在不擦除它们的情况下稍后编写 CRC 值。我知道这并不是您想要的结果,只是想确定一下 Flash 的工作方式。

    我想基本上您是在问我怎样将常数嵌入到 Flash 中。您所需要做的是,在您的 .c 代码中声明该值,比如:

    const Uint16 FlashCRCGoldenValue = 0x1234;

    另外,在您的 .c 代码中,您也需要根据下列方式引导链接程序:

    #ifdef __cplusplus

    #pragma DATA_SECTION("FlashCRCFile")

    #else

    #pragma DATA_SECTION(FlashCRCGoldenValue,"FlashCRCFile");

    #endif

    然后您需要在 MEMORY 部分中“PAGE 1”标题下的 .cmd 链接程序文件中添加:

      FLASH_CRC      : origin = 0x3F7FF0, length = 0x000001     /* Flash CRC Golden Value */

    在 SECTIONS 部分添加:

      FlashCRCFile: > FLASH_CRC,   PAGE = 1

    您还需要在链接程序命令文件中重新安排一些其它变量,这样这个字就不会覆盖某些已经定义的内容。确保在上述“origin”中指定的地址就是您希望装入 Flash 的地址。我不太清楚您使用的是哪种器件。