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

Помощь новичку

Уважаемые знатоки, ответьте! Что означает сообщение 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

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


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

Уважаемые знатоки, ответьте! Что означает сообщение 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

Для ответа не нужно быть знатоком - в ОЗУ не хватает места для стека.

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


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

Для ответа не нужно быть знатоком - в ОЗУ не хватает места для стека.

 

Спасибо.

Ошибка исчезла, когда я в графе data stack поставил 0х10.

Насколько я понимаю я увеличил размер стека. Только почему для увеличения размера нужно указывать меньшее число?

 

Ошибка выдавалась при размере 0x20

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


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

Насколько я понимаю я увеличил размер стека. Только почему для увеличения размера нужно указывать меньшее число?
Вы уменьшили размер стека. Соответственно, под него требуется резервировать меньше памяти и теперь он влез. Но есть сомнение, что программе, которая заняла все ОЗУ хватит 16 байт стека данных - в нем выделяется память под локальные переменные, там же компилятор сохраняет регистры в прерываниях. Попробуйте освободить ОЗУ за счет чего-нибудь другого - уменьшайте количество глобальных переменных, например. Или включите модель памяти Small вместо Tiny - станет доступно все ОЗУ.

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


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

Вы уменьшили размер стека. Соответственно, под него требуется резервировать меньше памяти и теперь он влез. Но есть сомнение, что программе, которая заняла все ОЗУ хватит 16 байт стека данных - в нем выделяется память под локальные переменные, там же компилятор сохраняет регистры в прерываниях. Попробуйте освободить ОЗУ за счет чего-нибудь другого - уменьшайте количество глобальных переменных, например. Или включите модель памяти Small вместо Tiny - станет доступно все ОЗУ.

Ваш совет мне помог. Я переключил модель памяти на Small, теперь без ошибок. Спасибо!

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


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

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

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

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

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

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

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

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

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

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