C 使用指针将数据从一个地址复制到另一个地址

C 使用指针将数据从一个地址复制到另一个地址,c,pointers,arm,memory-address,C,Pointers,Arm,Memory Address,我正在尝试使用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;

我正在尝试使用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;
}
#包括
内部主(空){
int16_t*src=(int16_t*)0x20000000;//源内存地址
int16_t*dst=(int16_t*)0x2000016;//目标内存地址
*dst=*src;//取消引用两者,将目标值设置为源值
返回0;
}
我一碰到行
*dst=*src
,就遇到了一个硬故障异常。我对指针和解引用/引用理解不足可能是问题所在。我希望能得到一些帮助

编辑:
是否有任何方法可以使用赋值运算符(=)将其写入一行代码中?

您正在执行对
0x2000016
的写入操作,该操作不在4字节边界上。如果您的处理器不支持未对齐的读写,这将导致故障。您使用的是什么处理器?

您是否尝试过将
src
dst
标记为
volatile
?另外,我认为,与在一行代码中使用两个命名变量相比,使用两个命名变量要干净得多。
memcpy
是一个选项吗?您确定要访问的地址是内存映射的吗?某些微型计算机使用IO映射机制访问硬件内容。您可以尝试拆分分配。首先读入某个变量,然后写入。这可能有助于确定哪个部件出现故障。可能内存区域有一些MMU限制。我尝试了这里的建议。还是给我一个致命的错误。我的代码实现正确吗?我使用的是ARM Cortex M0处理器。