jenya7 0 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Сначала инициализация struct gpiod_chip *chip; struct gpiod_line *line; int rv, value; void GPIO_Init(const char *filename) { chip = gpiod_chip_open(filename); if (!chip) { printf("GPIO Init Failed\n"); } else { printf("GPIO Init Success\n"); } line = gpiod_chip_get_line(chip, 23); if (!line) { printf("Line 23 failed\n"); } rv = gpiod_line_request_input(line, "can_int"); if (rv) { printf("Failed to configure line 23\n"); } line = gpiod_chip_get_line(chip, 17); if (!line) { printf("Line 17 failed\n"); } rv = gpiod_line_request_output(line, "out17", 0); if (rv) { printf("Failed to configure line 17\n"); } } Чтение запись void GPIO_SetPin(int pin_num, int pin_val) { line = gpiod_chip_get_line(chip, pin_num); gpiod_line_set_value(line, pin_val); } int GPIO_GetPin(int pin_num) { int pin_val; line = gpiod_chip_get_line(chip, pin_num); pin_val = gpiod_line_get_value(line); return pin_val; } в main.cpp (GPIO17 соединен с GPIO23) GPIO_Init("/dev/gpiochip0"); GPIO_SetPin(17, 1); pin_val = GPIO_GetPin(23); но GPIO17 не выставляется в 1 и pin_val возвращает -1. где я ошибся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Может там, где не знают про либу WiringPi? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Может там, где не знают книгу "Гугл за 24 часа" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 30 декабря, 2019 Опубликовано 30 декабря, 2019 (изменено) · Жалоба вот это 100% работает на CM3+: int gpioTest() { gpiod_chip *chip = gpiod_chip_open("/dev/gpiochip0"); if(!chip) { perror("gpiod_chip_open"); return 1; } gpiod_line *gpio6 = gpiod_chip_get_line(chip, 6); if(!gpio6) { perror("gpiod_chip_get_line(5)"); return 1; } int res = gpiod_line_request_output(gpio6, "gpio6", 1); if(res < 0) { perror("gpiod_line_request_output(1)"); return 1; } for(;;) { //int res = gpiod_line_set_value(gpio5, 1); res = gpiod_line_set_value(gpio6, 0); if(res < 0) { perror("gpiod_line_set_value(0)"); return 1; } usleep(10000); res = gpiod_line_set_value(gpio6, 1); if(res < 0) { perror("gpiod_line_set_value(1)"); return 1; } usleep(10000); } gpiod_chip_close(chip); return 0; } Изменено 31 декабря, 2019 пользователем gridinp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 31 декабря, 2019 Опубликовано 31 декабря, 2019 (изменено) · Жалоба 9 hours ago, gridinp said: вот это 100% работает на CM3+: спасибо. я добавил printf ("chip %p\n", chip); printf ("line %p\n", line); и я вижу chip 0x3078c line 0x30790 а должно быть 0x2f78c 0x2f790 11 hours ago, Obam said: Может там, где не знают про либу WiringPi? это для слабаков. :) а нам нужен генерик метод. я не уверен что все время буду сидеть на малине. Изменено 31 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 1 hour ago, jenya7 said: а должно быть 0x2f78c 0x2f790 но, почему? это же, наверное дескрипторы системные? или я что-то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 38 minutes ago, gridinp said: но, почему? это же, наверное дескрипторы системные? или я что-то не понимаю? у меня старая малина 20-ти пиновая. а там адрес насколько я помню 0x2f78c . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 44 minutes ago, jenya7 said: у меня старая малина 20-ти пиновая. а там адрес насколько я помню 0x2f78c . так вы, ожидаете, что это адрес BCM2837? Нет это код возвращаемый системой. Кстати на что я нарывался, если обратится к BCM28XX напрямую, например библиотекой bcm2835, то драйвера перестают нормально работать до перезагрузки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться