Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Кому интересно, как прилинковывать к проекту WinAVR бинарник через Makefile. И вопрос по результату.

Отправлено Neofit 28 сентября 2007 г. 00:30


Что надо делать - описано в ФАКе avr-libc. И даётся совет - добавить это в мэйкфайл, что-бы всегда учитывать изменения в исходнике. Итак - ***м мзг, читаем, медитируем, повторяем, пробуем, повторяем. Вуаля!

Где-нибудь в начале файла помещаем (подсмотрено на myROBOT):
# Название бинарного файла, включаемого в проект (во Flash-память, без расширения)
MY_BIN = [имя файла]

Правим:
# Define all object files.
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)

на:
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) $(OBJDIR)/$(MY_BIN).o

Правим:
# Change the build target to build a HEX file or a library.
build: ima elf hex eep lss sym

на:
build: ima elf hex eep lss sym

Добавляем после (а может - и перед):
lib: $(LIBNAME)
строку: ima: $(MY_BIN).o

Добавляем, например - после:
# Link: create ELF output file from object files. etc.
строки:
# Копирование бинарного образа
$(MY_BIN).o :
$(OBJCOPY) --rename-section .data=.progmem.data,contents,alloc,load,readonly,data -I binary -O elf32-avr $(MY_BIN).bin $(OBJDIR)/$(MY_BIN).o

Сохраняем, смотрим куда надо и видим, что бинарник помещён сразу после таблицы прерываний по адресу 0х098.

А теперь - внимание. Вопрос: Полученные в ходе преобразований "константы" (_binary_*****_bin_start, _binary_*****_bin_end, _binary_*****_bin_size) получается использовать только интерпретируя их как переменные:
fuck1 = &_binary_font_split1_bin_start;
1e6c: 28 e9 ldi r18, 0x98 ; 152
1e6e: 30 e0 ldi r19, 0x00 ; 0
1e70: 30 93 08 01 sts 0x0108, r19
1e74: 20 93 07 01 sts 0x0107, r18

fuck1 = pgm_read_word(&_binary_font_split1_bin_start);
1ea0: f9 01 movw r30, r18
1ea2: 25 91 lpm r18, Z+
1ea4: 34 91 lpm r19, Z
1ea6: 30 93 08 01 sts 0x0108, r19
1eaa: 20 93 07 01 sts 0x0107, r18

Это потому, что бинарник "relocatable", а не гвоздями прибитый? Или как?




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

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

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru