Одноплатный компьютер для embedded программиста. Моргаем светодиодом на Qt

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Введение

Цель - моргать светодиодом на 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

Далее соберем библиотеку и пример на целевой машине. У меня мигает, а у вас?

Источник: https://habr.com/ru/post/551342/


Интересные статьи

Интересные статьи

Александр Труханов — соавтор книг «А я был в компьютерном городе» и «Энциклопедия профессора Фортрана» — побеседовал со своим знакомым, ныне бизнесменом, Константином Смирновым о ввоз...
В 1994 году, когда в США и Японии интерес к компьютерным играм в автоматах уже угас и на первый план вышли домашние игровые консоли, я все еще радовался, если мог запустить деревянную пал...
Привет! Хочу познакомить вас с проектом Rust Embedded. Он позволяет нам использовать язык программирования Rust для разработки под встроенные платформы (Embedded Linux / RTOS / Bare Metal). ...
Микрокомпьютер Gigatron — это минималистичный 8-битный ретро-компьютер построенный по необычному дизайну: в нём нет никаких сложных логических интегральных схем, нет даже микропроцессора! Его...
Один из самых острых вопросов при разработке на Битрикс - это миграции базы данных. Какие же способы облегчить эту задачу есть на данный момент?