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

时间:2013-10-02 09:35:54

标签: c++ c

我需要在地址0x8000000中写入0x00001234,是否可以在C?

中写入

3 个答案:

答案 0 :(得分:11)

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

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

如果省略 volatile

,优化编译器可能会遇到很多问题

答案 1 :(得分:9)

你可以,但你会有99.9999..9%的段错误,因为你的程序无法访问这个内存地址。

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

答案 2 :(得分:0)

如果这是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位,因此无法访问当前的内存段。

我们曾经通过直接写入视频mem来实现我们自己的printf。十多年前,这是c编程课程中的一门课程。可能与您的情况相符。

This解释也可能有用