我需要在地址0x8000000写入0x00001234,这在C语言中是否可行?
如果你在嵌入式系统中使用硬件寄存器,则标准方法是:
int volatile * const p_reg = (int *) 0x8000000;
*p_reg = 0x1234;
如果你忽略了volatile,那么在优化编译器方面可能会遇到很多问题。
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
mmap
和MAP_FIXED
强制其存在。 - BoBTFish