LINUX.ORG.RU

MB77.07 GPIO

 


1

2

Доброго времени суток. Собственно вопрос в следующем можно ли дергать gpio напрямую, минуя sysfs? P.S. если можно, то подскажите как? через nmc пока не предлагать.

Есть два варианта:,в одном пики точёны, в другом...

1 - ломиться напрямую в /dev/mem и писать в регистры.

2 - написать модуль ядра который будет делать то что нужно с gpio напрямую.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Вот с регистрами идея более чем хороша.Но вот проблема в том, что нет адресов на gpio в карте памяти (VIC0). Либо что-то не правильно с записью в регистры делаю

digios ()
Ответ на: комментарий от Dark_SavanT

На той же распберри имеются библиотеки которые работают напрямую с регистрами. Задача пока просто помигать светодиодом. Но в дальнейшем потребуются команды критичные к времени выполнения. Тот же шим.

digios ()
Ответ на: комментарий от digios

Но в дальнейшем потребуются команды критичные к времени выполнения. Тот же шим.

Во-первых, у чипа могут быть выводы с аппаратным PWM. Тут я не в курсе, надо читать документацию.

Во-вторых, переход от sysfs к работе напрямую с регистрами из юзерспейса тебе не даст ничего, кроме багов и геморроя. Написание своего модуля ядра, работающего с GPIO, тут гораздо более в тему ИМХО.

Deleted ()
Ответ на: комментарий от Deleted

шима аппаратного нет. писать в регистры будет на порядок быстрее, те же тесты с распберри это доказывают (arm ядра одинаковые - 1176). Также есть пример под nmc у «модуля» по работе с gpio (миганием светодиода на плате) через регистры. Написать свой модуль ядра конечно круто, специализация только прикладная, но хотелось бы разобраться если литературку подсказали бы.

digios ()
Ответ на: комментарий от digios

писать в регистры будет на порядок быстрее

Но тебе ведь надо не «быстрее», а «вовремя», так? Второму в юзерспейсе всегда будет мешать переключение задач планировщиком.

Deleted ()
Ответ на: комментарий от Deleted

«вовремя» - точное определение того что нужно. Если писать тот же модуль для ядра, то разве не с регистрами необходимо будет работать?

digios ()
Ответ на: комментарий от digios

Суть тут в том, чтобы избавиться от внезапных переключений задач, которые неизбежны в юзерспейсе. Но тут лучше не меня слушать, а более опытных разработчиков реалтайм-софта =).

Deleted ()
Ответ на: комментарий от digios

На той же распберри имеются библиотеки которые работают напрямую с регистрами.

Для экспериментов пожалуйста, но в продакшене за такое надо бить по голове ногами.

Задача пока просто помигать светодиодом

gpio-leds и timer trigger. Всё уже написано и протестировано за тебя.

Но в дальнейшем потребуются команды критичные к времени выполнения

А вот это у тебя получится только в ядре. В userspace добиться приличного времени отклика крайне непросто.

Тот же шим.

pwm-trigger вроде даже в мейнлайн уже затащили.

Небольшой пример - сделай простенькое приложение, которое будет раз в секунду выводить timestamp с наносекундами на экран. После чего нагрузи проц какой-нибудь бессмысленной работой, например запусти десяток, а лучше сотню «cat /dev/urandom > /dev/null » параллельно и посмотри что произойдёт с выводом.

Dark_SavanT ★★★★★ ()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

Пока все эксперименты в рамках обучения. Про нагрузку и отзывчивость я понял и осознал. Тогда вопрос в другом, в том же ядре придется работать также с регистрами?

digios ()
Ответ на: комментарий от digios

Если делать как надо, то нет. Пишешь свой модуль, который будет делать gpio_request на нужные тебе gpio, после чего уже через нормальные ядерные интерфейсы с ними работать.

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

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

ок, спасибо, много пока непонятного, но будем разбираться.

digios ()
Ответ на: комментарий от Deleted

SCHED_FIFO или SCHED_RR

p.s. ТС, рано тебе в эмбэдед/системщину

anonymous ()
Ответ на: комментарий от Deleted

SCHED_FIFO или SCHED_RR

p.s. ТС, рано тебе в эмбэдед/системщину

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.