嗨即時通訊使用在debian上運行的beaglebone黑色,我使用mmap
上的/dev/mem文件來訪問GPIO寄存器。 我有一個包含我的映射功能.c文件:在Linux的MMAP值的生命週期
//sample code
unsigned int *gpio_get_map(int gpio)
{
unsigned int *gpio_addr = NULL;
int fd = open("/dev/mem", O_RDWR);
gpio_addr = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE,MAP_SHARED,fd, gpio_get_number(gpio));
if(gpio_addr == MAP_FAILED)
{
printf("Unable to map GPIO : %s\n",strerror(errno));
close(fd);
return NULL;
}
close(fd);
return gpio_addr;
}
然後調用在另一個.c文件中此函數獲取的gpio_addr
值,並用它來操縱的GPIO,它工作正常,但我不知道gpio_addr
將有效多久。 gpio_addr
給出的地址是否總是有效?或者我應該在一段時間後再打另一個mmap
?謝謝。
注意:'return -1;'在聲明返回指向unsigned-int的函數的函數中是錯誤的。爲什麼不在失敗時返回NULL? – wildplasser 2014-09-20 13:38:06
是的感謝提醒我 – scy 2014-09-20 16:38:09