Страница 1 из 2

Работа с портами пинам. Макросы, X-macro

Добавлено: Сб июн 20, 2026 15:47:50
Demiurg
Всем привет. Вы все меня знаете. Давно работаю с МК AVR. Приверженец автоматного программирования. Конечные автоматы. Всплыл момент. Систематизация опыта и практики. Детали позже.
На данный момент. Я сейчас в регионе с ограниченным доступом к инету.
Мне нужны материалы по работе с портами AVR. Макросы, X-macro.
Типа:
name
port
pin
KEY_COD 0
Вместо PORTA A
activ_level LOW HIGH
Пишем KEY_COD, A, 3, LOW

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Сб июн 20, 2026 16:47:42
Rapra
Demiurg писал(а): Сб июн 20, 2026 15:47:50 Вы все меня знаете.
Я не знаю
Demiurg писал(а): Сб июн 20, 2026 15:47:50 Детали позже.
Океюшки.
Demiurg писал(а): Сб июн 20, 2026 15:47:50 Пишем KEY_COD, A, 3, LOW
Это чето странное.

В общем случае на языке С запись в регистр микроконтроллера сводится к записи по указателю. Например, *(volatile uint8_t*)0x15 = 0x45; Чтение из регистра - аналогично, только наоборот.

Продвинутая работа с макросами основана на параметрах макроса:

Код: Выделить всё

#define SUM(a, b) a + b
int c = SUM(5, 7);
Особый вид извращения - конкатенация в макросе:

Код: Выделить всё

#define INT_SUM(a, b) a + b
#define CHAR_SUM(a, b) a + b
#define SUM(a, b, TYPE) TYPE##_SUM(a, b);
c = SUM(7, 8, INT);
c = SUM(7, 8, CHAR);
"Детали позже"(С) :))

С другой стороны, чем проще и прозрачнее написано, тем лучше. Особо большой вред от конкатенации в макросе, поскольку имена получаются неявно, в результате склеек. Приведенный выше пример показывает такую проблемку. Вобщемто, это устаревший ныне метод.
Если перейдете на С++, проблема макросов в работе с портами отпадет. Получится что-то типа такого:

Код: Выделить всё

using pa3 = GpioA::Pin3;
using pb6 = GpioB::Pin6;
pa3::Set();
pa3::Reset();
pb6::Toggle();

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Сб июн 20, 2026 19:08:54
OKF
Demiurg писал(а): Сб июн 20, 2026 15:47:50 Мне нужны материалы по работе с портами AVR.
Как же так? Давно в теме AVR, учился у инженеров АVR, всё умеешь, а макросов для работы с портами не знаешь? Что то не сходится...

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Сб июн 20, 2026 23:02:08
Demiurg
OKF писал(а): Сб июн 20, 2026 19:08:54
Demiurg писал(а): Сб июн 20, 2026 15:47:50 Мне нужны материалы по работе с портами AVR.
Как же так? Давно в теме AVR, учился у инженеров АVR, всё умеешь, а макросов для работы с портами не знаешь? Что то не сходится...
Все сходится. И опыт ассемблера. И опыт си. Просто я пошел дальше. В данный момент я не дома. Далеко. В командировке. Связи нет. Интернета часто нет. А продумывать проекты нужно.
Обкатываю будущие идеи, проекты. Задумки
Потом поймёшь. Увидишь

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вс июн 21, 2026 02:02:03
Rapra
Ааа, пнятна, пнятна. Готовится прорыв. Скачок. Масштабная реновация. Гиперидея.
В принципе. Нужна лишь книжка по языку Си. Авторов Ритчи и Кернигана. Один раз скачать. И читать без инета.
Хотя макросы. Не являются "прорывной реновацией". Это, скорее, анахронизм. Морально устаревшая затея. Особенно виде "Пишем KEY_COD, A, 3, LOW".
"Потом поймешь. Увидишь"(С)

PS. Если я правильно понял "прорывную идею", то автор желает видеть что-то типа такого:

Код: Выделить всё

