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.
是的,您不应该使用代码安全段。另外,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 的地址。我不太清楚您使用的是哪种器件。