Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Статьи > Средства разработки

реклама

 




Мероприятия:




Программа make

Выше, мной приводился пример автоматизации сборки проекта командным файлом командного интерпретатора. Вполне работоспособная методика. Но фактическим стандартом, стало использование программы make для сборки программ. Проект, собираемый вызовом командной строки средствами make, можно легко встраивать во многие интегрированные среды разработки (IDE). Широко известный Eclipse, позволяет это делать.

Руководством к действию для make служит файл описания зависимостей модулей. По умолчанию этот файл называется Makefile или makefile. Вот его текст:

	
CC=arm-none-eabi-gcc
MACROS=-DSTM32F10X_MD_VL -DUSE_STDPERIPH_DRIVER
INCL=-ILibraries/CMSIS/CM3/CoreSupport/ \
-ILibraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x \
-ILibraries/STM32F10x_StdPeriph_Driver/inc \
-IUtilities -ISrc

OPT=-Os

CFLAGS= $(INCL) $(MACROS) -Wall -mthumb -mcpu=cortex-m3 $(OPT) \
 -fno-common -ffunction-sections -fdata-sections

PDrv=./Libraries/STM32F10x_StdPeriph_Driver/src
PCMSIS=./Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x

OBJECTS=./Obj/s.o ./Obj/system_stm32f10x.o ./Obj/stm32f10x_it.o \
  ./Obj/main.o ./Obj/misc.o ./Obj/stm32f10x_flash.o \
  ./Obj/stm32f10x_gpio.o ./Obj/stm32f10x_rcc.o \
  ./Obj/stm32f10x_exti.o ./Obj/STM32vldiscovery.o

LFLAGS= -T L.ld -Wl,--gc-sections -Wl,-Map=main.map -nostdlib

main.elf: $(OBJECTS) L_.ld
	arm-none-eabi-gcc $(LFLAGS) -o main.elf $(OBJECTS)
	arm-none-eabi-objcopy -O binary main.elf main.bin

./Obj/s.o: ./Src/s.s 
	$(CC) $(CFLAGS) -c ./Src/s.s -o ./Obj/s.o

./Obj/system_stm32f10x.o: $(PCMSIS)/system_stm32f10x.c
	$(CC) $(CFLAGS) -c $(PCMSIS)/system_stm32f10x.c -o ./Obj/system_stm32f10x.o

./Obj/stm32f10x_it.o: ./Src/stm32f10x_it.c
	$(CC) $(CFLAGS) -c ./Src/stm32f10x_it.c -o ./Obj/stm32f10x_it.o

./Obj/main.o: ./Src/main.c 
	$(CC) $(CFLAGS) -c ./Src/main.c -o ./Obj/main.o

./Obj/misc.o: $(PDrv)/misc.c
	$(CC) $(CFLAGS) -c $(PDrv)/misc.c -o ./Obj/misc.o

./Obj/stm32f10x_flash.o: $(PDrv)/stm32f10x_flash.c
	$(CC) $(CFLAGS) -c $(PDrv)/stm32f10x_flash.c -o ./Obj/stm32f10x_flash.o

./Obj/stm32f10x_gpio.o: $(PDrv)/stm32f10x_gpio.c
	$(CC) $(CFLAGS) -c $(PDrv)/stm32f10x_gpio.c -o ./Obj/stm32f10x_gpio.o

./Obj/stm32f10x_rcc.o: $(PDrv)/stm32f10x_rcc.c
	$(CC) $(CFLAGS) -c $(PDrv)/stm32f10x_rcc.c -o ./Obj/stm32f10x_rcc.o

./Obj/stm32f10x_exti.o: $(PDrv)/stm32f10x_exti.c
	$(CC) $(CFLAGS) -c $(PDrv)/stm32f10x_exti.c -o ./Obj/stm32f10x_exti.o

./Obj/STM32vldiscovery.o: ./Utilities/STM32vldiscovery.c
	$(CC) $(CFLAGS) -c ./Utilities/STM32vldiscovery.c -o ./Obj/STM32vldiscovery.o

.PHONY: clean

clean:
	- rm -f *.elf *.map 
	- rm -f ./Obj/*.o
	- rm -f *.bin
	

Этот файл похож на командный файл сборки проекта, который приводился раньше. Команда make позволяет использовать макроопределения. Макроопределения дают возможность добиться большей наглядности и компактности. В строках с двоеточием заданы зависимости между файлами. Ниже, строка с описанием команд, выполняемых для достижения цели. Перед строкой команд обязателен символ табуляции, если этот символ отсутствует, то будет выдано сообщение об ошибке. Слева от двоеточия - это цель. Справа от двоеточия - это предусловие, файл, который должен существовать и иметь более позднее время модификации, чем файл цели. Цель достигнута, если файл цели и предусловия существуют, и между временем модификации этих файлов имеется определённое соотношение. Как это работает? При первом запуске программа make обнаружит отсутствие файла main.elf и зависимых от него объектных файлов. Для достижения цели, требуется создание объектных файлов. А каждый объектный файл получается компилированием. Утилита выполнит поиск всех зависимостей, а потом начнёт компилирование в обратном порядке. Процесс закончится компоновкой main.elf. Если будет изменён файл STM32vldiscovery.c , а затем выполнена команда make. То эта утилита начнёт проверку зависимостей между существующими файлами и обнаружит, что STM32vldiscovery.o устарел и запустит компиляцию только этого файла.

Можно создавать и фиктивные цели, этим целям не соответствуют никакие реальные файлы. Цель clean - из этого разряда. Её назначение, чистка проекта, удаление файлов с расширением "o" и сопутствующих файлов. Для указания цели clean , выполнить, make clean . Фиктивные цели всегда выполняются, если конечно они указаны. Специальная цель .PHONY используется для подчёркивания, что цель clean - фиктивная. Достоинством этого makefile , является его простота. Неплохой старт для освоения make. Недостаток этого файла makefile, что не отслеживаются изменения в заголовочных файлах. Этот недостаток легко преодолеть, если перед компиляцией выполнить чистку проекта, выполнив команду make clean .

Дальнейшее развитие темы - это встраивание проекта make, в какую-либо интегрированную среду разработки программ. Одно из назначений IDE - это удобная навигация по исходному тексту проекта. Современные программные проекты для встраиваемых систем содержат десятки файлов и без средств навигации, полноценно работать просто невозможно. Использование IDE - это большая, отдельная тема.

Ценность GCC в том, что используемая техника программирования, стала практически стандартом, старый добротный инструмент. Освоив работу с GCC для встроенных систем, приобретается опыт применения GCC и в прочих областях. Многие программы, распространяемые по лицензии GNU, легко собираются только GCC. Каждый ли разработчик в одиночку сможет создать видеоплеер, поддерживающий все современные форматы? Но можно портировать встроенный Linux совместно с программой Mplayer, трудозатраты намного меньшие. Думаю, что весь предыдущий материал окажет большую пользу начинающим разработчикам. Кто-то захочет дополнить картину и опубликует своё видение темы.

Немоляев Александр Владимирович
E-mail: vk.com.protocols@yandex.ru
<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники