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

Заполнение памяти программ определенным значением

Как с помощью IAR (использую IAR 3.10C) заполнить всю свободную память программ определенным числом? Например, во все свободные ячейки поместить код jmp 0x00(0xC000).

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


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

Как с помощью IAR (использую IAR 3.10C) заполнить всю свободную память программ определенным числом? Например, во все свободные ячейки поместить код jmp 0x00(0xC000).

 

Прочитать в xlink.pdf про ключи -H и -h.

 

Поставить в проекте (Options | Linker | Processing) галочку напротив Fill unused memory и нужный код.

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


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

Пробовал, линек прекращает работу с фатальной ошибкой:

"Fatal Error[e38]: Option -H must not be defined more than once: -H1895"

Что я не доделал?

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


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

Пробовал, линек прекращает работу с фатальной ошибкой:

"Fatal Error[e38]: Option -H must not be defined more than once: -H1895"

Что я не доделал?

Скорее всего "переделали". В параметрах линкеру эта опция указана более одного раза. Посмотрите что линкеру идет в параметрах.

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


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

Очевидно линкеру дано задание заполнять неиспользуемые вектора прерываний инструкциями возврата из прерываний. Это уже заполнитель.

Определение заполнителя может быть только одно на проект.

Если хотите использовать другой заполнитель, то отключите опцию заполнения неиспользуемых векторов.

Если всё таки нужны и возвраты из неиспользуемых прерываний, то пропишите эти функции явно, например:

__interrupt void SPI_STC_interrupt() {}

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


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

Добавлю к выше сказанному:

это определение находится в файлах lnk-----.xcl , которые подключаются при линковании

/* Fill unused interrupt vector's with RETI */

-H1895

-h(CODE)0-_..X_INTVEC_SIZE

Выход: запретить все подключения и самому создать свой файл .XCL с прописанными настройками линка, и подключить его в свой проект.

 

Пример моего XCL для меги8

config_m8.zip

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


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

Если хотите использовать другой заполнитель, то отключите опцию заполнения неиспользуемых векторов.

А как это сделать?

Опции не нашел, а в используемых файлах cfgtiny26.xcl и cfg0t.xcl опции "-H" нет...

 

 

ответил IgorKossak:

Эта опция неявно присутствует если установлена галочка General Options->System->Initialize unused interrupt vectors with RETI instructions (-H1895).

Уберите эту галочку и вставьте в файл линкера свою опцию заполнения.

При этом, если надо, команды возврата из незадействованых прерываний нужно обеспечить вручную написав обработчики прерываний с пустыми телами.

 

Источник тут:

http://electronix.ru/forum/index.php?showt...mp;#entry359789

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


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

IAR AVR 5.11b, tiny24, поставил опцию заполнить неиспользованную память нулями, но почему-то генерятся hex файлы (intel-standard), в которых неиспользованные байты в области прерываний просто пропущены (память "порвана"). В проекте также генерится EEPROM hex файл с помощью -О опции в дополнительных командах. Ошибок, предупреждений при компиляции нет. В чем может быть дело?

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


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

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

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

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

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

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

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

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

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

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