Как стать автором
Обновить

Почему Нам Нужен UART-Shell? (или Добавьте в Прошивку Гласность)

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров15K
Всего голосов 13: ↑11 и ↓2+15
Комментарии73

Комментарии 73

Большинство перечисленных плюсов относятся и к чему-нибудь типа MODBUS (RTU). Только с ним ещё можно вывести графики, битовые поля и смотреть как себя ведут десятки параметров в реальном времени, что бывает незаменимо при отладке. А если, например, чаще работаешь с частотными преобразователями чем с ядром линукса, то modbus поймут все твои коллеги и все сторонние устройства, а вот CLI не сможет полноценно пользоваться никто из коллег. У modbus, конечно, есть и свои недостатки, так что я свой велосипед предпочитаю.

В общем конкретно CLI — удобный протокол, но мне кажется важнее само наличие общей структуры проектов, соответствующего метода отладки, протокола общения с устройством и набора сопутствующих утилит. И такой есть, наверное, у всех embedded программистов которых я видел. Но у всех разный.

Только с MODBUS (RTU) ещё можно вывести битовые поля что бывает незаменимо при отладке.

Shell тоже позволяет выводить битовые поля.
Вот, например, детализация каждого бита внутренних конфигурационных регистров микросхемы умного Audio DAC, полученная при помощи CLI команды get binary blob

Эх, ну вот опять, декларируется обязательность UART CLI. Мы уже вроде обсуждали это в другом посте, но я повторюсь.

В той же Tesla S, около 200 ECU, и ни в одном из них нет UART, все делается только по CAN и совсем они там от этого не страдают. Model 3 и Supercharger тоже на CAN. UART в Supercharger прикрутил я в CCS версию т. к. нужно было TCP/IP отлаживать.

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

По CAN сильно удобней работать если это много устройств как в автомобиле. Достаточно подключиться в одном месте к шине и можно отлаживать или обновлять прошивку на всех устройствах на этой шине. Ну вот как вы такой трюк с UART провернёте

Вы мешаете теплое с кислым. Как вам поможет CAN для отладки прошивки?

И то что UART не выводится в блоках Tesla совершенно не означает, что его нет блоках и он не использовался для отладке или тестировании блока при производстве. Ведь UART это не внешний интерфейс, каким является шина CAN.

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

все делается только по CAN


В прошивке ECU после коммита сломался CAN. Нет CAN Link(а).
Ваши действия?

Сделаю bisect по изменениям и найду что его сломало.

А вот нет доступа к коду. Есть только Target в руках.
У техника в гараже CAN link пропал c ECU(шкой).
Что технику делать в таком случае?

Стандартный техник из Теслы, проверит провода, передернет пару раз питание. Если бутлоадер живой, проверит версию прошивки, возможно перепрошьет девайс. Если бутлоадер мертвый или перепрошивка не помогла, то он возьмет новый ECU, а этот отдаст инженерам на разбор полетов.

По CAN достаточно подключиться в одном месте к шине и можно отлаживать или обновлять прошивку на всех устройствах на этой шине. Ну вот как вы такой трюк с UART провернёте?

Легко, можно подключится ноде A к ее UART CLI и набрать shell команду проброса данных из UART в CAN (Data Forwarding) и этими командами по UART обновить прошивку на любой ноде подключенной к этой же CAN мети.

Сама нода ECU выступает как переходник UART<->CAN.

Это все можно, но зачем? CAN уже есть, весь софт для апдейта и отладки по CAN уже есть и это даже отраслевой стандарт. Зачем тут ещё и UART с CLI нужен?

переходники USB-UART дешевле чем переходники USB-CAN

>как вы такой трюк с UART провернёте
RS-485

Ах да, точно, забыл про него.

Ладно. Допустим в Automotive привыкли отлаживаться по CAN. Там так административный ресурс приказал.

Но электроника не ограничивается только автомобильными ECU.
Вот Вам, например, домофон в котором вся конфигурация производится по UART-CLI


https://www.youtube.com/watch?v=Fkmt7N6he5U

декларируется обязательность UART CLI.



Тут можно провести аналогию. У каждого микропроцессора есть система команд. Это список Assembler инструкций, которые может исполнять этот микропроцессор.

Аналогично и у электронной платы должна быть тоже своя система команд. То есть список действий которые может выполнять эти плата.

Вот такое простое рассуждение приводит к заключению, что у прошивки должна быть UART-CLI.

В своих проектах я всегда UART первым поднимаю



Еще очень важный момент. Если в прошивке визуально работает UART-CLI, то это автоматически означает, что правильно сконфигурировалось тактирование процессорного ядра и периферии, значит что включен контроллер прерываний NVIC, что работает GPIO и FIFO. Работающий CLI это отличный smoke test.

В своих проектах я всегда UART первым поднимаю

CLI в прошивке нужна для эмуляция прошивки как процесса на PC.

Если у вас в прошивке есть CLI, то вы можете собрать прошивку прямо на NetTop (x86).

Прошивку можно запустить на исполнение как Win консольное приложение в командой строке cmd.


Затем исполняя shell команды в stdin и наблюдая за цветным выводом в stdout вы можете отладить огромные куски кода, которым всё равно на архитектуру. Протестировать реализацию протоколов, математику, алокатор памяти, криптографию, компрессию/декомпрессию, fifo, lifo, циклический буфер, алгоритмы расчета контрольных сумм, шрифты графических экранчиков, триггер Шмитта, распознаватели строчек и многое-многое друге, что не зависит от архитектуры. Без CLI вы бы не смогли отлаживать микроконтроллерный кода на "большом компьютере".

Эх, ну вот опять, декларируется обязательность UART CLI. 


CLI - это дополнительная ценность

Когда у Вас в прошивке есть CLI, любое ваше устройство помимо базового функционала превращается в супер калькулятор. Только вместо кнопок и клавиатуры UART.

Можно прямо в консоли TeraTerm попросить микроконтроллер расшифровать кусок Base64, RLE, AES256,вычислить SHA256, посчитать CRC16, решить задачку на поиск пересечения временных интервалов, определить точное количество дней между 2мя датами, вычислить расстояние между двумя GNSS координатами, найти угол между векторами, вычислить формулу и прочее и прочее.

Все эти программные компоненты как правило и так есть в 70% проектов на MCU

Когда есть CLI прошивка превращается в Swiss Army knife

все делается только по CAN и совсем они там от этого не страдают.

Структура CAN Payload(а) жестко регламентирована отраслевыми стандартами (например протоколы j1939/ CANopen). Поверх CAN просто так не воткнуть произвольный payload. Плюс в один пакет помещается только 8 байт. Работа с CAN требует работать с бинарной структурой пакетов. В этом смысле отладка по CAN связывает руки.

С другой стороны, CLI по UART ничем Вас не ограничивает. Можете посылать открытый текст в любом удобном для данной ситуации способом (например в ascii с поддержкой цветов в консоли). Читать вывод прямо глазами.

но индустрия в целом вполне обходится без него и без CLI.

CLI для экономии денег и времени

Если у Вас в электронной плате нет CLI, а только какой-то проприетарный бинарный протокол, то Вам надо тогда писать ещё утилиту переходник на PC чтобы подключиться к устройству.

А потом еще такую же утилиту для Win, Linux, Mac, Android, iOS, MS-DOS, OS/2, IBM POWER8 и БЭСМ-6.

Не проще ли просто реализовать текстовый UART-CLI протокол c раскраской логов, ASCI таблицами на уровне firmware и подключаться по любому терминалу последовательного порта (Putty/TeraTerm), которые и так есть для всех OS?

CLI избавит Вас от написания калейдоскопа ненужных no-name утилит-переходников под все известные платформы.

Ну сами посчитайте, откуда у СНГ(шной) электронной embedded конторы деньги на зарплату 250к RUR/мес для С#/Java программиста для написания какой-то одноразовой PC утилиты-переходинка?

Как вы по CAN прочитаете email разработчикив или дату сборки прошивки?

А вот cli это прямо в power up логе показывает.

