我已经声明了tydef结构,如下所示。
#define START_ADDR 0xXXXXX
typedef struct{
uint32_t checksum;
uint16_t index[len];
} block;
我使用以下语句更改了块的内存分配:
block *value = (block*) START__ADDR;
我也验证了内存分配的更改,并且没有问题。 现在,我尝试使用
更新校验和的值value->checksum=0xa5a5a5a5;
但是校验和的值为 0x00000000 ,并且不会更新为 0xa5a5a5a5 。 谁能告诉我如何更改校验和的值。
谢谢。
问候 维巴
答案 0 :(得分:2)
您不能像写入RAM那样就写入闪存,仅此而已。闪存为ROM。这就是为什么您在flash中分配的所有变量都必须/ const
限定,即只读的原因。
可以更换闪存,并且为此您的部件可以具有专用的数据闪存/ eeprom。但是,写入存储器的这些部分并不是编译器为您完成的工作。您需要自己编写一个闪存编程驱动程序。与之类似,您必须研究手册+应用笔记中的Flash编程部分。