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

Настройка стека данных CSTACK

Приветствую!
Конечная цель - разместить код в загрузчике. Имеется загрузчик AVR230 http://microsin.net/programming/AVR/avr230...bootloader.html
Проект имеет уйму настроек. Если что-то неудачно зацепить, концов не найти. Проект был изначально для IAR 2.28. Вроде бы получилось его адаптировать на IAR 6.40. Загрузчик работает, программы тоже. Проблема началась, когда к проекту загрузчика прицепил ранее отлаженный код. Линкер выдаёт следующее:

Error[e16]: Segment CSTACK (size: 0xfc0 align: 0) is too long for segment definition. At least 0x2 more bytes needed. The problem occurred while processing the segment placement
command "-Z(DATA)CSTACK+(RAM_SIZE-40)=RAM_BASE-(RAM_BASE+RAM_SIZE-1)", where at the moment of placement the available memory ranges were "DATA:142-10ff"
Reserved ranges relevant to this placement:
DATA:100-101 NEAR_Z
DATA:102-141 RSTACK
DATA:142-10ff CSTACK
Error while running Linker

В проекте есть файл .xcl, содержащий следующую строку:
-Z(DATA)CSTACK+(RAM_SIZE-40-APP_SRAM_USAGE)=RAM_BASE-(RAM_BASE+RAM_SIZE-1)
Несколько мудрёное уравнение. И самое главное, в нём есть неизвестное APP_SRAM_USAGE.

Было замечено, что ошибка линкера появляется, когда в обработчике прерывания встречается обращение к структуре через указатель. Когда в теле обычной функции, то всё нормально. И чего линкер прицепился к обработчику прерывания?!

#pragma vector=TIMER0_OVF_vect
__interrupt void T0_mng (void)
{
char from_T0;

from_T0 = TCNT0;
while(from_T0 == TCNT0);
TCNT0 += (255-T0_preload);
//Syst->swe_Time = Syst->qty_SWI_executors++; /* Вызывает ошибку Линкера */
}


В свойствах проекта нет возможности изменить размеры стеков. Получается, что всё определяется файлом .xcl

Кто-то знает, как настроить стек данных?
Заранее благодарен!



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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация