реклама на сайте
подробности

 
 
> Размещение bootloader по произвольному адресу
athlon64
сообщение Aug 29 2010, 06:14
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



SAM7X512, IAR 5.50
Реализую bootloader, который должен располагаться в конце флеша с адреса 0x177FFF. Изменив в ICF-файле значение __ICFEDIT_region_ROM_start__ на 0x177FFF, получаю нерабочую прошивку.
Как я понимаю, это происходит потому что таблица векторов прерываний должна остаться по адресу 0x100000 и иметь соответствующее смещение. Как это сделать? Править startup?

Сейчас стартап от одного из примеров в IAR
Прикрепленные файлы
Прикрепленный файл  board_cstartup_iar.zip ( 1.53 килобайт ) Кол-во скачиваний: 26
 


--------------------
Руслан
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
athlon64
сообщение Aug 29 2010, 11:24
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



А возможно ли указать линкеру помещать копию стартапа ещё по одному адресу?
Пробовал так:
Код
define symbol __ICFEDIT_region_ROM_start__      = 0x177FFF;
define symbol __ICFEDIT_region_ROM_end__        = 0x17FEFF;

define symbol __ICFEDIT_region_COPY_STA_start__ = 0x17FF00;
define symbol __ICFEDIT_region_COPY_STA_end__   = 0x17FFFF;

define symbol __ICFEDIT_region_RAM_start__      = 0x200000;
define symbol __ICFEDIT_region_RAM_end__        = 0x21FFFF;

/*-Sizes-*/
define symbol __ICFEDIT_size_startup__  = 0x100;
define symbol __ICFEDIT_size_vectors__  = 0x100;
define symbol __ICFEDIT_size_cstack__   = 0x1000;
define symbol __ICFEDIT_size_sysstack__ = 0x60;
define symbol __ICFEDIT_size_irqstack__ = 0x60;
define symbol __ICFEDIT_size_heap__     = 0x0;

/*-Exports-*/
export symbol __ICFEDIT_region_ROM_start__;
export symbol __ICFEDIT_region_ROM_end__;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
export symbol __ICFEDIT_size_startup__;
export symbol __ICFEDIT_size_vectors__;
export symbol __ICFEDIT_size_cstack__;
export symbol __ICFEDIT_size_sysstack__;
export symbol __ICFEDIT_size_irqstack__;
export symbol __ICFEDIT_size_heap__;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;

define region STA_region      = mem:[from 0x100000 size __ICFEDIT_size_startup__];
define region ROM_region      = mem:[from __ICFEDIT_region_ROM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_ROM_end__];
define region COPY_STA_region = mem:[from __ICFEDIT_region_COPY_STA_start__ size __ICFEDIT_size_startup__];

define region VEC_region      = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
define region RAM_region      = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
initialize by copy { section .vectors };
do not initialize  { section .noinit };

place in STA_region { section .cstartup };
place in ROM_region { readonly };
place in COPY_STA_region { section .cstartup };
place in VEC_region { section .vectors };
place in RAM_region { readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };

ругается что стартап размещается дважды

Сообщение отредактировал athlon64 - Aug 29 2010, 11:25


--------------------
Руслан
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 12:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016