gpt4 book ai didi

android - 通过 beaglebone black 中的 GPIO 映射内存

转载 作者:行者123 更新时间:2023-11-30 15:08:42 24 4
gpt4 key购买 nike

我们使用 beaglebone black 来获取数据。 温度传感器dht11取自beagle骨黑的GPIO。

正常的打开和关闭(单向传输)很容易完成,但是当涉及到连续数据传输时,我们在 Android 中遇到内存映射问题。

下面是声明部分。

typedef struct {
unsigned int id; /**< FS: ID is the file for the pin */
unsigned char bank; /**< MMAP: GPIO bank determines register */
unsigned int mask; /**< MMAP: Mask determines bit in register */
} GPIOBit_t;
static const uint32_t gpioAddrs[] = { 0x44E07000, 0x4804C000, 0x481AC000,0x481AE000 }; /**< Register Bank addresses */
static uint32_t *mapGPIO[4]; /**< Variable for GPIO memory map */
#define GPIO_OE_REG 0x134 /**< GPIO OE register address */

下面是产生问题的函数。

static void writeGPIOMmapdir(const GPIOBit_t *pinGPIO, const unsigned int value) {

fdGPIO = open("/dev/mem", O_RDWR);
/* mmap() the four GPIO bank registers */
int j;
for (j = 0; j < 4; j++) {

mapGPIO[j] = (uint32_t *) mmap(NULL, getpagesize(),PROT_READ | PROT_WRITE, MAP_SHARED, fdGPIO, gpioAddrs[j]);

unsigned int reg;
reg = mapGPIO[1][GPIO_OE_REG / 4];
if (value) {
reg = reg | pinGPIO->mask;

/* Set the appropriate OE register */
//*****************ISSUE IS IN BELOW LINE*******************
mapGPIO[pinGPIO->bank][GPIO_OE_REG / 4] = reg;
} else {
reg = reg & (0xFFFFFFFF - pinGPIO->mask);
mapGPIO[pinGPIO->bank][GPIO_OE_REG / 4] = reg;
}
}

在 logcat 中获取内存映射问题。然后整个应用程序会自行重新启动。

01-01 00:19:30.814: A/libc(965): Fatal signal 11 (SIGSEGV) at 0x00000134 (code=1), thread 983 (Thread-56)

如果可能的话,任何人都可以帮助我。

谢谢:)

最佳答案

这不应该吗:

reg = mapGPIO[1][GPIO_OE_REG / 4];

是:

reg = mapGPIO[j][GPIO_OE_REG / 4];

关于android - 通过 beaglebone black 中的 GPIO 映射内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177140/

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