alexey_donskoy: (Alek)
[personal profile] alexey_donskoy
...или "не поймите меня правильно".

Раньше я частенько забавлялся подобными логически безупречными фразами, которые при ближайшем рассмотрении вызывают небольшой когнитивный диссонанс (требуются ли пояснения, почему? ;)).

Но вот сегодня я осознал всю глубину своего невежества.
И ведь дело-то в чём?! В простейшем электронном устройстве - элементарном RS-триггере!



Не знакомым с логикой и электроникой будет трудно оценить (или переоценить... или недооценить). Но я всё равно напишу, потому как познавательно. И потому как вспоминаю, что всё-таки программист, и было бы совсем не худо дискуссионные вопросы и мысли в блоге излагать, а не только на специализированных форумах.

В общем, спросили меня про вот эту формулу в википедийной статье про триггер:

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

Здесь уместно небольшое "философское" отступление.
Математика - это специальный язык (для формализации), одно из свойств которого - упрощение записи, свёртка обычного текста, описывающего явление или процесс.
Ну вот есть у нас файл большой и здоровый, и мы сжимаем его архиватором, чтобы уменьшить размер, сэкономить трафик и всё такое. И здесь у нас есть описание поведения триггера на обычном человеческом языке, которое проходит ряд последовательных трансформаций (переводов на формальные математические языки), в результате чего запись становится всё более короткой и всё менее понятной ;)

Начинаем, как водится, с неформального словесного описания: выходной сигнал триггера Q устанавливается в 1 импульсом по входу S (Set) и сбрасывается импульсом по входу R (Reset), сохраняя состояние при отсутствии обоих входных сигналов.

Попытка формализовать описание начинается с перечисления всех возможных случаев. Получается таблица состояний:

SRQ
00Qn-1 (сохраняет состояние)
010 (сброс)
101 (установка)
11? (неопределённое состояние)


Разумеется, таблица обычно компактнее словесного описания, но, главное, она не даст возможности забыть и упустить из виду какой-либо вариант! Чем и ценна.

Ну, рассмотренный случай проще некуда, а для реальных логических схем таблица разрастётся до невозможности, поэтому напрямую используется редко.
Проведём следующий сеанс упаковки математическим формализмом (алгебра логики).
Но обычная (комбинационная) логика не допускает таких понятий, как "не определено"!
Что делать? Договориться, чему должен быть равен результат при единице на обоих входах.
Проще всего его обнулить. Тогда получим систему:

1) Q = 0, R=1
2) Q = Q | S, R=0

То есть вход сброса получает приоритет, и плевать на другой сигнал вообще, как и на прежнее значение выхода.

Собственно, так я всегда и делал в своих системах имитационного моделирования. Просто потому, что один раз принял такое, довольно логичное, решение - и сегодня напрочь забыл о том, что чисто с математической стороны (как и со стороны электроники) неопределённость разрешается по-другому...

Ну а дальше по цепочке - произведём ещё одно сжатие записи, применив операцию венъюнкции, которую, вероятно, изучают математики, но далеко не все инженеры:


Таким образом, всё выглядит точь-в-точь как в приведённой аналогии с размером файла: более высокая степень сжатия требует усложнённого способа упаковки и, соответственно, увеличения накладных расходов на работу архиватора! ;)


Всё бы хорошо, но вернёмся к невежеству.
Честно признаюсь, мне эта запись в принципе не нравится. Потому что хоть она и компактна, я её нифига не понимаю. Да, я прочитал Википедию и справочник. И этого не хватило. И да, мне лениво искать и читать учебник. Потому я вижу, что где-то здесь ошибка. Но серьёзные люди считают, что всё в порядке. И я оставляю своё непонимание до лучших времён, которые вряд ли когда настанут.

«Муки совести переносимы» – вот одно из маленьких неприятных открытий, которые делаешь с возрастом. (Стругацкие, "Волны гасят ветер")...

Date: 2016-08-18 08:39 am (UTC)
From: [identity profile] unmodern-person.livejournal.com
Ух... Триггеры у меня были 20 лет назад, в университете. После этого с ними больше не встречался.

Date: 2016-08-18 09:29 am (UTC)
From: [identity profile] bazuken.livejournal.com
А у меня триггеры только с базой данных ассоциируются (

Date: 2016-08-20 05:56 am (UTC)
From: [identity profile] r0l.livejournal.com
Хе хе. Все и так, и не так, дружище. Я аж задумался, как бы объяснить, но чувствую, что как раз теоретической подготовки мне не хватает. Ну потому что это же триггер. Ясно же все. Это аксиоматично же.

А я еще вот лично видел буквально на этой неделе аппарат, у которого оба входа на триггер это Т-выходы с других триггеров причем со встроенными кондерами, то есть сигнал идет при превышении определенного порога и только. Как вот их звонить нормально? Подумай об этом. Порви себе мозг. И поставь себя на мое место (ребенок внутри визжит "Дииимааааа! Ну когда уже ты из отпуска???")

:-)

P.S. А оказалось, что непостижимым образом ground signal на плате коротнулся от одного из входных с выходным. В результате чего аппарат впал в маразм, как ты понимаешь.
Edited Date: 2016-08-20 05:58 am (UTC)

Date: 2016-08-20 08:41 pm (UTC)
From: [identity profile] r0l.livejournal.com
Вот именно в софте хорошо то, что ты всегда можешь отбросить неопределенности. В электронике не всегда так, как ни странно. Например, я бы не стал без больших очков на лице пробовать подать единицу на оба входа (в некоторых случаях) ;)

Например в большинстве кассовых аппаратах есть батарайка "таблетка" на матплате (тут правда это называется БУ, блок управления). Три вольта ноль целых хрен десятых ампер. При этом аппарат может жрать 24 вольта и 2.5 ампера снаружи, но! Цепь устроена таким образом, что в случае, когда батарейка "провисает", иногда на наш любимый лпц1768 приходит вроде бы не ноль, а "что-то там, вроде бы единица, я хрен знает". И чем больше стареет батарейка, тем чаще такое происходит. Ну и результаты, как ты понимаешь, самые своеобразные. И хорошо если спроектировано нормально и проц просто уходит в техсброс. Тогда хотя бы понятно, в чем дело.

Ну и вот ты берешь БУ и решаешь заменить батарейку а она не на колодке, как у нормальных людей, а приварена за контакты в плату (не припаяна, да, приварена!). Свинчиваешь плату (четыре болта, два крепления rs-232), выпаиваешь концы, впаиваешь колодку, ставишь батарейку, а, черт, задел транзистор, это зря, ой зря, ладно щас на всякий случай новый поставим БЛЯДЬ! А тут какой стоял, PNP или NPN? Черт, это ж фуджитсу, к нему инструкции-то нет не на японском....


Вот что не так, дружище, и вот чем софт отличается от харда. Надеюсь, я объяснил если не суть, то эмоцию.

Date: 2016-08-20 08:55 pm (UTC)
From: [identity profile] r0l.livejournal.com
Ну, софт все равно работает на харде. Потому наверное и возникают иногда неожиданности. Вот есть такая машинка, Орион-100 (герой моего пятничного поста, например). Там знаешь как техсброс делается? Чисто теоретически, можно:

- развинтить аппарат и добраться до проца
- вытащить его из колодки
- найти колодку программатора (тут важно не перепутать, их ажно три под этот размер, нам нужна та где на конце 28U а еще маркером на жопе написано ОРИОН)
- вставить процессор в колодку
- вспомнить, как эта колодка правильно вставляется в программатор ChipProg
- отодрав бумажку с гостом посмотреть какой именно у нас процессор (ну там winbond или atmel 24c256 или там philips p89c51d2)
- обнулить его, загрузив соответственный блок в программатор и нажав "начать"

Но так никто и никогда не делает. Делают знаешь как?

Включают аппарат и замыкают отверткой конденсатор, обозначенный на принципиальной схеме как С37. И в проц приходят те самые "две единицы" на вторую и седьмую ногу. По сути, происходит нечто, чего не может быть, потому что не может быть никогда. Проц говорит "охнихуясебе" и обнуляется самостоятельно.

Вот так-то. И этого ты никогда не сможешь полностью учесть, работая только с софтом.

Date: 2016-08-21 02:32 pm (UTC)
From: [identity profile] r0l.livejournal.com
О, порты и потоки. Это бич просто. Не знаю, представляешь ты или нет, но у меня на работе системник повернут жопой ко мне, и кнопка питания выведена туда же. Потому что порты всех типов используются не менее полусотни раз в день. Причем, как водится, программами и драйверами совершенно разных производителей, то ли не знакомых между собой, то ли намеренно гадящих остальным.

И вот ты вытаскиваешь из коробки новый аппарат, с новым шнуром, тык - и ноль. Ты прозваниваешь БП. Ты прозваниваешь аппарат. Весь (если ты думаешь, что это легко и быстро, ты зря так думаешь). Ты прозваниваешь шланг (это я по первости все честно делал, да). А потом выясняется, что "порт занят приложением AVR Studio". То есть он его забрал, пока я штрих-фрк прошивал, и назад не отдает. Забыл. Ему видите ли нужнее.

И главное, ты не понимаешь, как. Базовые админские навыки у тебя вроде есть, но тут что-то неясное происходит. Слава Зевсу, у меня есть волшебное заклинание. А именно,

— КИРИЛЛ!!!

Он разберется. Точно так же как я разберусь если ему понадобится физика (он сам паяльника побаивается).

Profile

alexey_donskoy: (Default)
alexey_donskoy

January 2017

S M T W T F S
1234 567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 2nd, 2025 10:27 am
Powered by Dreamwidth Studios