Обсуждаем контроллеры компании Atmel.
Ответить

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 21:36:53

А я вот такую реализацию опроса кнопок сделал. Может, кому пригодится.
Кнопки могут быть на любых портах, любых пинах. Макрос позволяет проверить состояние кнопки. Проверка - не чаще раза в миллисекунду. Можно отличать короткое и долгое нажатие. Антидребезг - программным счетчиком (у меня - 10 мс): событие нажатия или отпускания появляется лишь 9 мс спустя. Если кому-то критично, это легко можно переделать (чтобы событие генерировалось сразу, а следующие 10мс просто отсутствовала реакция на кнопку - у меня так было где-то в старых реализовано). Но вот если кнопка - не кнопка, а какой-нибудь экстренный концевик, то более разумным может быть его на прерывание посадить. Правда, те же шаговики я тоже без прерываний обслуживаю: просто каждые 5-10мс проверяю состояние концевиков, и если что - экстренно останавливаю.

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 21:41:01

Обычно, для однозначного визуального отличия макроса от функции имя макроса записывают целиком заглавными буквами, а имя функции - с заглавной буквы, остальные строчные. Ну так общепринято, чтобы разные программисты друг друга одинаково понимали.
Префиксные подчеркивания же означают резервирование имени, его отличие от других таких же имён, которые могут быть применены.

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 21:41:09

Demiurg, кстати, про "пины разбросаны". Я неоднократно натыкался на убогий стиль разработки китаезов: такое впечатление, что им проще софтовую реализацию UART/I2C/SPI сделать, а такты генерить ногодрыгом, чем использовать аппаратные возможности МК.
Вот здесь я ругаюсь про плату управления (аж семью независимыми!) шаговиками, которую набыдлокодили убогие китайские "разработчики"!.. А я еще думал поначалу: а как же эти ироды умудрились найти семь таймеров с ШИМ на STM32F407? А никак. Они даже UART для тринамиков наговняли софтовый.

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 21:46:31

С точки зрения "разбросаны пины", есть два подхода: либо они действительно разбросаны по модулям, а в doxygen-описании они собираются в одном месте в виде таблицы распределения пинов, либо наоборот, инит всех пинов выполняется в одном месте и за один раз. Оба способа имеют свои пюсы и минусы

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 21:49:30

Ситуаций, когда пины разбросаны полно. Я перечислил.
Китайцы пусть за себя и отвечают. Я тоже много косяков словил. В том числе, в том же Термодат 10к6. Пин RESET ВИСИТ В ВОЗДУХЕ! Мало того, через всю плату дорожка идёт. Жесть.

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 22:03:02

Demiurg, ну и пусть себе висит: он же подтянут внутри микроконтроллера к питанию. Понятно, что дорожка - нехорошо, ведь подтяжка килоом в 50: при сильных наводках может само по себе и перезагрузиться. Но вот принудительно этот пин к питанию подтягивать, если от него не идет длиннючая дорожка, а он не планируется использоваться в местах с сильными ЭМ помехами, смысла нет.
UPD, черт, я не глянул, что раздел - про аврки!
Последний раз редактировалось Eddy_Em Вс ноя 06, 2022 22:15:16, всего редактировалось 2 раз(а).

Re: Компилятор "убивает" локальную переменную. ЗАКРЫТО.

Вс ноя 06, 2022 22:18:41

Я на работе все Термодаты заменил. Больше половины сдохли. В одном, мк atmega32, кажется, вспучился. Термодаты как раз порой в жёстких условиях эксплуатируются. Так что не надо говорить, пусть себе висит. Вот и сдохли эти Термодаты. У кого прошивка слетела, у кого мк сдохли. А все из-за не запланированного сброса мк. Возможно, контроль питания не был подключён.

Добавлено after 8 minutes 42 seconds:
UPD, черт, я не глянул, что раздел - про аврки!

Нормально. Завтра гляну твой пример. MLX90640, тоже для arm выкладывал. Ниче так. Подсмотрел кое что.
Ответить