Ну хотя бы по UDS из genealogy блока всю нужную инфу получить можно. Правда email разработчика или дата сборки вряд-ли туда попадает.

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

UART-CLI более свободный гибкий и демократичный протокол оказывается.

Эх, ну вот опять, декларируется обязательность UART CLI

В самолетостроении есть такое понятие как оснастка. Это формы для литься, режущие инструменты, контрольно-измерительные приспособления, стапели и прочее.

Как и в любой другой разработке в разработке программного обеспечения для микроконтроллеров в качестве оснастки выступает интерфейс командной строки поверх UART. UART-Shell.

Без полноценной оснастки говорить о какой бы то ни было разработке как правило не приходится.

В той же Tesla S, около 200 ECU, и ни в одном из них нет UART

Ну и что? На Тесле свет клином не сошелся.

UART-CLI нужна и по той причине, что CLI служит индикатором зависания прошивки.
Суть теста очень проста. Если прошивка зависла, то CLI не печатает в TeraTerm/Putty эхо введенного символа. А если поток исполнения живой, то эхо появляется.

UART-CLI оcобенно выручает на устройствах без LEDов. Что очень часто.

Отказываться от UART-CLI это тоже, что если бы военные говорили:

Да нам авиация вообще не нужна. У нас вот есть артиллерия. Поэтому мы обычно мортирами и долбим по противнику.

Разработка электроники и прошивок - это как боевые действия. И тут нужны все виды вооружения.

все делается только по CAN

У меня сейчас задача запустить CAN на YTM32. Надо отлаживаться, а CAN ещё просто нет!
И тут меня выручила, как раз UART-CLI.
Вот так...
И что Вы на это теперь скажете?

Вот такая типичная ситуация. Есть у вас два набора регистров. На одном наборе устройство работает. На другом наборе регистров устройство не работает. Надо понять в чем дело. Какие именно биты отличаются? Надо узнать, что именно влияет на работу и куда копать. И тут вам снова поможет UART-CLI. У меня есть команда, которая автоматически вычисляет отличающиеся биты в двух 32-битных числах.

Цена JTAG программаторов, кажется, вообще ничем не ограничена. Видел от 7kRUB до 5kEUR.

Вот прям сейчас посмотрел на али -- клон j-linkа стоит около 300 рублей (из дешёвых).

UART-CLI менее подвержен статическому электричеству в сравнении с SWD и JTAG.

Чото вообще не в тему. Если статикой вынести IO-ногу, то ни swd/jtag, ни uart с дохлым пином не заработают.

так как нужно всего 4 провода (Rx Tx GND VDD) вместо 20 проводов JTAG.

Можно обойтись тремя (без питания). В том числе и с SWD.

Можно передавать куски прошивки в формате base64 или просто hex в виде ASCII (получается base16).

А можно ещё Z-modem :)

Потом, пошаговая отладка по SWD имеет свойство очень долго загружаться.
Буквально делаешь в Eclipse команду Terminate and Relaunch и IDE думает, думает , думает и только черед 2 минуты происходит долгожданный reboot.

Это как?

Уж лучше и быстрее через UART-CLI отлаживаться.

 клон j-linkа стоит около 300 рублей

Интерфейсы JTAG/SWD не всегда удается использовать, так как пины для JTAG/SWD уже используются схемотехниками под всякие реле и кнопки.

При этом саму прошивку записывают по UART через заводской загрузчик от производителя MCU.

Вот и получается, что и для отладки прошивки ничего не остаётся кроме UART-CLI.

Использую такую вещь в своих разработках, но с некоторыми отличиями - мк не отправляет обратно каждый введенный символ, а реагирует только на строку с /n. Работа с терминальными программами вроде putty в данном случае невозможна, зато возможен вывод информации в процессе ввода команды.

мк не отправляет обратно каждый введенный символ

TeraTerm можно настроить на локальное эхо.

Вообще CLI на MCU должна поддерживать корректную обработку символа Backspace.
Не всегда получается с первого раза набрать команду без ошибок.

