`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Андрей Зубинский

Микроконтроллеры и embedded вообще. Часть 02

+1515
голосов

В предыдущей записи обещалась неожиданность. И она будет. Мы начнём «влезать» в довольно суровую инженерную конкретику ещё до ознакомления с конкретными образцами микроконтроллеров. Это не моя прихоть. Как в любой области знаний и практики, здесь есть свои устоявшиеся приёмы и идиомы, и лучше начать сразу с них, а не приходить к ним или путём мучительной загадочности любительских экспериментов, или никогда вообще до них не дойти («путь Arduino», о нём ещё скажу пару слов, заранее же говорю – по этому пути мы не пойдём).

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

Микроконтроллеры и embedded вообще. Часть 02

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

Оранжевым обозначен фактически «обычный» компьютер, состоящий из центрального процессора (CPU) со всякими схемами управления и прочим (такие детали пока не важны), очень дорогой ресурс (потому что ярко красным цветом) – оперативная память (RAM) и специфическая энергонезависимая память с произвольным доступом (Energy Independent RAM). Последний термин не является стандартным и вообще выдуман для этой статьи, но такая вульгарность кажется позволительной. Дело в том, что в качестве EIRAM в реальных микросхемах может использоваться энергонезависимая память, выполненная по разным технологиям, больше того, в одной микросхеме могут уживаться сразу две технологии такой памяти. И общее у всех этих технологий одно – они позволяют сформировать массив ячеек памяти с произвольным доступом и сохраняющий записанное в них независимо от наличия напряжения питания.

В общем, так как профильность издания подразумевает информированность в области «обычных» компьютеров, пока этим и ограничусь. Перейдём к конкретным микроконтроллерам – там можно будет и поговорить детальнее.

Сконцентрируемся на сугубо «микроконтроллерных» подсистемах, которые на рисунке сгруппированы в верхнюю линейку блоков и «смотрят» зелёными выводами в физический мир. В каждом семействе реальных микроконтроллеров эти узлы непременно есть, у них есть свои нюансы, но общие принципы остаются общими принципами.

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

Мы уже говорили ранее, что реальный мир для микроконтроллера ограничен небольшим количеством измеряемых величин, и для IOD такой величиной является напряжение (разность потенциалов). То есть, IOD позволяет или «подсматривать» за каким-то напряжением и выяснять – оно вообще есть или его нет, или выдавать/не выдавать какое-то напряжение. Это минимальный набор. Потому что если немного задуматься об «отношениях» с реальным миром, можно сформулировать недостающее важное. А именно, - полное (в идеале) невмешательство во внешний мир. IOD и это обеспечивает, практически во всех микроконтроллерах. На инженерном жаргоне это невмешательство называется «третьим состоянием».

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

Микроконтроллеры и embedded вообще. Часть 02

 
«Внутренний мир» микроконтроллера заключён в розовый прямоугольник со штриховой границей, в реальный мир из микроконтроллера «выглядывает» зелёный вывод, в реальном же мире находится и источник питания, упрощённо – батарея (battery). Во внутреннем мире на один IOD приходится два программно-управляемых включателя-выключателя S1 и S2, красные штриховые линии обозначают «рычаги» управления, за которые можно «дёргать» программно.

Давайте задумаемся что происходит во внешнем мире с зелёным выводом, если состояния выключателей такое, как на картинке (оба разомкнуты) и никаких других соединений нет (раз они не отображены). Собственно говоря, думать здесь особо нечего – ничего не происходит. Потенциал этого выхода, если он не подключен к внешнему источнику напряжения (к другому потенциалу во внешнем мире) не равен ни потенциалу «+» батареи, ни второму её потенциалу. Вывода в электрическом смысле просто не существует. Он отключен от всего и ни во что во внешнем мире не вмешивается.

Мы только что открыли «третье состояние» типового дискретного входа-выхода микроконтроллера, очень важное в реальных приложениях, где к одной «точке», отображающей состояние реального мира, могут кроме микроконтроллера присоединяться другие элементы схемы или даже другие микроконтроллеры, и скоординированное использование «третьего состояния» гарантирует невмешательство одного узла в работу других.

Если же в этом «третьем состоянии» зелёный вывод подключён к внешнему источнику напряжения, то электрический потенциал в точке соединения выключателей S1 и S2 будет равен этому значению внешнего напряжения. Что в идеале позволяет малозатратно определить факт наличия этого напряжения – если оно больше какого-то порога, то считается, что оно есть, меньше – его нет. Мы сделали второе «открытие» – режим ввода IOD.

Ну и теперь воздействие на внешний мир. При такой типовой организации IOD возможны два типа такого воздействия. Первый:

 

Микроконтроллеры и embedded вообще. Часть 02

 
Мы к зелёному выходу микроконтроллера присоединили нагрузку, в данном случае – объект реального мира - низковольтную лампочку, -  и вторым выводом соединили эту лампочку с «минусом» батареи. Из программы мы командой замыкаем верхний выключатель схемы S1, что образует замкнутую цепь от «+» батареи к её минусу (конечно, электроны не умеют так перемещаться, но электронщики – очень абстрактно мыслящие люди и у них принято считать направление тока обратным физически возможному, просто потому что это увлекательно и ничего не изменяет). Потенциал выхода становится равным потенциалу «+» батареи, через лампочку течёт ток, лампочка даже может засветиться, если в действие не вступит суровая реальность – выключатели S1 и S2 неидеальные, у них есть предел максимально пропускаемого тока, и если ток через холодную нить накала лампочки окажется недопустимо большим, произойдёт печальное – выключатель S1 выйдет из строя, а он на кристалле микроконтроллера, поэтому если не следить за максимальной токовой нагрузкой (она указана в документации и обычно допустимыми являются десятки миллиампер) микроконтроллер можно считать погибшим.

Обратим внимание на направление тока при такой организации IOD в режиме выхода – ток как бы «вытекает» из микроконтроллера. И сразу заметим один важный нюанс – таким способом мы не можем установить на IOD микроконтроллера напряжение большее, чем питающее микроконтроллер, потому что никаких дополнительных питающих высоковольтных напряжений нет. Согласование уровней напряжений – ещё одна задача, которая решается в реальном мире.

Возможен и второй вариант включения нагрузки IOD, при котором ток «втекает» в микроконтроллер:

Микроконтроллеры и embedded вообще. Часть 02

 
В этом случае нагрузка включается между «+» источника питания и выводом IOD микроконтроллера, и для включения нагрузки программно надо замыкать выключатель S2, а не S1.

Внимательный читатель уже должен задать вопрос – а можно ли замкнуть одновременно включатели S2 и S1? И сам должен на него ответить – по идее такое можно сделать, но только один раз, потому что одновременно замкнутые S2 и S1 образуют короткое замыкание (КЗ) цепи питания, а короткое замыкание – это очень плохо, это разрушительная неисправность, приводящая к неработоспособности. Поэтому в микроконтроллерах аппаратными средствами гарантируется невозможность одновременного замыкания S1 и S2, так что программных ошибок с летальными для микроконтроллера последствиями можно не опасаться, все тяжёлые ошибки совершаются в реальном мире, за пределами кремниевой виртуальности.

Два приведенных варианта подключения нагрузки к IOD выводу микроконтроллера на инженерном сленге называют как-то вроде «логическая единица на выходе» и «логический ноль на выходе». В принципе, это правильно – замыкание S1 или S2 устанавливает на выходе потенциал или «+» источника питания, или второго его вывода, относительно которого измеряется этот «+». И эти значения соответствуют предельным значениям логической «1» и логического «0» в реальном мире вычислителя, а не в абстрактной булевой алгебре программ (хотя бы потому, что определяют реальные разные маршруты протекания тока). Ну а дистанцию между булевой алгеброй и реальностью, надеюсь, уже удалось продемонстрировать предыдущими объяснениями. И сейчас мы её существенно увеличим, потому что это было только начало.

Так как простейший IOD вывод – один из самых востребованных в любом практическом применении микроконтроллеров, таких выводов в них достаточно много, и они даже группируются в наборы, которые принято называть «портами». Порт, как набор IOD, позволяет быстро оперировать сразу группой IOD. При этом в пределах одного порта разные IOD могут одновременно выполнять разные роли – одни работать как «входы», другие – как «выходы», причём двух приведенных выше типов. Из этих сведений уже понятно, что для порта как набора IOD требуется как минимум некоторая информация об использовании каждого IOD порта – вход это или выход, а также для используемых как выходы IOD требуется буферная память, в которой хранятся состояния выходов, то есть, те самые «рычаги», которые замыкают-размыкают те самые два выключателя S1 и S2. Обратите внимание на «как минимум» в предыдущем предложении и не забудьте о нём. Это очень важно.
Итак, сведём всё уже известное об абстрактном порте микроконтроллера в следующую графическую модель:
 

Микроконтроллеры и embedded вообще. Часть 02

Это «четырехIOD’овый» или просто «четырехразрядный» порт, включающий две по логике необходимых области памяти, управляющих конфигурацией выходов микроконтроллера (определяющих назначение каждого физического контакта микросхемы – вход он или выход) и состоянием ключей S1 и S2 каждого IOD.

Мы уже достаточно знаем, чтобы из этой иллюстрации сразу сделать очевидный вывод о некоторых характеристиках объектов физического мира, подключенных к каждому IOD – так, мы знаем, что нагрузки выходов IOD1 и IOD4 включены между соответствующими контактами микроконтроллера и «минусом» источника питания, из этих контактов ток «вытекает», а вот к внешнему контакту IOD3 нагрузка подключена так, что ток в контакт «втекает». Если обратиться к практической схеме реального микроконтроллера, то, например, для трёх подключенных к внешним контактам (выводам) микросхемы светодиодов (полупроводниковых преобразователей электрической энергии в свет, которые, в отличие от использованной ранее лампочки, способны излучать свет только если ток через них протекает в «правильном» направлении) картина может быть такой:

Микроконтроллеры и embedded вообще. Часть 02

 
Синий незатемнённый прямоугольник с буквами внутри – символическое (схемотехническое) изображение микроконтроллера как компонента электронной схемы:

 

Микроконтроллеры и embedded вообще. Часть 02

 
"Схемотехническое" означает, что никакой информации о внутренней структуре микроконтроллера это изображение не содержит, из него мы видим только физические выводы микросхемы и краткие сведения о назначении этих выводов. Традиционно, порты (о которых мы говорим что они самые востребованные и состоят из групп IOD) в схемотехнической информации о выводах микросхемы обозначаются примерно как-то так – (символ порта)(имя или номер порта)(номер IOD в порте). На этом схемотехническом изображении, например, RB4 означает, что речь идёт о порте (который почему-то назван R, а не P), это порт B (есть ещё и порт A, если присмотреться), это 5-й IOD порта (если присмотреться, нумерация IOD в порте начинается с нуля). Возможны и близкие программистам «объектно-ориентированные» обозначения – P.A.05 или P.1.01, например. Вся эта шифрованная запись – дело производителя, как он обозначает в документации, то и приживается.  Если начало подписи на схемотехническом изображении соответствует этому принципу, но продолжается чем-то ещё, это означает, что за таким выводом упрятано куда больше функциональности, чем просто IOD. Помните, в начале мы говорили о том, что физические выводы микросхем имеют реальную стоимость? Поэтому выводы комбинированного назначения – обычное дело, и на схемотехнических изображениях (или просто схемах) вы можете увидеть целые романы в подписи к одному выводу – это вполне нормально.

Хоть обозначение назначения (ох, извините) вывода микроконтроллера – личное дело конкретного производителя, есть несколько специфических выводов, которые в электронной индустрии принято обозначать в соответствии с традицией. И эта традиция даёт некоторую дополнительную информацию, в первую очередь, о технологии микросхемы. В данном случае речь идёт о выводах, обозначенных VDD (VDD) и VSS (VSS). Это те выводы, к которым подключается источник питания. И они рассказывают не только о полярности подключения. В обозначении VDD символ D указывает на то, что микросхема изготовлена на основе КМОП-технологии, в ней основной элемент – грубо говоря полевые транзисторы (грубо потому, что вариаций полевых транзисторов в природе много), а в полевых транзисторах ток «втекает» в D(rain) (сток, потому что носители заряда на самом деле отсюда «вытекают», но это же электроника, в ней удобней думать наоборот), а «вытекает» из S(ource) (исток). А это значит, что VDD должен иметь больший электрический потенциал, чем VSS. То есть, VDD надо подключать к «+» батареи, VSS – ко второму её контакту. Так что если на обозначении микросхемы есть VDD и VSS – эта микросхема выполнена по КМОП-технологии (и как к ней подключать питание - понятно). А вот если VCC и VEE – то по биполярной, с использованием обычных биполярных транзисторов, у которых ток «втекает» в C(ollector) и «вытекает» из E(mitter).

Незатенённые символы на следующей иллюстрации – светодиоды, они образованы символом диода и двумя стрелками, отображающими излучение света:

Микроконтроллеры и embedded вообще. Часть 02

 
В идеальный светодиод, как и обычный идеальный диод, ток может «втекать» с «тупой» стороны обозначения (в опору треугольника), это анод (anode), и «вытекать» через острую, катод (cathode). По-другому ток через диод течь не может (это справедливо для идеальных моделей, реальность, как обычно, несколько отличается от идиллии). И, что важно, - сами по себе идеальные диоды ничем текущий через них ток не ограничивают. Неидеальные – ещё как ограничивают, особенно собственным разрушением или разрушением чего-нибудь более полезного и дорогого.

На нашей первой «реальной» схеме остались два неразъяснённых элемента. Первый и главный – источник питания. Он единственный обозначен как V1. Для него указана полярность. Его символ весьма информативен – обратите внимание на неразрывность линии, образованной красными проводниками схемы и внутренним отрезком в символе источника питания. Это то самое «короткое замыкание», которого следует бояться во всех прочих случаях. И только для источников питания оно символизирует совершенство – идеальный источник питания представляет собой нечто, имеющее нулевое электрическое сопротивление и всегда, при любой нагрузке и любом токе нагрузки поддерживающее на своих выходах заданную разность потенциалов (на нашей схеме – 5 вольт). В природе такие совершенные источники питания не встречаются.

Ну и, наконец, включенные между выводами микроконтроллера и светодиодами «прямоугольнички», которых ровно три. Это дань реальному миру и возможностям реального микроконтроллера. Мы об этом уже говорили ранее – если через ключи S1 или S2 IOD протечёт недопустимый ток, микроконтроллер придётся выбросить. «Прямоугольнички» - это символы резисторов, компонентов, обладающих электрическим сопротивлением, поведение которых описывается законом Ома. И это поведение в частности означает, что при заданной разнице потенциалов между выводами резистора, через него течёт ток, сила которого определяется сопротивлением резистора. То есть, в таком случае резистор выступает ограничителем тока. Так как источник питания у нас формирует известную разность потенциалов 5V, ключи IOD формируют соответствующие потенциалы на выходах микроконтроллера, а светодиоды сами по себе ничем текущий через них ток не ограничивают, то если мы не включим в такую схему токоограничивающие резисторы – или выбросим микроконтроллер, или светодиоды, или, скорее всего (потому что скорее всего светодиоды будут китайские, бренд «с базара», более дорогие использовать в экспериментах смысла нет), и то, и другое. Требуемое сопротивление резисторов легко рассчитывается, но это уже в следующих записях и косвенно.

Вот теперь вы знаете достаточно, чтобы восстановить соответствие номеров RB-выводов микроконтроллера выдуманному нами иллюстративному четырехразрядному порту и выявить, какой RB обозначает IOD3 (подсказка – RB4).

А мы, наконец, тихонько подобрались к одной из главных и крайне неприятных в реальности идиом микроконтроллерного «общения» с физическим миром. Понимание её настолько же важно, насколько важно понимание принципа «работы» переменной в императивном программировании (принципе, о котором классики программирования говорят кратко – если понял его, понял и программирование). И которая почему-то почти всегда в книгах «про микроконтроллеры» откладывается в ту дальнюю часть книги, до которой дочитывать не принято.

Итак, идиома RMW.

RMW – это аббревиатура Read-Modify-Write или Прочитал-Изменил-Записал. Смысл её отражает особенности работы процессоров практически всех вычислителей – чтобы изменить состояние ячейки памяти, процессору нужно выбрать текущее значение ячейки, загрузить его в рабочий регистр арифметико-логического устройства, выполнить модификацию и вернуть значение на его место в память. Всё это в современных RISC-процессорах обычно делается в одном машинном цикле одной команды. И является совершенно нормальным, пока содержимое ячеек памяти определяется детерминированным потоком исполнения программы.  Но содержимое ячеек памяти, отображающих состояния реального мира, такой детерминированностью не характеризуется.

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

Здесь наступила пора сделать одно важное очевидное явным. Чтобы наши логические и довольно абстрактные построения постепенно обрастали «мясом» реальности.

Вы должны были уже заметить, как удобно для каждого IOD порта описываются его конфигурации и состояния. Конфигураций всего две – вход или выход. Состояний для выхода – тоже всего два, S1 замкнут или S2 замкнут. Состояний для входа тоже всего два – есть на входе потенциал из заданного диапазона или нет. То есть, для представления значения каждой из этих категорий достаточно всего одного бита. Что и делается, конечно. И группа IOD порта «собирается» в одну ячейку памяти, в которой каждый бит отвечает за свой IOD. На каждый порт приходится как минимум по две доступных программно ячейки памяти – конфигурационная «вход или выход» и «состояния выходов-входов». Последняя доступна как по записи (что влияет на сконфигурированные как выходы IOD), так и по чтению (что возвращает в отдельных битах для сконфигурированных как входы IOD состояния входов, есть напряжение – нет напряжения).

Если мы применим любую RMW-операцию для достижения нужного нам результата к ячейкам памяти, на которые отображён реальный мир, она сведётся к очень быстрой скрытой последовательности чтения из порта состояний внешнего мира, внесения изменений в полученную картину и, наконец, в модификацию обновлённым состояния внешнего мира с помощью операции записи в порт. И тут начинается нечто нехорошее. Дело в том, что процедуры модификаций напряжений на выводах в реальном мире и «чтения» напряжений с выводов, - они быстрые. Очень быстрые. Речь идёт о долях микросекунд или наносекундах. А реальный мир часто оказывается слишком неторопливым по этим меркам. В реальном мире кроме омических (подчиняющихся закону Ома) сопротивлений всегда есть реактивности (ёмкости и индуктивности). То есть, нечто, обладающее электрической инерцией. И может случиться так (и часто случается), что инерционный внешний мир не успевает измениться за быстрой цепочкой операций RMW. То есть, возникает отличие того что есть в данный момент времени реального мира от того, что должно быть в этот же момент времени на временной шкале вычислителя микроконтроллера. На последовательности RMW-операций это несоответствие при абсолютной алгоритмической и программной корректности встраиваемого вычислителя очевидно может вызывать самые удивительные, в том числе и накапливающиеся, нарушения в его нормальной работе, вплоть до полной неработоспособности. Собственно говоря, это и есть RMW-идиома.

Очень изящные и сложные «неисправности» могут возникать при использовании RMW-команд процессоров над выводами портов, которые изменяют конфигурацию – то становятся выходами, то входами (распространённый приём). И совсем уж тяжёлые случаи происходят от игнорирования RMW-идиомы при всяких вычурных технических приёмах, обусловленных конкретикой специфического применения входов-выходов. Здесь есть даже свои легенды, о них сейчас очень рано. А, может, и вовсе нет нужды. Потому что вы уже знаете фундаментальное – в общем случае RMW-команды нельзя без потенциальных проблем использовать для непосредственных манипуляций с ячейками памяти портов. Ну, нельзя, и всё. Хотя это очень красиво программно, изящно, лаконично внешне и прочее, что так ценится программистами.

Ну и, само собой, существование RMW-идиомы предусматривает и идиоматические способы разрешения проблем, кроме запрета.

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

RMW-идиома особенно важна потому, что языки высокого уровня, используемые при программировании микроконтроллеров, никоим образом от её игнорирования не спасают. Разве что вы отыщете низкоуровневые специально созданные под класс ваших задач драйверы, написанные гуру embedded-программирования. Но вы же сами понимаете, что для всего разнообразия применений в реальном мире никто такого не напишет, поэтому низкоуровневые операции доступа к ячейкам памяти портов – это основа основ, и это практически всегда делается вручную для каждой конкретной задачи.

Для программистов – волшебное слово volatile в этой области, конечно же, присутствует, все переменные, на которые отображены ячейки памяти (регистры etc) портов в библиотеках компиляторов непременно объявлены volatile, но вы же понимаете, что это больше для вас, чем для компилятора, редактора связей и оптимизатора кода, и что это от игнорирования идиомы RMW никак не спасает.

На этот раз у меня всё.
В следующей записи перейдём к «мясу», то есть, нарастим на этом фрагмент реального микроконтроллера и разберём его.
Так, от логических построений к их овеществлению, и будем двигаться.
Корректируйте, спрашивайте в комментариях.

Откланиваюсь.

Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365

+1515
голосов

Напечатать Отправить другу

Читайте также

Вы создали аномалию. Обычно в вашим материалам много коментариев, а тут все задумались, что ли, и затихли. По-осторожнее :)

ничего-ничего, всё нормально

Уже вижу новогоднюю гирлянду на микроконтроллерах...

П.С. На рис. "абстрактного порта" ток втекает в IOD2 (он же в состоянии IN), а далее по тексту говорится о IOD3.

а пусть себе встекает, это всё равно, потому что IOD2 в состоянии IN, то есть, в третьем состоянии, и в него ничего не втекает и не вытекает, разве что очень незначительные нанотоки утечки.

про IOD3 всё правильно.

понимаю, что сбило - направление зелёной стрелки.
исправлю.

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

Интрига где?

интриги нет.

это ж, собственно, не для тех, кто уже.
а для тех, кто ещё совсем нет.

Даешь всем атмелом в массы!

будет интрига, будет, ладно )

Не, за 1 раз и сходу не осилил. Надо в несколько проходов.

Вот в таком направлении надо составлять учебники для 1го курса, чтобы сразу врывались в специализацию.

ОК, спасибо, это не страшно, что за один раз "не".
Даже и хорошо, наверное.

Спасибо! Прям вспомнил весь ассемблер со стеком флагами и регистрами :)

З.Ы.
Хочу Вас поблагодарить оссобо: подобные статьи читаю как будто курю хорошую сигару - сначала - тяжеловато идёт, но, когда распробовал - с ужасом замечаешь, что она уже почти закончилась, хотя- послевкусье ещё очень долго держится. Жду с нетерпением продолжения.

спасибо )

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT