[Qt] Одноплатный компьютер для embedded программиста. Моргаем светодиодом на Qt
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
ВведениеЦель - моргать светодиодом на GPIO одноплатного компьютера в своём Qt проекте. Первое, что приходит в голову - использовать готовое решение, такое как wiringOP. Однако для меня, как программиста микроконтроллеров, странно устанавливать пакет для работы с GPIO. Но помимо этого сторонний пакет ещё и нужно динамически линковать (связывать) с моим приложением. А тут возникает и вопрос совместимости с новой версией пакета, и вопрос того, будет ли пакет этот в системе установлен. Таким образом, я решил прикрутить wiringOP к своему проекту на Qt статически, да и ещё иметь возможность редактировать wiringOP как проект статической библиотеки прямо в Qt Creator.Как оказалось, кодовая база проекта wiringOP является явно избыточной. Например, мне не нужен код для работы со сдвиговыми регистрами. Ключевой функцией является wiringPiSetup(), которая выясняет у Ubuntu адреса GPIO и других регистров в памяти путем чтения файла /dev/mem. Забегая вперед скажу, что это - дырка в безопасности, потому что читая /dev/mem - можно получить доступ не только к портам ввода-вывода, но и ко всей ОЗУ.После инициализации с помощью wiringPiSetup() можно приступать к работе. Так, функция pinMode задает режим работы вывода гребенки: вход, выход, генерация PWM. Пример кода моргания светодиодом на выводе PIN8.
wiringPiSetup();
pinMode(3, OUTPUT);
while(1){
digitalWrite(3, LOW);
delay(1000); //for(volatile uint64_t i=0;i<0xFFF;i++);
digitalWrite(3, HIGH);
delay(1000); //for(volatile uint64_t i=0;i<0xFFF;i++);
}
Сам светодиод должен быть подключен к гребенке. В случаеOrange Pi 4B ситуация следующая.
Статическая линковка wiringOPТекст выше был о том, зачем всё это надо и как это использовать. А теперь пришло время для основной части. Итак, нужно скачать wiringOP
git clone https://github.com/orangepi-xunlong/wiringOP.git
Далее необходимо создать новую Statically Linked Library. В качестве системы сборки я выбрал qmake.
Далее нужно из скачанной wiringOP в созданную библиотеку перенести некоторые файлы согласно рисунку ниже.
В файле .pro библиотеки можно настроить важные параметры, влияющие на сборку. Во-первых, указать модель SBC. Во-вторых, было бы удобно, чтобы результирующий файл libmy_wiringOP_v5.a помещался в отдельную папку wiringOP_build_artifacts. Это можно настроить следующим образом
DEFINES += CONFIG_ORANGEPI
DEFINES += CONFIG_ORANGEPI_4
DESTDIR = $$PWD/../wiringOP_build_artifacts
Подсказка. Знаком две точки требуем переход на каталог назад; переменная $$PWD предоставляет текущий путь к проекту. Наконец можно собрать библиотеку. В случае успеха вы получите файл libmy_wiringOP_v5.a Перейдём к тестовому проекту, в моём случае консольному. Необходимо добавить в проект нашу библиотеку как External Library согласно скриншоту.
Обратите внимание, что один и тот же файл wiringPi.h используется как при создании библиотеки, так и в тестовой программе. Наконец можно написать программу для моргания светодиодом. Далее перенесем исходные коды на целевую машину.
rsync -avz /home/andrei/Документы/mywiringOP/my_wiringOP_base/my_wiringOP_v5 a@192.168.0.112:/home/a/Documents/QtProj
rsync -avz /home/andrei/Документы/mywiringOP/my_wiringOP_base/wOP_Test1 a@192.168.0.112:/home/a/Documents/QtProj
Далее соберем библиотеку и пример на целевой машине. У менямигает, а у вас?
===========
Источник:
habr.com
===========
Похожие новости:
- KDE взял на себя продолжение сопровождения общедоступной ветки Qt 5.15
- [Децентрализованные сети, Программирование микроконтроллеров, Умный дом, DIY или Сделай сам] Hello NXP Zigbee World
- [Беспроводные технологии, Разработка для интернета вещей, Разработка под Arduino, DIY или Сделай сам] MQTT-SN + ESP8266
- [Программирование, Системное программирование, Qt, Программирование микроконтроллеров] Запуск QT на STM32. Часть 2. Теперь с псевдо 3d и тачскрином
- [C++, Assembler, Qt] Новый язык программирования — Relax
- [C++, Qt] Пишем свою навигацию в Qt
- [Qt] Одноплатный компьютер для embedded программиста
- [Программирование, C++, Git, Qt] QGit, улучшения
- [C++, Qt, Серверная оптимизация, Сетевые технологии, C] Знакомство с exsc (EXtensible Server Core). Часть 1
- [C++, Qt] Реализация двойной панели инструментов в QT
Теги для поиска: #_qt, #_qt, #_qt
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:41
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
ВведениеЦель - моргать светодиодом на GPIO одноплатного компьютера в своём Qt проекте. Первое, что приходит в голову - использовать готовое решение, такое как wiringOP. Однако для меня, как программиста микроконтроллеров, странно устанавливать пакет для работы с GPIO. Но помимо этого сторонний пакет ещё и нужно динамически линковать (связывать) с моим приложением. А тут возникает и вопрос совместимости с новой версией пакета, и вопрос того, будет ли пакет этот в системе установлен. Таким образом, я решил прикрутить wiringOP к своему проекту на Qt статически, да и ещё иметь возможность редактировать wiringOP как проект статической библиотеки прямо в Qt Creator.Как оказалось, кодовая база проекта wiringOP является явно избыточной. Например, мне не нужен код для работы со сдвиговыми регистрами. Ключевой функцией является wiringPiSetup(), которая выясняет у Ubuntu адреса GPIO и других регистров в памяти путем чтения файла /dev/mem. Забегая вперед скажу, что это - дырка в безопасности, потому что читая /dev/mem - можно получить доступ не только к портам ввода-вывода, но и ко всей ОЗУ.После инициализации с помощью wiringPiSetup() можно приступать к работе. Так, функция pinMode задает режим работы вывода гребенки: вход, выход, генерация PWM. Пример кода моргания светодиодом на выводе PIN8. wiringPiSetup();
pinMode(3, OUTPUT); while(1){ digitalWrite(3, LOW); delay(1000); //for(volatile uint64_t i=0;i<0xFFF;i++); digitalWrite(3, HIGH); delay(1000); //for(volatile uint64_t i=0;i<0xFFF;i++); } Статическая линковка wiringOPТекст выше был о том, зачем всё это надо и как это использовать. А теперь пришло время для основной части. Итак, нужно скачать wiringOP git clone https://github.com/orangepi-xunlong/wiringOP.git
Далее нужно из скачанной wiringOP в созданную библиотеку перенести некоторые файлы согласно рисунку ниже. В файле .pro библиотеки можно настроить важные параметры, влияющие на сборку. Во-первых, указать модель SBC. Во-вторых, было бы удобно, чтобы результирующий файл libmy_wiringOP_v5.a помещался в отдельную папку wiringOP_build_artifacts. Это можно настроить следующим образом DEFINES += CONFIG_ORANGEPI
DEFINES += CONFIG_ORANGEPI_4 DESTDIR = $$PWD/../wiringOP_build_artifacts Обратите внимание, что один и тот же файл wiringPi.h используется как при создании библиотеки, так и в тестовой программе. Наконец можно написать программу для моргания светодиодом. Далее перенесем исходные коды на целевую машину. rsync -avz /home/andrei/Документы/mywiringOP/my_wiringOP_base/my_wiringOP_v5 a@192.168.0.112:/home/a/Documents/QtProj
rsync -avz /home/andrei/Документы/mywiringOP/my_wiringOP_base/wOP_Test1 a@192.168.0.112:/home/a/Documents/QtProj =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:41
Часовой пояс: UTC + 5