Приветствую,
на mips платформе работает линукс 2.6. От производителя чипа имеется библиотека для работы с gpio (открыть /dev/gpio, читать/писать пины). Понадобилось написать небольшое приложение для поллинга gpio, а точнее кнопки повешенной на пин.
Выбрал следующий классическйи подход:
int gpio_fd;
fd_set rfds;
gpio_fd = gpio_open("/dev/gpio");
while (1) {
FD_ZERO(&rfds);
FD_SET(gpio_fd, &rfds);
if (select(gpio_fd + 1, &rfds, NULL, NULL, NULL) > 0) {
if (FD_ISSET(gpio_fd, &rfds)) {
/* read pins and similar ... */
}
}
}
Но проблема в том, что запущенная в фоне программа потребляет 98% CPU. Посмотрел в сорцы драйвера gpio, обнаружил что там не реализован 'poll'. Собственно меня интересует - намеренно ли этот метод не написали (IMHO ведь в отличии, например, от сокета, gpio файловый дескриптор всегда готов) или забыли, и мне стоит его допилить и тогда настанет счастье?
Будет признателен за советы.