PureBasic для Raspberry PI

bfdf26e9b281dbbdb074d81b1fcbf947

Не так давно состоялся релиз PureBasic версии 6.00, в котором среди прочего добавлена поддержка ARM процессоров. В списке платформ присутствует Raspberry PI, но вероятно должны поддерживаться и другие похожие одноплатные компьютеры. Мною была проверена работа на большинстве моделей Raspberry PI включая самую простую — Zero и топовую на текущий момент — 4B. На всех была установлена Raspberry Pi OS April 4th 2022. Как и ожидалось, PureBasic запустился и нормально работал на всех тестовых Raspberry PI.

Небольшое пояснение для тех кто не знает что такое PureBasic

PureBasic это компилируемый язык программирования, созданный в начале двухтысячных годов для компьютера Amiga. По мере своего развития, были добавлены другие платформы включая Windows, Linux и Mac OS X для процессоров Intel, AMD, ARM и PowerPC. По моему мнению, это один из лучших современных диалектов бейсика. Не последнюю роль в этом сыграла кроссплатформенная библиотека насчитывающая почти 2 тысячи функций различной направленности. Среди них присутствуют функции работы с растровой, векторной, 2D и 3D графикой. Поддержка баз данных типа MySQL, SQLite, PostgreSQL, ODBCD и других. Работа с файлами, с сетью (FTP, HTTP/HTTPS, Mail), GUI и многое другое. Наличие поддержки многопоточности позволяет в полной мере задействовать все ядра процессора в ресурсоемких вычислениях. Ознакомится с полным списком функций можно в онлайн документации https://www.purebasic.com/documentation/

Благодаря кроссплатформенной библиотеке воможно перенести приложения изначально разработанные для компьютера с Windows или MacOS X на Raspberry Pi.

Язык программирования PureBasic довольно прост и его не сложно изучить. Почти все что нужно можно найти в справке входящей в дистрибутив. Она на английском, но в сети есть переведенная на русский.

PureBasic подойдет тем кому нужно разработать приложение для Raspberry Pi или других платформ, без необходимости изучения особенностей операционной системы и функционирования компьютера. С решением большинства задач прикладного уровня справится кроссплатформенная библиотека без необходимости применения функций ОС.

Для установки PureBasic на Raspberry Pi, его следует скачать с официального сайта https://www.purebasic.com Нужно выбирать версию, соответствующую разрядности операционной системы. То есть для 32-ух битной ОС необходим архив для arm32, а для 64-ех битной ОС — arm64.

Установка выполняется путем извлечения архива в любую папку (например, в домашнюю текущего пользователя) на которую есть права доступа. Дальнейшие действия описаны в файле INSTALL из архива.

Фрагмент из файла INSTALL

Installation

Unpack Purebasic

  • Create in «Private Folder» an Apps folder

  • Unpack Purebasic into this folder

  • Rename folder with versions number. Example «purebasic» → «purebasic-v572»

Install developer packages

  • Info: Required Webkit not available on Ubuntu bigger version 18.04. Support of Webkit2gtk with Purebasic v6.00 (Ubuntu 20.04/gtk3)

  • Start Terminal and install packages

Update compiler and default libraries

sudo apt-get install build-essential gcc g++

Developer Libraries

sudo apt-get install libxxf86vm-dev libxine2-dev unixodbc-dev libsdl1.2-dev libsdl2-dev libssl-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

  • Ubuntu 18.04
    sudo apt-get install libwebkitgtk-dev libwebkitgtk-3.0-dev

  • Ubuntu 20.04 / Raspberry PI Desktop
    sudo apt-get install libwebkit2gtk-4.0-dev

  • Raspberry PI Desktop / Movie Library
    sudo apt-get install libvlc-dev

Developer Libraries For Games

sudo apt-get install libgl1-mesa-dev libgl1-mesa-glx

Subsystem qt

sudo apt-get install qtbase5-dev qttools5-dev qtmultimedia5-dev qtdeclarative5-dev libqt5svg5-dev libqt5webkit5-dev libqt5multimedia5-plugins

Canberra for PB-IDE (Raspberry PI not need)