Зачем вообще эхо на стороне устройства делать? Использовать терминал, в котором можно сразу всю строку отправить. Я лично не особо много смысла вижу в пользовательском вводе вообще, логов обычно достаточно.

Я лично не особо много смысла вижу в пользовательском вводе вообще, логов обычно достаточно

За тем же, как клавиатура для nettop-a.

Зачем вообще эхо на стороне устройства делать?

Как зачем, чтобы была гарантия, что прошивка не зависла.

Зачем использовать терминал, в котором можно сразу всю строку отправить. Я лично не особо много смысла вижу в пользовательском вводе вообще, логов обычно достаточно.

Для микроскопических МК с ROM 2 kбайт типа 1886ве7 это может и оправдано.

Но представьте прошивку 320 kByte, которая собрана из 80-ти программных компонентов.

Если каждый программный компонент будет лить в UART логи, то вы банально не успеете ничего прочитать и понять.
У вас на экране будет Ниаганский водопад из белых логов.

При этом всякая печать в UART ещё и занимает системную шину, DMA каналы, дергает ядро своими прерываниями и бизнес логика на микроконтроллере поэтому исполняется медленнее.

Проблема полностью решается, когда у вас есть возможность отправить строку в пошивку. То есть присутствует полудуплексная CLI.
Вы можете включать и откл. логи для каждого конкретного программного компонента.

Более того, с CLI вы можете для каждого отдельного программного компонента в прошивке включать и отключать уровни логирования: INFO, NOTICE, WARNING, DEBUG, PARANIOD в зависимости от глубины которую вы готовы анализировать .

Когда есть UART-CLI, то вам даже не нужна JTAG/SWD отладка. Причину любого бага (кроме полного зависания) можно понять просто играясь с уровнями логирования и смотря диагностику через UART-CLI.

Вот так, просто и не затейливо.

CLI это вообще универсальный протокол.
CLI — это вообще-то Command Line Interface, а не протокол.

В недостатки я бы добавил пару пунктов:
CLI не нарушает timing(и) время исполнения программ протекает в естественном режиме.
CLI нежелательно использовать для вывода значений переменных и прочей информации в runtime, поскольку на подпрограмму обработки UART тоже требуется время.
На форуме Electronix видел реальные случаи влияния на работу прошивки с UART-отладкой и без неё.

CLI и подпрограмма обработки занимает место, как в постоянной, так и в оперативной памяти МК.
В противоположность этому интерфейс JTAG/SWD реализован на уровне ядра МК и не требует дополнительного софта на нём.

Не против CLI, но поддерживаю комментаторов выше:
   — вместо 20-pin разъема давно уже изобрели разъём c гораздо меньшим числом выводов
   — вместо дорогого JTAG/SWD отладчика можно обойтись более дешевым

CLI — это вообще-то Command Line Interface, а не протокол.

CLI просто название неудачное. Всем же понятно, что CLI работает на прикладном уровне модели OSI так как взаимодействует непосредственно с человеком.

А Interface это как раз физический уровень модели OSI.
Когда говорят про интерфейсы, то подразумевают такие понятия как SPI, I2C, UART, CAN, LIN ,1-Wire, 100BASE-TX, I2S, JTAG , MDIO , RMII ,RS485 ,SDIO , USB.

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

Не вводите читателей в заблуждение неверной трактовкой аббревиатуры.
Ещё раз, термин CLI всегда означал и продолжает означать окно терминала, т. е. интерфейс командной строки (Command Line Interface), а не протокол. Вы сами об этом пишете в первом же предложении статьи:
Есть такая классическая технология отладки Firmware как интерфейс командной строки поверх UART

Поэтому утверждение о том, что CLI является протоколом — технически некорректно. Я бы даже сказал, безграмотно.

Примеры протоколов: TCP/IP, HTTP.
Примеры интерфейсов: API, UI, CLI.
Так что CLI — это интерфейс. Потому что I = Interface, а P = Protocol.

И ещё, не забудьте поставить тире перед «это»: CLI это вообще универсальный протокол интерфейс.

CLI и подпрограмма обработки занимает место, как в постоянной, так и в оперативной памяти
МК.В противоположность этому интерфейс JTAG/SWD реализован на уровне ядра МК и не требует дополнительного софта на нём.

Прошивку далеко не всегда удается пошагово отлаживать по SWD или JTAG банально из-за нехватки on-chip NOR-Flash памяти для сборки *.bin(аря) с отладочными символами (опции компилятора -g3 -ggdb -gdwarf-2).

Поэтому в таких случаях выручает только отладка при помощи UART-CLI.
Да, господа, вот так...

Объектник с отладочными символами остается на хосте, и оттуда же они грузятся отладчиком. Во флеш память МК пишутся секции кода и констант.

Посмотрите сами размер бинаря с и без отладочных символов. Увидите разницу в размере загружаемого bin файла.

Если у Вас в бинарнике отладочные символы, это всего лишь означает, что Вы не контролируете, что попадает в бинарник.

Скрытый текст
> cat tst.c
#include <stdio.h>

const char* const world = "world";

void main(void) {
  printf("Hello, %s!\n", world);
}
> arm-none-eabi-gcc tst.c --specs=nosys.specs -g0 -o a.elf
> arm-none-eabi-gcc tst.c --specs=nosys.specs -g3 -ggdb -gdwarf-2 -o b.elf
> arm-none-eabi-strip a.elf -o a.strip.elf
> arm-none-eabi-strip b.elf -o b.strip.elf

> ls -l
total 1808
-rwxr-xr-x 1 x x 483460 Feb 18 15:34 a.elf
-rwxr-xr-x 1 x x  80368 Feb 18 15:34 a.strip.elf
-rwxr-xr-x 1 x x 520624 Feb 18 15:34 b.elf
-rwxr-xr-x 1 x x  80368 Feb 18 15:34 b.strip.elf
-rw-r--r-- 1 x x    109 Feb 18 15:33 tst.c

> sha256sum a.strip.elf b.strip.elf
80b51faf47152f16727577d06ed8c460ce7b5720e948647a6ea916ad54a65202  a.strip.elf
80b51faf47152f16727577d06ed8c460ce7b5720e948647a6ea916ad54a65202  b.strip.elf

CLI не просто требует памяти, а еще и не везде влезет. Это занимает место в буферах и ROM. И вносит задержки.

Выглядит прикольно, но. Зачастую вместо него можно логи на одну TX ножку в debug сборке тащить, а RX не инициализировать. И настроить логгер который можно переключать при компиляции дефайнами: включать-выключать для модуля или уровень подробности менять.

Далее два подхода к тестам:

1) Модульные тесты, которые на железе пускаются с включенными логами и проверяются куски кода по сценариям. Тут можно наловить урожай достаточный чтобы дальше вручную не проверять много всего.

2) Интеграционные - собирать стенд, который умеет продёргивать ножки или по сети команды бросать и собирать логи. Цеплять такое можно к CI/CD (никто из команды не уронит код на мастере). Если макетировать на отладках, там уже часто есть board controller к которому в тестах можно цепляться по тому же CLI и ножки переключать. Сами тесты на каком-нибудь питоне можно писать наподключив кучу библиотек, которые умеют все что надо делать. И сами производители чипов для сетевых протоколов специфичных не редко дают библиотеки на питоне.

Второй подход дороже по времени, но позволяет тестировать и Debug и Release. При тестах дебаг сборки можно бонусом получить логи с железки в тест репорте и быстро продиагностировать.

Звучит как будто на тесты уйдет прилично времени. И да и нет. CLI написать тоже время - и каждый раз поддерживать, лечить при обновках. Тест написать один раз - и он будет автоматически проверяться каждый запуск. Не надо ничего каждый раз отлаживать вручную.

CLI только один раз понадобился в жизни чтобы сделать "нано утилиту" на один вечер.

Выглядит прикольно, но. Зачастую вместо него можно логи на одну TX ножку в debug сборке тащить, а RX не инициализировать. И настроить логгер который можно переключать при компиляции дефайнами: включать-выключать для модуля или уровень подробности менять.

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

А вот когда есть CLI, то прошивка не флудит, а только коротко отвечает, когда ее спрашиваешь по UART что-н.

Если прочитать мой комментарий и описанный подход, то "процессор не будет тормозить". В релизе ни cli ни логи не нужны. Только на этапе тестирования (и то не acceptance) и диагностики. А на счёт Ниагарского водопада - логировать надо то, что действительно нужно, а не каждый вызов функции и что попало.

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

Если есть модульные и интеграционные тесты, CI/CD то CLI бесполезен.

Если есть модульные и интеграционные тесты, CI/CD то CLI бесполезен.

Модульные тесты как раз и вызываются через CLI как бы...

Или у Вас микроконтроллер от вибраций QFN корпуса распознает русскую речь?

Зачем CLI чтобы вызывать модульные тесты? О_о. Зашил и они сами запустились. Потом список прошедших и заваленных в логи капнут. Так можно в тест раннерее даже спокойно крутить написав мини bash скрипт который шьет все тесты в одном бинаре, вызывает ребут, забирает логи и руинит пайп если тесты не пройдены (простым grep-ом искать "All tests passed")

Когда есть CLI у Вас есть выбор. Либо запустить Debug(жную) сборку прошивки в штатном режиме и пользоваться ей. И она в этом случае отличается от релиза только бОльшим bin файлом.

Либо тут же прямо на Target устройстве прогнать конкретные модульные тесты (по имени или по номеру).
Либо прогнать все тесты сразу (30мин длиться).
Либо прогнать все тесты кроме конкретных .
и т. п.
Очень удобно, когда можно вызывать тесты из UART-CLI.

Ограниченная применимость CLI. Это, конечно, супер, что в конкретном проекте с мягкими условиями получилось использовать. Но:

1) Я всегда могу подключить программатор и одним тыком залить тесты и увидеть результаты прогона в логах. Даже могу по целям разным разложить и лить и запускать то одни, то все.

2) Не везде есть столько памяти чтобы и тесты и прошивку (масс прод всегда экономит деньги)

3) Всегда лучше когда тесты никто не запускает руками, а они сами запускаются на стенде когда коммит попадает в репозиторий (да, для этого кли не нужно, все автоматически через CI/CD делается).

Я Вам про автоматизацию и нормальные процессы, Вы мне про то как удобно подключить провода, прошить, открыть консоль и писать команду запуска)

CLI не просто требует памяти, а еще и не везде влезет. Это занимает место в буферах и ROM. И вносит задержки.

А как же тогда разработчики Электроника MK 85 смогли в далёком 1986 года в микроконтроллер с 16kByte ROM встроить аж интерпретатор целого языка программирования Basic?

CLI не просто требует памяти, а еще и не везде влезет. Это занимает место в буферах и ROM. И вносит задержки.

То же самое можно сказать и про пошаговую отладку.

Прошивку далеко не всегда удается отлаживать по SWD или JTAG банально из-за нехватки on-chip NOR-Flash памяти для сборки *.bin(аря) с отладочными символами (опции компилятора -g3 -ggdb -gdwarf-2). Поэтому в таких случаях выручает только отладка при помощи UART-CLI. Да, господа, вот так...

Хотел бы особо отметить UART-CLI команду repeat.

Эта команда rpt повторяет конкретную команду, имя которой указано в аргументе N раз с периодом P.

Команда repeat просто незаменима при отладке софта и железа. Её можно сравнить с 3ей рукой в нужный момент.
Как же хорошо, что люди придумали CLI.

В Израиле есть компания TechPack Lab, которая оказывает контрактные услуги по написанию firmware софтвера.

И одной из её услуг является запуск полноценного интерфейса командной строки внутри прошивок.

Смотрите, что получается.
Я пришел к выводу удобства CLI и при этом совершенно другие люди в другом государстве за несколько тысяч километров и через 2 моря (размером с несколько стран) независимо от меня тоже так решили. Значил CLI это действительно нужная вещь.

А те люди которые говорят, что CLI якобы не нужна они просто банально не понимают про что идет речь они CLI никогда не видели (это GUI поколение) и они просто не в теме.

Я пришел к выводу удобства CLI и при этом совершенно другие люди в другом государстве за несколько тысяч километров и через 2 моря (размером с несколько стран) независимо от меня тоже так решили. Значил CLI это действительно нужная вещь.

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

Дифференциальное исчисление параллельно и независимо друг от друга открыли и разработали Исаак Ньютон (Англия) и Готфрид Лейбниц (Германия).

Значит дифференциальное исчисление нужная вещь.

Значит

вообще не значит. из параллельности и независимости никак не следует нужность или правильность.


дети в школах параллельно и независимо делают одни и те же ошибки (условно говоря, 2*2=5), теперь тоже объявим их очень нужными?

 параллельности и независимости никак не следует нужность или правильность.

Реактивные авиационные двигатели независимо друг от друга примерно одновременно придумали немцы (Junkers Jumo 004 ) и англичане (Rolls-Royce Nene-1 ).

Значит реактивный двигатель - это не какая-н выдумка непризнанного гения, а полезная, правильная и нужна вещь.

вообще не значит. из параллельности и независимости никак не следует нужность или правильность.

Уважаемый, вы почитайте историю
ОДНОВРЕМЕННЫЕ ОДИНАКОВЫЕ ОТКРЫТИЯ и ИЗОБРЕТЕНИЯ.
https://yael-shoshany.livejournal.com/584586.html

это очень частое явление

Вот самая понятная подборка

--Логарифмы - Джон Напьер ( Шотландия , 1614 г.) и Йост Бюрджи (Швейцария, 1618 г.).
-- Исчисление - Исаак Ньютон , Готфрид Вильгельм Лейбниц , Пьер де Ферма и другие.
-- Метод Ньютона – Рафсона - Джозеф Рафсон (1690), Исаак Ньютон (работа Ньютона была написана в 1671 году, но не опубликована до 1736 года).
Электромагнитная индукция была открыта Майклом Фарадеем в Англии в 1831 году и независимо примерно в то же время Джозефом Генри в США.
-- Теория эволюции путем естественного отбора - Чарльз Дарвин (открытие около 1840 г.), Альфред Рассел Уоллес (открытие около 1857–1858 гг.) - совместная публикация, 1859 г.
-- 1869: Дмитрий Иванович Менделеев опубликовал свою периодическую таблицу химических элементов, а в следующем году (1870) Юлий Лотар Мейер опубликовал свою независимо построенную версию.

https://ru.abcdef.wiki/wiki/List_of_multiple_discoveries

Когда приходит время для определенных вещей, они появляются в разных местах, как фиалки, появляющиеся ранней весной

UART-CLI используют другие

UART-CLI давно успешно используют в США, Европе, Израиле и Китае.
Поэтому и нам в России тоже надо уметь работать с UART-CLI.

К сожалению Россия всегда догоняет Запад в технологическом плане.

Именно на Западе первыми стали строить реактивные авиа двигатели, радары, ракеты, атомное оружие, вертолёты, атомные подводные лодки, водородные бомбы, цифровые компьютеры, персональные автомобили, космические челноки, карманные калькуляторы, самолёты, фотоаппараты.

Перечислять можно очень долго. А смысл в том, что традиции нарушать как-то не принято.

Если вы знаете еще известные коммерческие встраиваемые системы с интерфейсом командной строки в serial порте (например маршрутизаторы Cisco), то пишете в комментариях.

Программируемые мини АТС, телефонные модемы (AT-команды), некоторые жёсткие диски (serial разъём рядом с SATA). Много чего, сразу не вспомнить.

Интересно. Есть скриншоты?

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

Конденсаторный калькулятор
Конденсаторный калькулятор

Когда есть CLI прошивка превращается в Swiss Army Knife.

>восхищаюсь разработчиками советского калькулятора Электроника MK 85. Они смогли в далёком 1986 года в микроконтроллер с 16kByte ROM встроить интерпретатор целого языка программирования Basic

Это они конечно очень молодцы. Респект. Почти как интел, сделавшая тоже самое на 8 килобайтах в 1986 году.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории