Ну и такие гадкие вещи как overhead. Программа на Си требует значительно
больше оперативной памяти, значительно больше места во flash памяти,
работает куда медленней, чем ассемблерная программа. И если на обычном
компьютере с его гигагерцами частот, гигабайтами оперативки и дисковой
памяти это не столь критично, то вот для контроллера с жалкими
килобайтами флеша, у которого частота порой не превышает 16 мегагерц, а
оперативки и килобайта не наберется, такой расход ресурсов более чем
критичен.
Кроме того существуют такие контроллеры как ATTiny 1x у которых либо
вообще нет оперативки, либо она такая мизерная, что даже стек там сделан
аппаратным. Так что на Си там ничего написать в принципе нельзя.
Assembler+
Представь, что ты прораб, а компилятор это банда джамшутов. И вот надо
проделать дырку в стене. Даёшь ты джамшутам отвертку и говоришь —
ковыряйте. Проковыряют они отверткой бетонную стену? Конечно
проковыряют, вопрос лишь времени и прочности отвёртки. Отвёртка
сточится (читай памяти процессора или быстродействия не хватит)? Не беда
— дадим джамшутам отвёртку побольше, благо разница в цене между
большой отверткой и маленькой копеечная. В самом деле, зачем прорабу,
руководителю, знать такие низкоуровневые тонкости, как прочность и
толщина бетонной стены, типы инструмента. Главное дать задание и
проконтроллировать выполнение, а джамшуты все сделают сами.
Задача решается? Да! Эффективно это решение? Совершенно нет! А почему?
А потому что прораб не знал, что бетон твердый и отверткой его
проковырять сложно. А будь прораб сам когда- то рабочим, пусть даже не
профи, но своими руками положил плитку, посверлил дырки, то впредь таких
идиотских заданий не давал. Конечно, нашего прораба можно и в шараге
выучить, дав ему всю теорию строения стен, инструмента, материалов. Но ты
представь, сколько это сухой теории придется перелопатить, чтобы чутье