2014-09-20 28 views
0

嗨即時通訊使用在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?謝謝。

+0

注意:'return -1;'在聲明返回指向unsigned-int的函數的函數中是錯誤的。爲什麼不在失敗時返回NULL? – wildplasser 2014-09-20 13:38:06

+0

是的感謝提醒我 – scy 2014-09-20 16:38:09

回答

3

您不需要更新映射。它將在調用過程中保持有效,直到您顯式取消映射(或過程結束)爲止。

+0

這是否意味着,即使我使用這個.c作爲python擴展它仍然是有效的在python代碼中,只要進程沒有結束或我取消映射? – scy 2014-09-20 16:34:34

+0

這是正確的。 – 2014-09-20 21:49:07