#define MACRO(var, KEY_CODE, PORT_LETTER, PIN, LEVEL) \
	if((PORT##PORT_LETTER & (1 << PIN)) == LEVEL) \
		var = KEY_CODE;
		
int keyCode;
MACRO(keyCode, 45, A, 3, LOW)

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вс июн 21, 2026 08:00:25
Demiurg
Готовится не прорыв. А накопленный материал. Я в свое время баловался в разных направлениях. Это и дискретная логика.. "Идеальный триггер". Это и автоматное программирование. Как слой мышления. Состояниями. И перенос парадигмы автоматного программирования на схемотехники разных уровней. Цифровая электроника, релейно-контактные схемы. Программирование.
Дело в том, что применительно к промышленному оборудованию и термины "автоматное программирование", "конечный автомат" ложится как есть. Состояния. Аварийный стоп, Стоп, Ручной режим, Полуавтомат, Автомат. Ну, примерно как то так ..

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вс июн 21, 2026 08:03:22
Demiurg

Код: Выделить всё

#define MACRO(var, KEY_CODE, PORT_LETTER, PIN, LEVEL) \
	if((PORT##PORT_LETTER & (1 << PIN)) == LEVEL) \
		var = KEY_CODE;
		
int keyCode;
MACRO(keyCode, 45, A, 3, LOW)
Хм. Попробую...

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Пн июн 22, 2026 03:37:41
Rapra
Demiurg писал(а): Вс июн 21, 2026 08:00:25 "Идеальный триггер"
Эт что-то новое. Действительно какой-то "прорыв". Че за идеальный триггер и на кой он нужон - х.з.
Demiurg писал(а): Вс июн 21, 2026 08:00:25 Цифровая электроника, релейно-контактные схемы. Программирование.
Эти лозунги как раз в духе времени "прорыва".
Demiurg писал(а): Вс июн 21, 2026 08:00:25 . Это и автоматное программирование. Как слой мышления. Состояниями.
Аа, теперь понятно, откуда у вас это. Отрывистое мышление. Обрывками по два-три. Слова. Состояниями. Автоматное мышление. Состояние раз. Состояние два.

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Пн июн 22, 2026 20:49:41
Zapolyarny
Rapra писал(а): Пн июн 22, 2026 03:37:41 Че за идеальный триггер и на кой он нужон - х.з.
Мне стало любопытно, и, хотя я предполагал, что это связано со скоростью и гистерезисом, всё же спросил ИИ (оказалось, есть ещё два параметра, если, конечно, нейросеть опять не наврала):
Характеристики идеального триггера:
Нулевая задержка между событием и запуском системы.
Отсутствие дребезга.
Нулевой гистерезис.
Бесконечная чувствительность.
Дребезг к чему тут - непонятно. Это же не триггера проблема.

Что-то мне подсказывает немного, что даже для ПЛИС подобное будет утопией.
Нужно использовать квантовую спутанность.
#define QUANT 0
#define QUANT 1
Идеальный квантовый триггер. Он уже переключится препроцессором. Моментально, без дребезга и т.д :)

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Пн июн 22, 2026 20:55:40
OKF
Во раздули. Гений AVR! Набери макросы Аскольда Волкова. Кажется, он даже земляк твой. Запишешь себе в плюсы тогда).

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вт июн 23, 2026 00:43:03
Demiurg
Нормальная тема. RS-триггер. Инженеры всего мира решали проблему. Запрещённая строка состояния таблицы истинности. Обошли эту проблему. Изобретением других триггеров. Счётчик. С запретом счета до 1. D-триггер. JK-триггер.

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вт июн 23, 2026 04:22:24
Rapra
Блин, так то JK триггер, известный уже более полувека. Только это никакой не "идеальный триггер", зачем придумывать свои названия. Это синхронный RS-триггер, полученный добавлением счетного входа.

Изображение

И если внутри J и K входы, получится простой счетный D-триггер. Без каких-то там запретов счета до 1.

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вт июн 23, 2026 09:20:43
OKF
Demiurg писал(а): Вт июн 23, 2026 00:43:03 Нормальная тема.
Спасибо не забудь сказать. А то один пафос от тебя. ППЦ!

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вт июн 23, 2026 09:51:06
Demiurg
...
В 90-е года, когда настал черед изучения цифровой электроники, я столкнулся с RS-триггерами. С этой пресловутой запрещённой строкой состояния таблицы истинности. Как было написано в одной книжке, эту проблему решали инженеры всего мира. Я пытался обойти эту проблему. Собирал схемы. Не вышло. В 2005 году мне была поставлена задача, модернизировать станок Chodos. Экструдер, выдувные изделия. Старое управление было собрано на рассыпухе, комбинационная логика. Два огромных шкафа с кучей плат с логикой.
Я когда начал, опять вернулся к проблеме RS-триггеров. Отложил в сторону, занялся другими подзадачами. В том числе, к реле времени. Начал баловаться с К561ИЕ8. Счет, схемы совпадения. И неожиданно понял, что решил проблему. Идеальный триггер. Смотрите. Вход C теперь условно вход S. Выход 0 инверсный выход, выход 1 - прямой выход. Вход запрета счета на выход 1. Вход R остаётся как есть. Асинхронный сброс.
Пожалуйста. Вот основа идеального триггера. Позже проанализировав таблицы истинности я нашел ещё два решения. D-триггер и JK-триггер.
Станок был успешно реализован я собрал что то вроде матрицы идеальных триггеров. По сути, это получилась реализация конечных автоматов на логике. Станок успешно отработал более 10 лет, пока железо не стерлось. Выкинули на свалку. Электроника осталась целой.

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вт июн 23, 2026 10:39:24
Rapra
Блин, Demiurg, а что, книжки почитать было не судьба чтоль? JK-триггер был придуман даже задолго до твоего рождения. Если тебе кажется, что изобрел велосипед, оглянись - быть может он уже давно придуман.
Это не такая уж сложная задача, если честно, чтобы "инженеры всего мира" над ней бились. Надо было просто читать правильные книжки.
Есть еще ассиметричный RS-триггер, у которого сигнал на S имеет приоритет

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Вт июн 23, 2026 13:11:42
OKF
Rapra, хочешь анекдот? Думаю, можно, т.к. форум едва дышит.
Году, этак, в 1981-м я решил собрать ус-во. АДКМ - Автоматический Датчик Кода Морзе. Для меня это было очень актуально. Статья была в журнале Радио. Там было порядка 40 мс и фиг знамо сколько переключателей П2К, причём многосекционных. В общем, у меня получился 3-х платный вариант, платы связаны жгутами. Но основная беда получилась с JK триггерами. А их там было, как бы не 3 штуки. Так вот. Из этих трёх правильно работал только один! При том что все были новые, но разных заводов. Этто чтотто! Я кучу нервов потратил на то что бы найти нормальные, работающие так как надо, по спецификации!!! Не помню уже подробности, но и проблема была найти КАК правильно они должны работать!) Вообще, оглядываясь назад, думаю что сейчас бы я так точно не смог. А тогда было много сил и энергии. Помнится, даже в командировке, в гостинице паял. Ужас.)
Это я к тому что не так прост JK триггер, как его малюют.)

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Ср июн 24, 2026 08:50:04
Demiurg
Слышь, друг. Ты докопался до меня? Жёстко ответил? Да! Ты чё до2,14бался?! Срань несусветная?
Конечно, пардон за мой хромой хранцузкий...
Не важно. Просто переоценка. Отвали моя черешня. Гуляй друг
Ты провокатор. Я хотел создать конструктивную тему. Ты пришел все обкакал? Зачем?!

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Ср июн 24, 2026 11:33:36
OKF
И после этого ты будешь говорить что ты нормальный? Друг? Кому, чего? ППЦ! И как люди могут с таким работать? По тебе дурка плачет. Ей богу.

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Ср июн 24, 2026 12:34:22
Starichok51
Demiurg писал(а): Ср июн 24, 2026 08:50:04до2,14бался
2,14 - это сколько?

Re: Работа с портами пинам. Макросы, X-macro

Добавлено: Ср июн 24, 2026 12:45:15
Rapra
Основание натурального логарифма e = 2,72,а не 2,14 вообсщета. Зовется числом Эйлера. В школах изучается классе в 9-м где-то