Перейти к содержанию
    

Формирование HEX-файла для EEPROM МК

Здравствуйте!

 

Как можно сформировать HEX-файл для записи в EEPROM МК стандартными средствами WinAVR?

Или какими-либо другими средствами.

 

Благодарю заранее!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

данные EEPROM в листинге определяем приблизително таким образом

unsigned int  EEMEM mount_counterE = 600;

компилятор сам сделает файл с расширением .eep

Да! Забыл. Необходимо подключить библиотечку #include <avr/eeprom.h>

Изменено пользователем chief_olimp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

компилятор сам сделает файл с расширением .eep
Компилятор сам делает только объектные файлы с расширением .o. Линкер их собирает в файлы с расширением (обычно) .elf. А вот уже из .elf утилита avr-objcopy умеет данные для eeprom скопировать в отдельный файл (обычно в формате Intel-HEX). Запускается утилита командой

avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings <файл.elf> <файл.eep>

Другое дело, что плугин студии сам дописывает эту команду в makefile.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

<avr/eeprom.h>: EEPROM handling

 

Как я понял, эта директива помещает требуемую переменную в секцию ".eeprom" и, соответственно, в EEPROM память после применения avr-objcopy.

А если мне, скажем, надо инициализировать только два байта в середине EEPROM, то что делать?

Заводить массив объёмом EEPROM, руками его инициализировать и прописывать нужные байты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если мне, скажем, надо инициализировать только два байта в середине EEPROM, то что делать?
Ключевые слова здесь "в середине". А что делать с остальными байтами? Если вам они вообще не нужны - то вам надо поправить скрипт линкера и расположить секцию .eeprom в тех адресах, которые вас интересуют. Или при линковке указывать начальный адрес секции .eeprom ключем линкера --section-start

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings <файл.elf> <файл.eep>

 

Самое интересное, что эта строчка у меня была, но формировался пустой файл HEX (13 байт).

Но эта строчка отличалась от Вашей отсутствием --set-section-flags=.eeprom="alloc,load".

Для чего этот параметр я не разобрался.

Добавил - всё равно не работает :(

 

Вот что у меня было до изменения:

avr-size --mcu=atmega168 --format=avr $(TARGET_OUTPUT_FILE)

avr-objcopy -O ihex -R .eeprom -R .eesafe $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_FILE).hex

avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_FILE).eep.hex

Изменено пользователем n_bogoyavlensky

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил - всё равно не работает :(
Давайте так: Копируйте проект в отдельную папку, вырезйте все, оставьте только что-нибудь вроде
#include  <avr/eeprom.h>

int i;
int EEMEM i_ee = 2;

void main()
{
   i = i_ee;
}

пробуйте. Если файл будет пустой - делайте make clean и весь проект в архивированном виде сюда. Я только что скомпилил - файл есть, двойка в нем присутствует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...