gpt4 book ai didi

c - C中的十六进制数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:53 24 4
gpt4 key购买 nike

我正在尝试根据这条指令学习处理器的扩展头配置 http://41j.com/blog/2011/09/beagleboard-gpio-input-driverless/

我有一部分没看懂

volatile ulong *pinconf;
pinconf = (ulong*) mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x48000000);
pinconf[0x2168/4] = 0x001C001C;

谁能解释一下 pinconf 数组是如何工作的?它存储什么值?

编辑:我真的不明白 pinconf[0x2168/4] 是什么意思。它是一个十六进制数组,它指的是什么值?

最佳答案

我是原始博客/代码作者,这就是我的意思:

为了回答您的要点,pinconf[0x2168/4] 指的是地址 0x48002168。 pinconf 数组从地址 0x48000000 开始。它被定义为一个 ulong [1],在 ARM 处理器上是 4 个字节。我知道我要访问地址pinconf+0x2168。要将地址 0x2168 转换为 pinconf 中的索引,我需要除以 4。


从头开始遍历代码:

volatile ulong *pinconf;

pinconf 被定义为一个 ulong(32 位整数)指针。它被定义为 volatile,这意味着我们代码之外的某些东西可能会改变它的值。它告诉编译器每次我们使用该值时都需要从内存中读取它,这会阻止编译器进行可能会搞砸的巧妙优化。

pinconf = (ulong*) mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x48000000);

这会将 pinconf 设置为指向地址 0x48000000。通常你可以这样做:

pinconf = (ulong*) 0x48000000;

让 pinconf 指向一个地址,但这行不通。 0x48000000 是一个 protected 地址,它只能由内核访问。 mmap 魔法为您提供了一种从用户空间访问地址的方法。

pinconf[0x2168/4] = 0x001C001C;

我们已经介绍过了,但这是向地址写入一个值:0x48000000+0x2168。值 0x48002168 来自 OMAP3 数据表,用于与 GPIO 系统进行内存映射 IO。我们除以 4 将地址 0x2168 转换为 pinconf 中的索引。

[1] 老实说,我可能应该使用 uint32_t。

关于c - C中的十六进制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com