Pull to refresh

Comments 26

latch register имеет вполне устоявшийся перевод регистр-защелка, упомянутые Вами, помимо этого, задвижка, фиксатор, заслонка здесь явно лишние.
Ах, этот latch. Вы тут, сами того не ведая, попали в одну из мозолей.

Я пытался найти «академические» переводы всех терминов. Не все мне понравились, но что делать. Но вот конкретно с latch мне «защелка» не нравится категорически. Я же гуманитарий, у меня образное мышление, и защелка для меня — это такой замок на двери. В электронном случае это что-то однобитовое, типа триггера, показывает состояние _замка_, но не двери. А latch в сдвиговых регистрах — это именно задвижка, потому что сразу открывает кучу битов. Это как задвижка на собачьих гонках — поднял вверх, все собаки побежали. «Защелка» этого смысла не передает.

Но это не все. Само latch в английском, по-моему, тоже не очень корректно, правильно было бы что-то вроде snapshot (снимок) или cast (слепок). Потому что, открывая его, мы не выпускаем собак, а выпускаем копии собак, сами собаки остаются на месте. Это актуально для сдвиговых регистров — копии битов вылезли наружу, но сами они остались в буфере, их можно двигать и снова использовать. Не уверен, что это как-то применяется, но понимание этого факта здорово помогает дебажить всякое. Например, я ведь на STM32 сперва просто чуть изменил атмеговский код, а на Атмеге нет BSY, и получил вроде как работающие светодиоды, только работали они как-то не так. Хорошо, что я к тому времени понимал принцип и быстро вычислил проблему.

В общем, я решил, что главное — не перевести термин, а объяснить его работу, чтобы сами слова latch и latched были интуитивно понятны. Отсюда задвижки, фиксаторы и прочая.

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

Вообще, я не электронщик — дилетант, но во всей русской литературе это называется именно защелкой.
Смысл все и так понимают, даже если слово не совсем точное, а использование не устоявшегося термина только вводит в заблуждение неопытных любителей.
Вы рассматриваете работу регистра-защелки в составе сложного устройства (многоканального светодиодного драйвера). Отсюда неправильная трактовка его работы, как чего-то, пропускающего сигналы на выход. Функция регистра-защелки заключается в фиксации (запоминании, «защелкивании») входного состояния по фронту управляющего сигнала. Возможно, упомянутый вами термин snapshot (снимок) и был бы более удачным, но раз уж на протяжении многих десятилетий, в течении которых существует цифровая схемотехника, используется термин latch, то им и следует пользоваться, если желаете разговаривать на одном языке с другими и быть ими понятым.

Насчет неудачных устоявшихся русских переводных технических терминов можно говорить очень долго. Как пример:
  • «Поток» — это stream, thread, или, может, вообще flow?
  • «Строка» — это string или line?
Но раз уж существуют устоявшиеся общепринятые русскоязычные термины, пусть и не очень удачные, то именно ими и следует пользоваться.

ПС: По поводу «строки» вспоминается древняя переводная книга по редактору Multiedit. Автор перевода очень страдал от смешивания терминов string и line и в своем переводе в качестве line использовал слово «полоска». Во вступлении он объяснил и развернуто обосновал такой выбор, но, несмотря на это, при чтении взгляд непрерывно «спотыкался» о подобные вещи.
Отличная статья!

Я тоже не вполне понимаю, зачем писать на ардуине и подобных «оболочках».
Это же хобби, то есть интересен сам процесс разработки, а не только и не столько результат :-)
Есть такая фишка как «порог вхождения». Сколько %% ардуинщиков захотят/смогут вникнуть даже в столь подробную статью?
Порог вхождения не такой высокий как кажется. Поморгать лампочками и так сойдет, а сделать что-то более или менее разумное — все равно придется даташиты читать.

Я вообще не вполне понимаю, кто такие ардуинщики? :-) С одной стороны, пишут на С, что в современном мире приравнивается чуть ли не к ядерной физике, с другой стороны, не могут даташит прочитать…
Ну, я бы сказал, что C на микроконтроллерах — это barebone C, некий универсальный язык, в котором есть базовая логика и циклы. Там просто некуда впихнуть все настоящие сишные заморочки. Неслучайно есть компиляторы на Бейсике и Паскале, там получается ровно то же, только букв больше.
Знаете, это звучит почти оскорбительно: «Сколько ардуинщиков осилят прочесть небольшую техническую статью с иллюстрациями?» :) Хотя немалая доля истины в этом вопросе имеется, к сожалению…
Зря вы на Ардуину и оболочку. Гениальная штука, порог вхождения нулевой, да и сама IDE вполне годная для мелочей (я вот не могу себе позволить поставить слонопотама Atmel Studio на рабочий ноутбук).

Все зависит от человека и его интереса. Кто-то ограничится Ардуиной (точнее, Atmega328p), кто-то поймет, что маловато и надо посмотреть вокруг. И здесь, к сожалению, случается пропасть — тот же ST Visual Desktop ну совсем не располагает радостно в себя погрузиться.
Против ардуинного IDE я вообще ничего не имею. Вполне работоспособная. Порог вхождения все-таки не совсем нулевой. Это только программистам так кажется. :-) Да и программистам надо понимать про ножки, регистры, мапинг на память и т.п. — это все то, что в современном программировании считается слишком низким уровнем, чтобы об этом знать.

тот же ST Visual Desktop ну совсем не располагает радостно в себя погрузиться.


Я баловался с IAR-ом. В рамках бесплатных ограничений мне хватало. Ну или можно поискать какие-то средства…

При упоминании фраз вида "использовать регистры" я представлял использование библиотечных дефайнов. Но вот непосредственно самому дефайнить адреса — такой уровень хардкора я еще не встречал.

Я в прошлой статье писал, почему для STM32 мне кажется правильным дефайнить адреса (там еще комментаторы обсуждали это, помнится). Конкретно в моем случае — потому что есть модуль под STM32 для Arduino IDE, он построен на Maple и у него библиотечные дефайны отличаются от STM-овских. Я делал библиотеку для любителей, я не знаю, чем они пользуются, мне было проще напрямую писать по адресам для совместимости.
UFO just landed and posted this here
Среда называется ST Visual Develop. Начинающим могу дать напутствие: весьма глючный инструмент, про удобство молчу. При создании workspace и project сразу — падает, по крайней мере, у меня. Сначала пустой workspace, сохранить, потом добавить в него проект. Не всегда правильно собирает проект после изменений, иногда требуется rebuild all. Еще были какие-то баги с st link, не помню точно какие. Использую STM8 исключительно ради фич (двухтактные выходы с deadtime и fault и другое), поскольку разработка под них в винегрете из STVD и COSMIC — боль, особенно для меня, весьма так себе программиста. Наработок кода достаточно мало, например не удалось найти буфферизированный вывод в uart (может плохо искал), пришлось написать самому. Порта FreeRTOS нет, вообще с осами все очень плохо у STM8, есть OSA, запустил, работает но грустно и невкусно. Кроме того, были проблемы с дохлыми STM8S003F3P6 из коробки, поэтому моя вера в них пошатнулась. Для них пилят поддержку Arduino, может даже что-то выйдет из этого путное. Однако свободного C++ для STM8 нет, может и не будет.
>Среда называется ST Visual Develop.

Спасибо, поправил. У меня не падает, но некритичные ошибки выдает все время.
Картинка Pin Definitions для Blue Pill с ошибочкой. У порта PB5 должен быть не T2C2, а T3C2.

Определение LAT_pulse — потенциальный источник проблем. Там 2 оператора в define без блока. В результате конструкция if (...) LAT_pulse(); приведет к неожиданному выполнению только одного оператора из 2х. Используйте do {код} while(0) в таких случаях. А лучше inline функции

Спасибо, да, inline конечно лучше.
Небольшой «плач Ярославны» общего назначения… Чем вызвана «всеобщая» любовь к начинающимся с символа подчеркивания именам (вроде _SPI2_(address)) в собственном коде? Просто «бунтарство» какое-то, поскольку стандарты языков C и C++ осуждают и даже запрещают такую практику?
В моем случае: я не хотел случайно устроить illegal redefine.
Т.е. я не знаю, как там в библиотеках STM и LeafLabs сделаны дефайны, мне проще использовать _, чтобы точно их обойти. Мой код могут использовать любители, нашедшие его на гитхабе (и я их знаю).
UFO just landed and posted this here

Как управлять фазой PWM сигнала на STM32?

Например надо эмулировать сигнал с инкрементального энкодера.

Sign up to leave a comment.