Комментарии 6
С определённого момента начинается магия, которую очень трудно понять.
В этом плане GCC намного проще — там каждый этап работы с кодом выглядит как полностью автономная процедура. Которую можно полностью переписать заново — без слома общего алгоритма.
Уточните пожалуйста, с какого момента возникли трудности. Если где-то недостаточно объяснений, я посмотрю, как более подробно описать то, что вызывает сложности в восприятии. Библиотека тоже может использовать процедуры, но объем статьи не позволяет затронуть все аспекты сразу. В следующей статье я как раз и планировал описать в том числе использование подпрограмм и процедур
Да, такой момент есть — это разбор синтетики исходного текста. По сути GCC — это текстовый редактор, который многократно изменяет и переписывает исходный текст программы. Просто для ускорения сам процесс парсинга остаётся за кадром, где-то глубоко в памяти большого компа. Причём это так сказать непрерывный процесс, на всех уровнях компиляции.
Второе чего я не увидел явно — так это разбор исходного кода на примитивы. У вас получается сразу Си->бинарный код. То-есть места для оптимизации просто нет. Это немного иначе делается, и для этого есть хороший пример habr.com/ru/post/274083
К сожалению, Вы сделали абсолютно неправильный вывод из неверных предпосылок. Библиотека не является компилятором в том представлении, которое Вы в это вкладываете. И она действительно сделана совсем иначе. То, что я представляю, это подключаемая к консольному приложению C# библиотека. И исходная программа для AVR это не текст, который эта библиотека парсит, а программа на C#, со всеми возможностями IDE и языка C#, содержащая за счет использования библиотеки возможность в процессе своего выполнения формировать ассемблерный код. С точки зрения программиста, он пишет на самом обычном C# (ни к языку C, ни даже к C++ этот синтаксис не имеет никакого отношения) консольную программу, результатом работы которой является текст ассемблера. Что касается оптимизации — библиотека как раз и писалась исключительно в целях дать возможность максимальной оптимизации и 100% контроля над кодом. И именно из этих соображений результатом работы является не бинарный код, а аннотированный ассемблер. Более подробную информацию какой код генерит библиотека можно найти в предыдущих частях статьи. В дальнейшем я возможно напишу отдельную статью о принципах, на которых она работает.
Планируете расширять список поддерживаемых микроконтроллеров? Например, добавить популярный нынче для умных домов ESP8266.
Да, возможно. Сам принцип построения библиотеки это позволяет. К сожалению, для ESP пока недостаточно документации. Из этих соображений, более перспективной выглядит серия процессоров STM
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.