Assembler и C в рамках маломощных микроконтроллеров
У меня есть свой крупный проект по автоматизации, который можно применить для умного дома.
И есть линейка своих собственных исполнительных устройств, модулей, датчиков и т.п. реализованных на AVR(в основном это ATmega168).
При этом данная линейка - это хобби, ее я реализую для себя и вкладываю туда функционал нужный мне, и пишу соответственно на том, что нравится мне. А не Вам, и не ради моды.
Меня часто спрашивают, почему я пишу прошивки для AVR микроконтроллеров на ассемблере.
Часто слышу стереотипы - ассемблер никому не нужен, очень сложный, нет переносимости, большие трудозатраты. И даже такие, как - на нем никто не пишет и Вы не должны, в общем я кому-то, получается, что-то должен.
Первое и пожалуй главное - ничто не научит работать с периферией лучше, чем кодинг на ассемблере.
Я применяю МК по прямому назначению - работа с периферией, если мне потребуется рисовать UI или считать математику я буду смотреть в сторону SoC или вообще в сторону микрокомпьютеров типа всяческих PI, где буду использовать более подходящий высокоуровневый язык чем Си.
Кстати по этой причине мне не особо интересны STM микроконтроллеры.
Второе - ассемблер не сложный, он имеет всего несколько десятков команд, это сложно запомнить? Главная сложность в том, что на ассемблере программист многие алгоритмы составляет сам, чем и добивается существенной оптимизации. Т.е нужно уметь думать головой. И дело не в том, что компилятор что-то может или не может, дело в принципе в подходе к самому программированию. В Си вы не задумываясь воспользуетесь тяжелой функцией, вместо пары тройки команд на ассемблере.
Более того, у вас буквально ассемблер с несколькими десятками команд, чистая периферия МК и все, ничего лишнего. Вам не нужно знать третье звено - как работает компилятор! А в Си Вам придется с ним разбираться, если конечно вы не пишете студенческую работу и ограничены в ресурсах МК.
Третье, как вообще можно отлаживать даже программу на Си для МК, не зная ассемблера? Как можно написать оптимальный бутлоадер не зная ассемблера? Как посчитать такты в критических по времени местах? Как на 512 байт ОЗУ контролировать ресурсы(тот-же stack) в крупном проекте? Да никак, поэтому вы все на Си и на STM где больше ресурсов. Потому что тупо не можете. А я вот например могу на Cortex асме писать код для STM и периферию я их гораздо лучше понял взявшись за асм после Си.
Четвертое - трудозатратно. Не особо, возможно на багфиксинг утечек памяти на Си вы потратите не намного меньше времени, чем я на реализацию на асме. Здесь ключевое - наработки - сообщество Си наработало огромный пласт кода, и вы не задумываясь его используете считая свой код основными трудозатратами. При этом говоря про асм все почему-то думают о пустом листе, на котором все, все, все нужно писать с нуля. С чего бы? Переносимость? Об этом ниже. На асм можно точно также наработать(и это было ранее) все теже функции, что и вы используете в Си. Но нет, популяризация Си свела на нет наработки на асм.
Пятое - переносимость кода, да это главный минус в асм. Однако умение строить алгоритмы существенно снижает трудозатраты. Так же как и разделение кода на уровни. Я лично наработал операционку с кучей функций, я не пишу математику и другие процедуры с нуля, я их просто подключаю и вызываю также как это делаете вы в Си. Более того, мой код(особенно код верхнего уровня) без проблем переносится между МК семейства AVR. И потом, как вы вообще представляете перенос сложной программы на Си с AVR скажем на STM, да никак. Где ваша хваленая переносимость Си?
Если мне нужно что-то по быстрому накидать для периферии - я возьму микрокомпьютер и за минуты накидаю на Java то, на что вы потратите в несколкьо раз больше времени на Си.
Если мне нужна сложная логика - я не буду это делать на микроконтроллере, я возьму что-то типа SoC или опять же микрокопьютер.
Если мне нужна примитивная логика для работы с периферией да еще и с минимальными затратами, я возьму МК и накидаю быстро вызовы уже реализованных процедур на асме.
Я не вижу по большей части где и для чего использовать Си. Это просто мода.
Даже используя ESP я предпочту микро питон, а не все эти глючные библиотеки HAL написанные на си, хотя наверное вы привыкли и не замечаете какой откровенно плохой код вы используете.
А если мне нужно будет говнокодить, с целью быстренько что-то где-то копипастить и выдать за свое решение, срубить бабла по бытрому, тогда да, я возьму STM и буду писать на Си. Но мне такая работа не интересна.
Не только видеокарты. Дефицит STM32
Тружусь в оптовых поставках электронных компонентов.
В одном из разговоров оказалось, что люди, далёкие от рынка компонентов не знают текущей ситуации. Даже если от их решений зависит, будет ли компания использовать в своей продукции дефицитный компонент.
Кратко. В конце прошлого года почти все мои постоянные клиенты, которые в производстве используют контроллеры STM32 сделали плановые закупки на год вперёд.
Это объяснялось достаточно просто. У нескольких производителей случился "allocation". На практике так называется банальный дефицит. То есть за контроллерами выстроилась очередь. Обыватель, незнакомый с рынком компонентов, может провести аналогию с видеокартами сейчас. И так не дешёвый товар вдруг стал стоить в два раза выше. А люди, успевшие взять RTX3080 по 90к кажутся счастливчиками. Так же завидуют тем, разместившим крупные заказы до повышения цен.
Что же случилось? Да, причиной как обычно называется ковид. Сроки отгрузки изменились у многих производителей, среди них INFIN, NXP, Microchip, Renesas, ST.
Так же в прошлом году микросхемы ST закупили гиганты мирового рынка для новой модели наушников - в AirPods Max используется 2шт STM32L496. И первые звоночки пришли уже тогда. Официальных новостей ещё не было, но начались слухи, которые и позволяют быть готовым к событию.
Плюс ко всему этому следует добавить общий рост спроса на продукцию ST в России на фоне санкционных ограничений США и отслеживания движения товара многих брендов вплоть до конечного изделия. Благодаря этому многие клиенты перешли с американских брендов с жёстким контролем на ST, которые в РФ лояльно относятся к свободному рынку.
На фоне начинающегося дефицита рынок быстро наполнился подделками и восстановленными контроллерами. Перемаркированные корпуса, старые МК в новом корпусе, просто б/у. Этого всего стало просто море. В основном из Азии. так же появились "типа аналоги", например GigaDevice GD32F* Хотя устройство этих аналогов немного отличается. Например на фото вскрытая GD32F103CBT6 - поверх основной микросхемы видна отдельная флеш-память. Это не хорошо и не плохо. Просто факт, который конечный клиент должен знать заранее.
Что в итоге? В итоге у нас на рынке есть контроллеры с ценами в 10 раз выше прошлогодних.
Есть исключения: склады, у которых значительные запасы - повышают цены не на всё. Можно уравать что-то по старым ценам. Но это скорее исключение. По каким-то наименованиям, в основном с расширенным температурным диапазоном, появились огромные сроки и ограничения по минимальным партиям. При аналогично возросших ценах.
На почте десятки писем каждый день от хреновых снабженцев со всей необъятной. Суть которых "куплю STM32F*** 1000шт не дороже 300р/шт". Ну-ну. Удачи. Тут по 1100р/шт с руками и ногами разбирают твой МК, ещё и в очереди не прочь постоять.
Будьте профессионалом.
Будьте в курсе новостей в своей нише.
Желательно до того, как они массово отразятся на ценах.
Некоторые источники:
https://www.electronicsweekly.com/news/business/unions-call-...
https://www.electronicsweekly.com/news/business/cad-union-ca...
http://tk-gm.com/Newsletter/EBV/2020_Commercial/11/Commercia...
https://www.eevblog.com/forum/microcontrollers/cheap-bluepil...
Arduino или STM?
Авторское описание:
"Мои мысли по поводу развития микропроцессорной техники. Будущее, настоящее, прошлое. Что круче ардуино или стм? Пишите в комментарии, что вы думаете о ситуации с миром микроконтроллеров."
За видео благодарим канал RadioNews:
https://www.youtube.com/channel/UCpDN_JJKUKUjs0e88kFC3Ig





