【发布时间】:2019-08-10 17:12:46
【问题描述】:
我已经声明了一个 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。 谁能告诉我如何更改校验和的值。
提前致谢。
问候 维巴夫
【问题讨论】:
-
请发minimal reproducible example,以便我们重现问题并帮助您调试
-
如果您在 X86 处理器上运行上述代码,则无法写入像
0xXXXXX这样的任意内存地址。您的代码导致 UB -
@Achal 我在 ARM cortex M4 处理器上运行我的代码
-
正如How to assign pointer address manually in C programming language? @crowder 引用的“任意地址必须是某种“知名地址”,这些通常是(尽管并非总是如此)只读。
-
这个地址在哪里,在 RAM 或闪存或其他类型的内存中?如果在闪存中,那么很可能需要使用特殊方法写入,不能使用简单赋值。
标签: c struct embedded cortex-m