FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 15:51Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Можно ли в FB навесить обработчик события? (Можно ли в FB навесить обработчик события?)
Можно ли в FB навесить обработчик события?
mashakovmaratДата: Суббота, 04.01.2020, 23:21 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 36
Репутация: 0
Статус: Offline
Здравствуйте!

ОС Rasbian. Изучаю вопрос работы с GPIO.

Доступный рабочий вариант через /sys/class/gpio работает, но хорош он, скажем так, для "нечастых" обращений к пинам.
Практика показывает, чтобы пин, настроенный на out, изменил свое состояние, необходимо после внесения в его value-файл соответствующего значения 0/1, этот самый value-файл закрыть Close #fileHandler. Тогда значение принимается в работу.
Что касается чтения из value-файла, то здесь, в начале программы один раз открывал через Си-функцию этот value-файл на неблокирующее чтение (закрывается он по завершению программы). Это стабильно работает для отслеживания нажатий кнопок и прочих нечастых изменений состояний входящих пинов.
Но вот если организовать Modbus по RS-485? Здесь суть в том, чтобы не упустить стартовый бит входящей информации, нужно сразу реагировать на его поступление на пин. Вот здесь и есть необходимость отслеживать это аппаратное прерывания для запуска обработчика.
Или формировать сообщение на отправку. В Modbus нужно выдерживать микросекундные паузы (точные значения зависят от битрейта) между подачами на пин единиц. И если после каждого изменения значения value-файла нужно выполнять его закрытие, соответственно далее опять открытие, помещение нового значения, закрытие - это как-то некашерно, пусть и, вроде как файлы sys/class/gpio/gpio** являются виртуальными, т.е. диск не будет нагружаться этим, но процессор нагрузится. Хотя, наверное, зря я об этом думаю.
Относительно недавно пытался на ARM-e использовать вынесение таких считывателей от аппаратной части в параллельный поток, но ARM этого не очень позволяет - программа подвисает. На компьютере же все работает нормально.
Опять-таки, функционал через /sys/class/gpio имеет edge-файл, где можно указать отслеживание аппаратного прерывания, но я не нашел (или не понял) где можно указать функцию обработчик прерывания.
Может спасение кроется в использовании библиотек - они, типа, будут заносить все что пришло на пин в буфер откуда я, как доберусь до места, и все прочту.
Частично смог заставить работать в своей FB-программе сишную библиотеку wiringPi, но это только благодаря тому, что нашел файл wiringPi.bi (поскольку Си я не знаю, это была удача). Буду посмотреть далее как будут работать (и будут ли работать) более сложные функции wiringPi. Пока все что смог реализовать при помощи wiringPi, вполне реализуемо штатными средствами FB.
Есть библиотека pigpio, но с ней пока еще разбираюсь. Там вроде демон общается с GPIO и результаты помещает то ли в переменную окружения, то ли еще куда.

Но вот если самому ловить аппаратное прерывание, вот это тема.

С уважением,
Марат

Добавлено (05.01.2020, 16:40)
---------------------------------------------
Похоже надо пробовать wiringPiISR

Сообщение отредактировал mashakovmarat - Суббота, 04.01.2020, 23:32
 
Форум » Freebasic » Вопросы по языку FreeBasic » Можно ли в FB навесить обработчик события? (Можно ли в FB навесить обработчик события?)
  • Страница 1 из 1
  • 1
Поиск: