Выбрать главу

Рис. 3.3. Последовательность работы программ в процессе генерации файла исполняемого кода прикладной программы

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

Полученный после обработки программой компилятора файл прикладной программы далее обрабатывается программой Ассемблер. Эта программа преобразует файл программы в файл объектного кода с расширением «o» (см. рис. 3.3).

В соответствие с методом системного проектирования, разрабатываемая прикладная программа должна состоять из нескольких файлов, каждый из которых содержит отдельный модуль программы. Часть этих модулей может быть разработана и отлажена в составе другого проекта, и поэтому не требует повторной компиляции. В этом случае для создания конечного варианта разрабатываемой программы необходимо объединить в один файл ранее полученные объектные файлы модулей и вновь разработанные, прошедшие обработку компилятором и Ассемблером файлы. Для объединения нескольких объектных модулей в один файл исполняемого кода используется программа линковщика. Линковщик генерирует три типа файлов с расширениями «s19», «map» и «lst». Файл карты памяти «xxx.map» содержит в себе информацию о расположении кодов прикладной программы в адресном пространстве МК. Файл листинга «xxx.lst» отражает процесс перевода мнемоник команд ассемблера в машинные коды. Файл в формате «s19» именуют файлом исполняемого кода или загрузочным модулем, поскольку именно этот файл заносится в постоянную память МК и исполняется им в процессе управления проектируемым устройством. Таким образом, в результате работы специальных программ в составе пакета интегрированной среды разработки, один или несколько файлов на Си были обработаны программами компилятора, Ассемблера и линковщика с целью получения одного исполняемого на выбранном типе МК файла машинных кодов прикладной программы.

Процесс разбиения задачи для программирования на множество программных модулей, каждый из которых функционально завершен и предназначен для реализации отдельной функции управления, называется структурным программированием. Для объединения отдельных программных модулей в одну программу управления с возможностью независимой модификации и отладки каждого модуля недостаточно располагать только исходными текстами или объектными файлами этих модулей. Необходим также достаточно большой набор служебных файлов, которые вместе с файлами модулей составляют так называемый проект задачи. Поэтому программа в составе интегрированной среды разработки, которая осуществляет управление процессом компиляции, ассемблирования, объединения модулей программой линковщика и загружает полученный исполняемый код в память микроконтроллера на отладочной плате, называется менеджером проектов (Project Manager или Project Builder). Это еще одна программа в составе пакета интегрированной среды разработки типа ICC12.

Программа менеджера проектов считается основной в составе IDE, поскольку она управляет доступом пользователя и взаимодействием с обрабатываемыми файлами всех остальных программ пакета интегрированной среды разработки и отладки программного обеспечения (ПО) микропроцессорных систем. Кроме используемого в книге пакета ICC12, для создания прикладного ПО микроконтроллеров семейства 68HC12 могут также использоваться другие аналогичные пакеты, например CodeWarrior компании Metrowerks.

В параграфе 3.14 на примере простой программы управления светодиодами мы рассмотрим особенности генерации всех промежуточных файлов при работе комплекта программ в составе интегрированной среды ICC12. В настоящем параграфе на рис. 3.4 мы демонстрируем лишь смысловые преобразования исходного текста на Си в процессе получения исполняемого кода прикладной программы.