Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [avr] Получить две прошивки из одной программы, два *.hex из одной *.c 
V
    Опции темы
UniBomb
Дата 27.10.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Добрый день. Есть два прибора, которые одинаковые на 98 процентов. Оставшиеся два процента - это небольшие изменения в схемотехнике и в логике работы. Из-за 98 процентов я не хочу создавать две отдельные программы, т.к. это всё равно потребует вдвое больше усилий, нежели одна программа. Вся разница в прошивках заключается в изменении нескольких строчек в разных частях программы. Ну что-то типа такого:

Код

#if defined dev1
    //some code
#elif defined dev2
    //some else code
#endif


Так вот, можно ли после компиляции проекта получить два разных файлы прошивки, в одном из которых было бы определено dev1, во втором соответственно dev2.

Использую WinAVR.


--------------------
PM MAIL ICQ Skype   Вверх
xvr
Дата 27.10.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Можно. Ключ командной строки для gcc -Ddev1 и -Ddev2. Прописать в makefile'е, или 2 раза звать make, передавая с командной строки:

Код

CPPOPTS = -D$(DEV) ...
OUTDIR = build/$(DEV)
...

$(OUTDIR)/*.o: *.c
   gcc-avr $(CPPOPTS) -c $< -o $@

...


Вызов:
Код

make DEV=dev1
make DEV=dev2

PM MAIL   Вверх
UniBomb
Дата 27.10.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



xvr, спасибо  smile 

Я правильно понимаю, что следующий код:

Код

PASS1 = dev1
PASS2 = dev2

$(build/$(PASS1))/%.o : %.c
    gcc-avr -c $(PASS1) $< -o $@ 

$(build/$(PASS2))/%.o : %.c
    gcc-avr -c $(PASS2) $< -o $@ 


позволит за один проход создать сразу два файла прошивки?



--------------------
PM MAIL ICQ Skype   Вверх
xvr
Дата 27.10.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(UniBomb @  27.10.2010,  17:50 Найти цитируемый пост)
позволит за один проход создать сразу два файла прошивки?
Почти, если поправить синтаксис и добавить кое что smile

Код

PASS1 = dev1
PASS2 = dev2

all: build/$(PASS1)/outfile.hex build/$(PASS2)/outfile.hex 

build/$(PASS1)/%.o : %.c
    gcc-avr -c -D$(PASS1) $< -o $@ 

build/$(PASS2)/%.o : %.c
    gcc-avr -c -D$(PASS2) $< -o $@ 
Но лучше так не делать - т.к. придется отдублировать все правила в makefile'е. Лучше сделать рекурсивный запуск, так:
Код


all:
  $(MAKE) PASS=dev1 hex_file
  $(MAKE) PASS=dev2 hex_file

hex_file: build/$(PASS)/real_hex_file.hex

build/$(PASS)/%.o: %.c
  gcc-avr -c -D$(PASS) $< -o $@

Ну и для build/$(PASS)/real_hex_file.hex конечно написать правило


PM MAIL   Вверх
UniBomb
Дата 28.10.2010, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



xvr, спасибо большое  smile За столько лет программирования впервые понадобилось править мейкфайл, надо будет изучить вопрос в ближайшее время  smile 


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1114 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.