Д_М 0 13 февраля, 2018 Опубликовано 13 февраля, 2018 · Жалоба Приветствую! Конечная цель - разместить код в загрузчике. Имеется загрузчик 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 Кто-то знает, как настроить стек данных? Заранее благодарен! bootldr.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться