roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 18:03

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Работа с GPIO из Linux
СообщениеДобавлено: 30 июл 2010, 17:49 
Не в сети

Зарегистрирован: 14 июн 2010, 17:19
Сообщения: 167
прог. языки: Qt/C/C++
setar писал(а):
есть идея попробовать использовать для работы с GPIO механизм inotify

Почитал я в гугле про работу этого механизма
Аналог кронтаба, только живет не по времени, а по событиям. Так что особых навыков программирования не нужно ;)
Причем при наступлении события он элементарно запускает скрипт, который еще нужно как-то связать с нашей программой (а запускать по каждому событию разные скрипты (читай разные программы)- еще больший изврат, чем обращаться к пинам через файлы)
Отсюда имеем:
Плюсы(?): Можно собрать события со всех пинов в один поток (один файл) и прогой работать только с ним-единственным (опять же не знаю насколько это плюс, т.к. все-равно придется постоянно считывать данные с файла, преобразовывать в удобоваримый вид (лишние действия) и смотреть, что изменилось. Прерываниями в таком случае и не пахнет. Все прерывания заканчиваются на уровне выполнения скрипта)
Минусы: Помимо минусов, описаных в разделе плюсов :D , файл изменился - да, а КАК он изменился мы не знаем, так что все равно нам придется читать файл пина и смотреть новое его значение - это раз.
Два: механизм работает только на чтение, т.е. записывать в порты все равно придется "по-старинке" :pardon:

Добавлено спустя 14 минут 22 секунды:
А вот из области программирования и не очень, есть у меня одна идейка, как подключить все 4 входа АЦП (ибо пока я нашел только 1 вход :( )
Итак, мы знает, что АЦП 1 а аналоговые входы мультиплексируются и управляют всем этим делом регистры процессора.
Значит будем лезть в регистры процессора? Как?
Есть в линуксе одна замечательная либа, называется ptrace.
И предназначена она для отладки процессов.
Вызов такой:
#include <sys/ptrace.h>
long int ptrace(enum __ptrace_request request, pid_t pid, void * addr, void * data)

потом в описании идет куча пояснений к разным параметрам и т.д. и .т.п бла-бла-бла....
Самое интересное:
Цитата:
Значения, описываемые ниже, позволяют читать/изменять регистры процессора дочернего процесса, а потому очень тесно связаны с аппаратной реализацией системы.
Набор доступных регистров включает в себя регистры общего назначения и регистры FPU (арифметического сопроцессора).
PTRACE_GETREGS, PTRACE_GETFPREGS, PTRACE_GETFPXREGS:

При этих значениях request, после обычной проверки прав доступа, производится копирование значений регистров общего назначения, регистров с плавающей точкой, дополнительных регистров с плавающей точкой дочернего процесса в переменную родительского процесса data. Копирование выполняется с помощью функций getreg() и __put_user(), аргумент addr игнорируется.
PTRACE_SETREGS, PTRACE_SETFPREGS, PTRACE_SETFPXREGS:

При этих значениях аргумента request выполняется запись в регистры процессора трассируемого процесса. В данном случае доступ к отдельным регистрам ограничивается. Значения регистров берутся из аргумента data. Аргумент addr игнорируется.

Осталось только узнать названия соответствующих регистров, и можно мультиплексить АЦП, да и что угодно делать! (В рамках одного процесса)
Тоесть поидее наши изменения регистров не затронут работу всей системы...
А вот тут уже пошел ембеддед... ибо регистры проца, и как их видит линь - это уже дело сугубо специфическое.
Вобщем я так понял, нужно смотреть сорсы ядра и самого ptrace для нашего линя.
Я в этом деле немного новичок, так что есть кто шарит получше, я буду только рад любой помощи :)

Добавлено спустя 29 минут 30 секунд:
Поискал в папке сорцов ядра файлики (*reg.h)
Кто такие папки mach-gemini, mach-l7200, mach-bcmring и т.д.???
И в какой из них и в каком файле находятся нужные регистры? :%)

_________________
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с GPIO из Linux
СообщениеДобавлено: 05 сен 2010, 17:08 
Не в сети

Зарегистрирован: 30 авг 2010, 10:41
Сообщения: 24
хм ... а у меня /sys/class/gpio нету.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с GPIO из Linux
СообщениеДобавлено: 05 сен 2010, 20:53 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10990
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
ядрышко криво собрано
без этого CONFIG_GPIO_SYSFS=y


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 20 ноя 2010, 02:15 
Не в сети

Зарегистрирован: 20 ноя 2010, 01:29
Сообщения: 1
прог. языки: C, bash
ФИО: Сергей Манучарян
Тема жива ещё? Как-то немало вопросов было поднято, но большей частью они остались без ответов обсуждений.

Я недавно собрал и установил Archlinux. Мне нужны GPIO, ADC и SPI.

Подправил ядро для распознавания второго SPI порта - работает, но непонятно, как с 8-битным регистром организовать посылку 32-битных слов без ощутимых задержек между байтами.

По поводу прямого обращения к регистрам GPIO/ADC и пр. есть кое-какая информация, например, здесь:
http://www.friendlyarm.net/forum/topic/67 . Там же пишут как "включить" в ядре остальные ADC и получить /dev/adc{1,2,3}, но весьма абстракто, есть кое-какие подводные камни.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 22 ноя 2010, 17:53 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10990
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
Жива, жива
немного заморожена по причине моей занятости на работе
народ ковыряет потихоньку


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 24 ноя 2010, 13:23 
Не в сети

Зарегистрирован: 14 июн 2010, 17:19
Сообщения: 167
прог. языки: Qt/C/C++
aragats писал(а):
Тема жива ещё?
Жива.
aragats писал(а):
Как-то немало вопросов было поднято, но большей частью они остались без ответов обсуждений.
Нуу, касаемо этой темы, я в первом посте показал как юзать GPIO, этим способом и пользуюсь пока что. Решу насущные проблемы, буду играться с ядром. Не такое это и простое дело, как кажется поначалу. ИМХО
aragats писал(а):
Подправил ядро для распознавания второго SPI порта - работает
Дык статейку/код в студию ;) вдруг кому другому понадобится сделать то же самое. :)
aragats писал(а):
По поводу прямого обращения к регистрам GPIO/ADC и пр. есть кое-какая информация, например, здесь:
http://www.friendlyarm.net/forum/topic/67 . Там же пишут как "включить" в ядре остальные ADC и получить /dev/adc{1,2,3}, но весьма абстракто, есть кое-какие подводные камни.
Там как раз и предлагают написать драйвер ядра, т.к. по другому получить непосредственный доступ к регистрам процессора весьма проблематично.

_________________
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 24 ноя 2010, 18:16 
Не в сети

Зарегистрирован: 24 ноя 2010, 17:47
Сообщения: 4
для целей отладки можно и через регистры писать, с помощью простейшего тулза: www.bsdmn.com/openmoko/glamo/timings/memwrite.c, например ./memwrite $((56000010)) покажет вам GPBCON, ./memwrite $((56000010)) $((0)) запишет 32 разряда нуликов. Можно модифицировать по вкусу для дергания битов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 06 июн 2011, 00:43 
Не в сети

Зарегистрирован: 26 авг 2009, 12:00
Сообщения: 44
Откуда: Омск
http://www.starterkit.ru/html/index.php ... 0100#10174


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 15 июн 2011, 10:29 
Не в сети

Зарегистрирован: 14 июн 2011, 16:19
Сообщения: 5
Откуда: Киров
прог. языки: Pascal/C#/C
ФИО: Александр
Извиняюсь, но так и не смог полностью понять, как использовать прерывания GPIO.

0) В документации по GPIO в ядре есть абзац GPIOs mapped to IRQs. Это можно использовать в миньке?

1) Здесь написано включая GPIOFS но что такое конкретно эта GPIOFS гугль не отвечает...

2) Использование inotify, это нерациональное, но решение. Только для этого нужно монтировать /sys/class/gpio/ в ОЗУ, перезапись флеш памяти будет занимать время и истирать её. Я думал, что минькин udev так и делает, но последние два сообщения отсюда опровергают это. Tmpfs поддерживается?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 15 июн 2011, 11:04 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Они вроде не опровергают, а только спрашивают. И ИМХО подобные опасения беспочвенны - во флешке находится только пустая папка sys. А то что в нее смонтировано - это _другая_ фс, sysfs, виртуальная.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 06 сен 2011, 22:49 
Не в сети

Зарегистрирован: 06 апр 2011, 20:36
Сообщения: 64
Добрый день.
Глянул в тему. есть пару вопросов?
1. что делать если нет каталога /sys/class/gpio
2. из какой среды програмирования предпочитаете работу с перефирией ( в частности с портами)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 07 сен 2011, 08:39 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
Цитата:
1. что делать если нет каталога /sys/class/gpio


Влючить в ядре, пересобрать ядро, установить ядро - profit!

Цитата:
2. из какой среды програмирования предпочитаете работу с перефирией ( в частности с портами)?


Вообще с портами в Линукс работает ядро - через драйвера. Это самый правильный путь. А при чем здесь среда програмирования?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mini2440 Работа с GPIO из Linux
СообщениеДобавлено: 07 сен 2011, 10:24 
Не в сети

Зарегистрирован: 06 апр 2011, 20:36
Сообщения: 64
Суть такая:
Запустить свою прогу, которая общалась бы с ком портами, SPI, Дергала ножками, читала статусы ножек и писала на внешнюю usb или sd флешку. Без среды програм. никак. вот хочу выбрать


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO