#3 компилятор и его кишки

Август 17, 2008

Что такое компилятор и зачем он нужен? Из чего состоит и как работает?

Компилятор - это набор функциональных блоков. Блоки эти состоят из разных мелких програм и модулей. (для гцц)
Другие компиляторы могут быть всего одним файлом, однако принцип работы у них один и тот же.

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

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

Если ошибок  в коде нет, то происходит компиляция и появляются файлы с расширением .o - модули проекта, если проект состоит из нескольких .c файлов.
Это как бы кеш. Например в проекте 3 файла:
main.c
lcd.c
uart.c

Последние два - готовые и отлаженные файлы, а в первом мы пишем свой кривой код и постоянно его меняем.
Чтобы каждый раз не собирать файлы, которые не были изменены, компилятор создает кеш из модулей. Таким образом экономим время.

Потом линкер подключает стандартные библиотеки и линкует все модули.
После этого компилятор преобразует сишный код в ассемблерный. Есть флаги оптимизации по размеру или по скорости.
Изменяя их компилятор будет генерить разный асм код. Можно указать компилятору генерить файлы .S с асм кодом.
А вот потом из асм кода делается готовая прошивка в виде файла .hex .

Еще компилятор может генерить файлы с отладочной информацией разного формата - .coff, .elf
В них лежит сам асм код, а так же код на си. Эти файлы надо загружать в симуляторы. Конечно же симуляторы понимают и готовый бинарный код, но тогда шагать по программе будет нельзя.

Компилятор довольно сложная штука и требует много параметров, которые неудобно вбивать руками.
По идее можно компилировать файлы так: gcc man.c -o main
Однако для мк компиляторы это не пройдет.
Поэтому придумали механизм "конфигурации" компилятора или файл проекта, где указано какие файлы, как собирать, какие библиотеки подключать и еще много чего.
Это makefile.

Для его генерации в комплекте вин авр идет утилита, но мы ей не будем пользоваться.
Для этого мы возьмем http://www.avrfreaks.net/index.php?module=FreaksFiles&func=viewFile&id=1432&showinfo=1

У вас уже должен быть утановлен винавр. После запуска этой иде надо указать папку с винавр и проиндексировать библиотеки.
Среда довольно простая и все будет понятно с первого взгляда.

категория: учим мк avr

Comments (2)

 

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

ответить

Авторизация только через loginza.

Yandex Google Вконтакте Mail.ru Twitter Loginza MyOpenID OpenID