Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помощь новичку
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Anjey_N
Уважаемые знатоки, ответьте! Что означает сообщение IAR

Error[e16]: Segment CSTACK (size: 0x20 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_TBASE:+_..X_SRAM_TSIZE", where at the moment of placement the available memory ranges were "DATA:ee-ff"
Reserved ranges relevant to this placement:
DATA:60-97 TINY_I
DATA:98-ed TINY_Z
DATA:ee-ff CSTACK


МК ATmega16
Dog Pawlowa
Цитата(Anjey_N @ Dec 17 2007, 12:22) *
Уважаемые знатоки, ответьте! Что означает сообщение IAR

Error[e16]: Segment CSTACK (size: 0x20 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_TBASE:+_..X_SRAM_TSIZE", where at the moment of placement the available memory ranges were "DATA:ee-ff"
Reserved ranges relevant to this placement:
DATA:60-97 TINY_I
DATA:98-ed TINY_Z
DATA:ee-ff CSTACK
МК ATmega16

Для ответа не нужно быть знатоком - в ОЗУ не хватает места для стека.
Anjey_N
Цитата(Dog Pawlowa @ Dec 17 2007, 12:57) *
Для ответа не нужно быть знатоком - в ОЗУ не хватает места для стека.


Спасибо.
Ошибка исчезла, когда я в графе data stack поставил 0х10.
Насколько я понимаю я увеличил размер стека. Только почему для увеличения размера нужно указывать меньшее число?

Ошибка выдавалась при размере 0x20
Сергей Борщ
Цитата(Anjey_N @ Dec 17 2007, 20:27) *
Насколько я понимаю я увеличил размер стека. Только почему для увеличения размера нужно указывать меньшее число?
Вы уменьшили размер стека. Соответственно, под него требуется резервировать меньше памяти и теперь он влез. Но есть сомнение, что программе, которая заняла все ОЗУ хватит 16 байт стека данных - в нем выделяется память под локальные переменные, там же компилятор сохраняет регистры в прерываниях. Попробуйте освободить ОЗУ за счет чего-нибудь другого - уменьшайте количество глобальных переменных, например. Или включите модель памяти Small вместо Tiny - станет доступно все ОЗУ.
Anjey_N
Цитата(Сергей Борщ @ Dec 17 2007, 22:42) *
Вы уменьшили размер стека. Соответственно, под него требуется резервировать меньше памяти и теперь он влез. Но есть сомнение, что программе, которая заняла все ОЗУ хватит 16 байт стека данных - в нем выделяется память под локальные переменные, там же компилятор сохраняет регистры в прерываниях. Попробуйте освободить ОЗУ за счет чего-нибудь другого - уменьшайте количество глобальных переменных, например. Или включите модель памяти Small вместо Tiny - станет доступно все ОЗУ.

Ваш совет мне помог. Я переключил модель памяти на Small, теперь без ошибок. Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.