【问题标题】:Using memcpy(...) to read Value(s) at a Physical Address使用 memcpy(...) 读取物理地址处的值
【发布时间】:2016-03-12 11:24:46
【问题描述】:

我需要读取地址 0x2428(MCU 的闪存)中的值。如何使用 memcpy 读取值?

 uint8_t *newData ,x;
 memcpy( newData, 0x2428, sizeof x);

但是,我明白了

错误[Pe167]:“int”类型的参数与参数不兼容 键入“无效常量 *

我应该如何解决这个错误?

【问题讨论】:

  • 将地址转换为const void * 或许?
  • 当您可以简单地初始化和取消引用指针时,为什么还要使用memcpy()

标签: c memcpy


【解决方案1】:

您尝试将内存地址 (0x2428) 作为 memcpy 操作的目标地址传递,但编译器在期望 const void * 时仅将其视为 const int 值(整数文字)。您至少必须将其转换为 (const void *) 0x2428 的数据类型,才能使此语法起作用。

【讨论】:

  • 值得注意的是,这确实是一种非常糟糕的做法——尝试直接访问特定内存是一种在 PIC 和其他低功耗嵌入式设备上经常发生的活动,但它很容易出错并且会咬你一口。
  • 好极了,很高兴听到它奏效了!如果有机会,请将此标记为您问题的解决方案,以便社区将其标记为“已回答”。干杯!
  • 这种做法根本不会出错,只要你有内存映射并且一切都在它应该在的地方。完全没有风险。风险来自猜测或试验硬编码地址。
  • @nicomp 如果使用映射特定内存映射的代码来支持多个硬件平台的迭代,并且有一个将 MM 从设备的 ver1.0 更改为 ver2.0 - 但你是对的。遵循文档,你应该没有问题 :-) 它导致许多嵌入式程序员花了很多时间说“为什么这不起作用”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2015-12-26
  • 2012-12-25
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多