【问题标题】:Writing array elements to an external memory location in C将数组元素写入 C 中的外部存储器位置
【发布时间】:2021-02-22 01:52:17
【问题描述】:

我希望将二维数组中的元素写入特定的内存位置。 我只是用一维数组尝试了这个:

char arr[3]= {0x01, 0x02, 0x03};
int i=0;
uint32_t p= 0x40000000;
for(i=0; i<3;i++)
{
    *p=&arr[];
    p++
}

*的操作数必须是指针会报错。

如何将数组元素一一写入位置0x40000000?

【问题讨论】:

  • int p= 0x40; 应该是int *p= 0x40;,但是你正在尝试的不是推荐操作
  • *p=&amp;arr[]; 是错误的。也许你想要*p=arr[i];
  • p++ -> p++;++p;
  • 是 *p=arr[i] ; @4386472

标签: arrays c pointers memory


【解决方案1】:

看起来您想将数组中的字节写入任意内存。 这是可行的,但您应该确保在运行此类代码之前知道自己在做什么。

#include <stdint.h>

int main(){
  char arr[3]= {0x01, 0x02, 0x03};
  int i=0;
  uint32_t* p= (uint32_t*) 0x40000000;
  for(i=0; i<3;i++)
  {
    *p=arr[i];
    p++;
  }
}

特别是,除非您有理由相信在您的代码运行的任何系统上的地址 0x40000000 处有有效的内容可以写入,否则它很可能会出现段错误。

【讨论】:

  • 鉴于arr 中的数据,指针类型可能是char* 甚至更好的volatile char *
  • @Gerhardh 我完全同意。我只是提供了对 OP 代码的最小修改以进行编译,而不是试图准确地猜测他们想要什么。
  • 感谢您的意见。 0x4000000 是我正在使用的外部 RAM 的地址。我需要将数组中的数据写入该位置以进行临时存储,然后对其进行处理。我将尝试上述修改并评论它是否给出所需的输出
  • 使用uint32_t *,代码会将4个字节(其中3个为零)写入位置0x40000000..0x40000003,另外4个字节到位置0x40000004..0x40000007,另外4个字节到位置0x40000008。 .0x4000000B。这与将 3 个字节写入位置 0x40000000..0x40000002 不同。
猜你喜欢
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 2011-09-11
相关资源
最近更新 更多