Ответочка

Nov 17, 2020 13:23

- А как ваш прибор так быстро определяет наличие вируса и со стопроцентной точностью?
- Да очень просто. Прибор сам вводит вирус и сразу показывает положительный результат.
- Но это же нечестно.
- Это прибыльно!При проектировании техники не забывайте об экономике!
Тут мой френд dibr
разоряется
на тему того, что кусок провода с двумя коннекторами может стоить дороже микросхемы. У меня тоже есть что рассказать по этому поводу.

Как всем известно, лучшим средством для внесения багов в программу является программист. Лучшим средством для удаления багов из программы является дебаггер. С дебаггерами всё хорошо и прекрасно до тех пор, пока разработка из области прикладного программирования не переходит в область системного программирования в режиме реального времени (Realtime/Embedded). Дебаггер по сути своей хрень, которая позволяет просматривать память и код прямо во время работы, отображение результата на экране занимает время; поэтому использовать дебаггер для отлаживания программы, предназначенной для работы в режиме реального времени, нельзя, - вызов дебаггера выводит программу из реального времени. Это какой-нибудь Word можно завесить во время выполнения на час, в ожидании, пока программист попьёт кофе, неспешно просмотрит стек вызовов, разберётся в выделенной памяти и найдёт несостыковку; от того, что Word будет час висеть без движения, ничего не изменится. А в случае, когда вся остальная аппаратура вокруг микроконтроллера ожидает отклика на свои действия в течение 100 микросекунд, любой чих дебаггера мгновенно выводит всю систему из синхронизации, срабатывает автоматическая защита, и всё обесточивается.

Long story short, в случае встраиваемых систем, работающих в режиме реального времени, дебаггер бесполезен. Там можно или работать, и тогда баг проявляется, или дебаггером смотреть, но тогда система не работает, и баг не проявится, потому что чтобы он проявился, система должна выйти на рабочий режим.
Те, кто писал на JavaScript для веба, почти наверняка использовали alert для того, чтобы убедиться, что написанная ими функция выполняется хотя бы до той строчки, на которой стоит этот alert. По сути, это то же самое, что светодиод включить.
Поэтому дебаггинг в системах реального времени обычно сводится к тому, чтобы светодиодом поморгать или на какую-нибудь неиспользованную ногу микроконтроллера напряжение подать (что, по сути, одно и то же: если к этой ноге светодиод подключить, он загорится). Вспышку короче десятков миллисекунд глаз не увидит, поэтому к рабочему месту приносится большой и тяжёлый осциллограф, программист цепляет заземление осциллографа на дигитальную землю, а щупом лезет внутрь дебагируемого устройства и пытается присобачить его к нужной ноге микроконтроллера, попутно закорачивая, сгибая и отламывая другие ноги. Затем на всё это счастье подаётся питание. Если разработчику повезло, и сделанные им в процессе шурования щупом короткие замыкания не спалили нафиг микроконтроллер, то система выводится в рабочий режим, и программист пытается воссоздать последовательность действий, при которой проявляется баг, смотря при этом на экран осциллографа. Обычно в результате выясняется, что щуп осциллографа отвалился, или был прицеплен не к той ноге, или заземление соскочило, поэтому осциллограф показывает всякую чушь. Тогда программист, матерясь, лезет обратно внутрь устройства, попутно вслух красочно характеризуя разработчиков механики, которые не предусмотрели лёгкий доступ к микроконтроллеру.

На то, чтобы выполнить только одну проверку, легко может уйти полдня.

Я ещё раз подчеркну: это единственный способ дебажить систему Realtime/Embedded. Других просто нет. Весь дебаггинг сводится к тому, чтобы моргать. Или светодиодом, или тупить в код и моргать глазами. Поэтому программисты RT/Embedded такие деньжищи и зашибают: потому что они умеют находить проблемы в коде без дебаггера, при помощи лишь моргания, логики и светодиода.

Но иногда дебаггер всё-таки нужен, потому что приходится искать проблемы в коде, который выполняется до того, как система вышла на рабочий режим. Например, в коде загрузчика. Сложно моргать светодиодами, присобаченными к ногам процессора, если ошибка закралась в процедуру инициализации ног процессора.
Пример из жизни:
Иллюстрация:
маскот
Linux для этих процессоров.На тестовом стенде многоядерный микроконтроллер фирмы Texas Instruments. Микроконтроллером он называется исключительно из уважения, на самом деле это полноценный процессор: в нём восемь 64-битных ядер, работающих на частоте 1.4 ГГц каждое, 4 гигабайта встроенной кэш-памяти, контроллер для внешней памяти DDR-3, контроллер PCI-e, позволяющий подключить видеокарту, встроенная пятигигабитная сетевуха и куча других примочек. На нём можно было бы десятую Винду запустить, если бы кто-нибудь портировал Винду на процессоры TI. На нём Linux запускается. Так вот, этот монстр отказывается работать; при включении видно, что мощность потребляется, но больше никаких внешних проявлений работы процессора нет, светодиоды не моргают. Под подозрение попал загрузчик. Загрузчик выполняется строго на нулевом ядре. Ну и оказалось, что управление ногами, к которым цеплялся светодиод, случайно передаётся другому ядру до того, как нулевое ядро успело сконфигурировать ноги как general purpose input-output, то есть до того, как ими стало можно моргать. Управление ногами уже передано, поэтому последующая команда конфигурации не проходила. Вот это дебаггером вполне можно было бы отследить.
Итак, дебаггер для процессоров TI - в моём случае это устройство Blackhawk USB560 v2. К компьютеру этот монстр подключается при помощи USB. На материнской плате TI есть разъём для подключения дебаггера. Но вот беда! - Разъёмы на плате и на хвосте устройства имеют совершенно разную конфигурацию. Однако ребята из конторы BlackHawk мудро предусмотрели эту ситуацию и с удовольствием продадут переходничок за смешную сумму в 100 баксов.

А теперь внимание. Из 60 контактов по факту используются 10. Соединены разъёмы между собой, согласно схеме, без изысков. То есть ничего сверхъестественного в этом переходнике нет, просто два разъёма стоимостью 80 центов каждый, некоторые контакты которых соединены между собой. Я его сам себе спаял минут за двадцать, соединив нужные контакты десятью сантиметровыми отрезками провода, и он работает.

Стоимость конечного продукта, напомню, сто баксов.

Наркобароны с их жалким доходом в 600% в шоке от такой наглости аплодируют стоя.

sad, #блогерскаяосень, дизайн, работа

Previous post Next post
Up