如何在 C 语言中写入特定地址的数据

How to write a data in particular address in C

本文关键字:地址 数据 语言      更新时间:2023-10-16

我需要在地址0x8000000中写0x00001234,可以用C吗?

如果您在嵌入式系统中使用硬件寄存器,那么标准方法是:

int volatile * const p_reg = (int *) 0x8000000;
*p_reg = 0x1234;

如果省略易失性,优化编译器可能会遇到很多问题

你可以,但你将在 99.9999..9% 的时间内出现段错误,因为你的程序无法访问此内存地址。

int *nb = (int *) 0x8000000;
*nb = 0x00001234;

好吧,如果这是 c 类的初学者作业,我怀疑它是 turbo 或 borland c,您在具有段偏移地址方案的 16 位环境中编程。在这种情况下,将使用 int * far ptr,将使用 far 作为访问当前段之外的地址的指针类型。0xb8000000曾经是文本模式视频内存的起始地址。

int far * p = 0xB8000000;
*p = 'A'; // This would actually print char 'A' on screen
*(p+1) = <some number>; // this would determine the color of char A

请注意,这曾经是 16 位编程。因此,正常的 int * 将是 16 位,因此无法访问当前内存段之外的内容。

我们

过去常常通过直接写入视频内存来实现我们自己的printf。这是十多年前 c 编程课程的课堂作业。可能与您的方案相匹配。

这个解释也可能有所帮助