【问题标题】:Copying data from one address to another using pointers使用指针将数据从一个地址复制到另一个地址
【发布时间】: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 异常。我对指针和取消引用/引用的理解不足可能是问题所在。我会很感激一些帮助。

编辑: 有什么方法可以使用赋值运算符 (=) 在一行代码中编写它?

【问题讨论】:

  • 您是否尝试将srcdst 标记为volatile?另外,我相信与在一行代码中执行此操作相比,拥有两个命名变量要干净得多。
  • memcpy 是一个选项吗?
  • 您确定要访问的地址是内存映射的吗?一些微机使用 IO 映射机制来访问硬件。
  • 您可以尝试拆分作业。首先读入一些变量然后写入。这可能有助于确定哪个部分失败。也许该内存区域有一些 MMU 限制。
  • 我尝试了这里的建议。仍然给我一个硬故障。我的代码实现是否正确?

标签: c pointers arm memory-address


【解决方案1】:

您正在写入0x20000016,它不在 4 字节边界上。如果您的处理器不支持未对齐的读取和写入,这将导致错误。你用的是什么处理器?

【讨论】:

  • 我使用的是 ARM Cortex M0 处理器。
猜你喜欢
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多