【发布时间】:2017-01-29 20:28:53
【问题描述】:
我正在尝试使用 C 将半字(即 16 位)从我的微控制器的一个内存地址移动到另一个内存地址。请看下面我的简单代码:
#include <stdint.h>
int main(void){
int16_t *src = (int16_t*)0x20000000; //source memory address
int16_t *dst = (int16_t*)0x20000016; //destination memory address
*dst = *src; //dereference both, set destination value to source value
return 0;
}
一打到*dst = *src,我就遇到了Hardfault 异常。我对指针和取消引用/引用的理解不足可能是问题所在。我会很感激一些帮助。
编辑: 有什么方法可以使用赋值运算符 (=) 在一行代码中编写它?
【问题讨论】:
-
您是否尝试将
src和dst标记为volatile?另外,我相信与在一行代码中执行此操作相比,拥有两个命名变量要干净得多。 -
memcpy是一个选项吗? -
您确定要访问的地址是内存映射的吗?一些微机使用 IO 映射机制来访问硬件。
-
您可以尝试拆分作业。首先读入一些变量然后写入。这可能有助于确定哪个部分失败。也许该内存区域有一些 MMU 限制。
-
我尝试了这里的建议。仍然给我一个硬故障。我的代码实现是否正确?
标签: c pointers arm memory-address