avr-gcc makefile, несколько целей для avrdude

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
sunjob
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Ср дек 08, 2010 19:03:17

avr-gcc makefile, несколько целей для avrdude

Сообщение sunjob »

добрый день

имеем

Код: Выделить всё

- makefile for avr-gcc
- avrdude
- несколько целей для прошивки (разные программаторы; разные параметры, разные по кол-ву и  настройкам)
задача: настроить так, что бы при вызове цели flash - отрабатывала дефолтная цель для дудки (flash_usbasp,flash_ispmkii,flash_109), которая настраивается в начале makefile
ну, и, соотв., отрабатывали все остальные "конкретные" цели (flash_usbasp,flash_ispmkii,flash_109)

выкрутился рекурсивными вызовом этого-же makefile

Код: Выделить всё

FLASH_NAME    ?= usbasp  ###!!! дефолтный программатор
FLASH_DEV     ?= usb

flash_usbasp  : FLASH_NAME    ?= usbasp
flash_usbasp  : FLASH_BRATE    = 115200
flash_usbasp  : FLASH_BCLOCK   = 4
flash_usbasp  : AVRDUDE_FLAG  += -b $(FLASH_BRATE) -B $(FLASH_BCLOCK)
flash_usbasp  : flash_cmd

flash_ispmkii : FLASH_NAME    = avrispmkII
flash_ispmkii : FLASH_BRATE   = 115200
flash_ispmkii : FLASH_BCLOCK  = 4
flash_ispmkii : AVRDUDE_FLAG += -b $(FLASH_BRATE) -B $(FLASH_BCLOCK)
flash_ispmkii : flash_cmd

flash_109     : FLASH_NAME    = avr109
flash_109     : FLASH_BRATE   = 9600
flash_109     : AVRDUDE_FLAG  += -b $(FLASH_BRATE)
flash_109     : flash_cmd

###!!!
# рекурсивынй вызов, в зов-ти от цели
###!!!
flash :
ifeq ($(FLASH_NAME),usbasp)
	$(MAKE)     flash_usbasp
endif
ifeq ($(FLASH_NAME),ispmkii)
	$(MAKE)     flash_ispmkii
endif
ifeq ($(FLASH_NAME),avr109)
	$(MAKE)     flash_avr109
endif

flash_cmd: $(TARGET).hex
	$(AVRDUDE) -c $(FLASH_NAME) -P $(FLASH_DEV) -F $(AVRDUDE_FLAG) -U flash:w:$(OUTDIR)/$<
вопрос: можно-ли красиво обойтись без рекурсии?

!!! UPDATE !!! решение найдено

Код: Выделить всё

FLASH_NAME   ?= name1
FLASH_NAME   ?= name2
FLASH_NAME   ?= name3

...

flash_name1  : FLASH_NAME =
flash_name1  : ARG = ...
flash_name1  : flash

flash_name2  : FLASH_NAME =
flash_name2  : ARG = ...
flash_name2  : flash

flash_name3  : FLASH_NAME =
flash_name3  : ARG = ...
flash_name3  : flash

flash : flash_$(FLASH_NAME)
    $(FLASH_CMD)

...

make all        - сборка проекта
make flash       - прошивка дефолтным свистком (настраивается)
make flash_$NAME - прошивка кастомным свистком
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Реклама
Аватара пользователя
sunjob
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Ср дек 08, 2010 19:03:17

Re: avr-gcc makefile, несколько целей для avrdude

Сообщение sunjob »

!!! UPDATE - УТОЧНЕНИЕ !!!

упс, пацаны, косячЁк вышел, хреново протестировал :о)

не получилось выкрутиться "переопределением цели", потому как у меня используется "хитрое использование цели"

Код: Выделить всё

-U flash:w:$(OUTDIR)/$<
преобразуется в хреньку

Код: Выделить всё

-U flash:w:out/main.hex 
-->
-U flash:w:out/flash_usbasp
бум пилить дальше :о)
...
вообщем-то можно, конечно, выкрутиться :о)
пришлось красивую реализацию цели $< заменить явной елью $(TARGET).hex

Код: Выделить всё

-U flash:w:$(OUTDIR)/$<
-U flash:w:$(OUTDIR)/$(TARGET).hex
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Реклама
Ответить

Вернуться в «Разные вопросы по МК»