【问题标题】:Memory mapped through gpio in beaglebone blackbeaglebone black 中通过 gpio 映射的内存
【发布时间】:2016-05-12 04:14:26
【问题描述】:

我们正在使用 beaglebone black,通过它获取数据。 Temprature sensor dht11取自beagle bone black的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):致命信号 11 (SIGSEGV) 位于 0x00000134(代码=1),线程 983(线程 56)

如果可能的话,谁能帮我解决这个问题。

谢谢:)

【问题讨论】:

  • 首先:你确定mmap的结果不是MAP_FAILED吗?您应该检查mmap 返回值。
  • reg = mapGPIO[1][GPIO_OE_REG / 4] --> reg = mapGPIO[j][GPIO_OE_REG / 4]
  • 你确定pinGPIO-&gt;bank的值吗?

标签: android c android-ndk beagleboneblack beagleboard


【解决方案1】:

不应该这样吗:

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

是:

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

?

【讨论】:

  • 四个 GPIO 端口 (j=0,1,2,3) 中的 Beaglebone Black,在本例中使用 GPIO1(mapGPIO[1])。
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 2022-11-10
  • 2015-01-09
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多