Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Чт дек 17, 2020 14:10:46

добрый день

имеем
Код:
- 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 - прошивка кастомным свистком

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

Сб дек 19, 2020 16:20:26

!!! 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
Ответить