Подскажите путь решения проблемы. Хост windows. Установил toolcnain: https://gnutoolchains.com/raspberry Попробовал с UART поработать. Все компилируется и работает. Теперь стоит задача поработать с GPIO, I2C, SPI. Вроде существует неплохая библиотека wiringP. Но как ее приспособить к выше названному toolcnain? Или может есть какой другой более простой путь для кросскомпиляции? :
что значит "поработать с GPIO" ? У вас каша в голове. как мне кажется. Не путайте процесс компиляции софта и его запуск на контроллере. "Кросс-компиляция" - это значит что вы компилируете проект на винде. Но только компилируете. Запускать его все равно нужно будет на малинке. И работать с GPIO он будет точно так же, как из софта. собранного на самой малине, никакие дополнительные библиотеки тут не нужны.
Я именно так и делаю. Компилирую на windows , а запускаю на малинке. И на малинке идет нормальный обмен по UART с внешним компом.
Попробовал вот этот код: Код (C++): /* Example of programming GPIO from C or C++ using the sysfs interface on a Raspberry Pi. Will toggle GPIO24 (physical pin 18) at a 100 millisecond rate for 10 seconds and then exit. Jeff Tranter <jtranter@ics.com> */ #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> int main() { // Export the desired pin by writing to /sys/class/gpio/export int fd = open("/sys/class/gpio/export", O_WRONLY); if (fd == -1) { perror("Unable to open /sys/class/gpio/export"); exit(1); } if (write(fd, "24", 2) != 2) { perror("Error writing to /sys/class/gpio/export"); exit(1); } close(fd); // Set the pin to be an output by writing "out" to /sys/class/gpio/gpio24/direction fd = open("/sys/class/gpio/gpio24/direction", O_WRONLY); if (fd == -1) { perror("Unable to open /sys/class/gpio/gpio24/direction"); exit(1); } if (write(fd, "out", 3) != 3) { perror("Error writing to /sys/class/gpio/gpio24/direction"); exit(1); } close(fd); fd = open("/sys/class/gpio/gpio24/value", O_WRONLY); if (fd == -1) { perror("Unable to open /sys/class/gpio/gpio24/value"); exit(1); } // Toggle LED 50 ms on, 50ms off, 100 times (10 seconds) for (int i = 0; i < 100; i++) { if (write(fd, "1", 1) != 1) { perror("Error writing to /sys/class/gpio/gpio24/value"); exit(1); } usleep(50000); if (write(fd, "0", 1) != 1) { perror("Error writing to /sys/class/gpio/gpio24/value"); exit(1); } usleep(50000); } close(fd); // Unexport the pin by writing to /sys/class/gpio/unexport fd = open("/sys/class/gpio/unexport", O_WRONLY); if (fd == -1) { perror("Unable to open /sys/class/gpio/unexport"); exit(1); } if (write(fd, "24", 2) != 2) { perror("Error writing to /sys/class/gpio/unexport"); exit(1); } close(fd); // And exit return 0; } Из вот отсюда: https://www.ics.com/blog/how-control-gpio-hardware-c-or-c Получаю сообщение что pin занят. Под root аналогично. Хотя на python ногой махать могу(светодиодиком) p.s. буду очень благодарен если дадите примеры работы на С без дополнительных библиотек для малинки: работа с GPIO, I2C, SPI
а сможешь? Потому как там ось и прямая запись в регистры невозможна. Только через их отображение в ОЗУ. https://elinux.org/RPi_GPIO_Code_Samples В принципе, можно посмотреть в исходниках библиотеки wiringPI как оно там программируется.
Я понимаю это. Вот попробовал по ссылке выше запустить работу с ногами - компиляция проходит, а на малине при запуске пишет ошибки.
Автор отказался от её поддержки. Лучше поищите библиотеки для linux под конкретный интерфейс. У них есть будущее в отличие от нас неё. Лучше с ООП.