如何在 C 语言中写入特定地址的数据
How to write a data in particular address in C
我需要在地址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 编程课程的课堂作业。可能与您的方案相匹配。
这个解释也可能有所帮助
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何获取C++字符数据类型的地址
- 获取 R 数据帧的内存地址
- 将数据发送到多个客户端 UDP 时不支持地址族
- IMAGE_SECTION_HEADER的虚拟地址和指针到原始数据的差异
- 数据对齐:限制内存地址为数据类型大小倍数的原因
- 使用来自 C 的内存地址的 Julia 读取/写入结构数据
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 如何在NS3中设置节点的IP地址和数据?
- 可能的数据竞争在内存中写入相同地址之间
- 当我们将数据从 ax 移动到端口地址时会发生什么
- 函数从windows XP中的数据包中检索标头目标地址
- 默认的64位地址数据类型在Windows上
- 如何通过main()函数传递私人数据地址
- 是否可以根据C/C 代码上的Linux上的(动态更改的IP地址集)丢弃传入数据包
- 获取 PCAP 文件中数据包的 IP 地址
- 对象和数据成员内存地址混淆
- 如何在给定指向其地址的指针的情况下将数据分配给变量?C/C++
- 从数据成员(一次性嵌套类)中获取非 POD 对象的地址
- 单个结构数据成员的奇怪指针地址