sudo apt install libcanberra-gtk-module

Ubuntu missing default libs (Without developer packages)

gtk2:
sudo apt-get install libgtk2.0

gtk3:

qt:
sudo apt install qt5-default

Для компиляции приложений следует установить несколько пакетов разработчика (dev). Их список приведен в файле INSTALL и зависит от типа разрабатываемых приложений. Или можно установить все требуемые пакеты (излишне во многих случаях) выполнив в терминале строку.

sudo apt-get install build-essential gcc g++ libxxf86vm-dev libxine2-dev unixodbc-dev libsdl1.2-dev libsdl2-dev libssl-dev libgtk2.0-dev libgtk-3-dev libwebkit2gtk-4.0-dev libvlc-dev libgl1-mesa-dev libgl1-mesa-glx qtbase5-dev qttools5-dev qtmultimedia5-dev qtdeclarative5-dev libqt5svg5-dev libqt5webkit5-dev libqt5multimedia5-plugins

Весь процесс от скачивания PureBasic, до установки пакетов и запуска тестового приложения можно посмотреть на видео.

В папке examples находятся несколько десятков различных примеров программ. Запуск некоторых из них показан на видео.

Версия PureBasic для Linux предоставляет на выбор три GUI подсистемы — GTK2, GTK3 (по умолчанию) и Qt. Для этого не требуется вносить изменения в код. Достаточно указать подсистему в настройках компилятора.

На Raspberry Pi 4B прекрасно работают примеры 3D приложений, несмотря на то что «малина» не предназначена для 3-ех мерной графики.

Небольшие подергивания картинки из-за записи видео с экрана и его кодирования. Без этого анимация плавная.

Для доступа к железу «малины» сообщество написало ряд библиотек или интерфейсов к существующим. Со списком можно ознакомиться в теме на официальном форуме https://www.purebasic.fr/english/viewtopic.php? t=78338

https://www.purebasic.fr/english/viewtopic.php? t=78440

Рассмотрим один из примеров, считывающий температуру процессора «малины» и отображающий ее в окне.

; Файл из которого нужно считывать температуру.
If ReadFile(0, "/sys/class/thermal/thermal_zone0/temp", #PB_UTF8) = 0
  MessageRequester("", "Нет доступа к файлу", #PB_MessageRequester_Error)
  End
EndIf

; Создание окна.
OpenWindow(0, 0, 0, 250, 90, "CPU Temp", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0, 0, 20, 250, 80, "", #PB_Text_Center)
SetGadgetFont(0, LoadFont(0, "FreeSans", 28, #PB_Font_Bold))
; Таймер с периодом 1 секунда.
AddWindowTimer(0, 0, 1000)
PostEvent(#PB_Event_Timer, 0, 0) ; Отправка события таймера чтобы температура появилась сразу, а не через секунду после запуска приложния.

Repeat
  Event = WaitWindowEvent() 
  If Event = #PB_Event_Timer And EventTimer() = 0 ; Сработал таймер.
    FileSeek(0, 0)                                ; Переход в начало файла.
    temp.d = ValD(ReadString(0))/1000             ; Чтение из файла и перевод с тысячных долей градуса в целые.
    SetGadgetText(0, StrD(temp, 3)+" °C")         ; Отображение в температуры в окне.
  EndIf 
Until Event = #PB_Event_CloseWindow

CloseFile(0)

В начале программы функция ReadFile () открывает системный файл из которого в дальнейшем будет считываться температура. В случае недоступности файла, появляется соответствующее сообщение и на этом работа программы завершается.

При успешном открытии файла создается окно и текстовое поле в нем методом вызова функций OpenWindow () и TextGadget ().

Функция AddWindowTimer () добавляет таймер в окно с периодом 1000 миллисекунд (секунда), и через эти промежутки времени регулярно будет генерироваться событие.

В цикле, функция WaitWindowEvent () ожидает ближайшего события и возвращает его код. Если это событие таймера, производится чтение температуры из файла и отображение в окне.

В случае события закрытия окна, цикл прервется и работа программы на этом завершится.

© Habrahabr.ru