Anjey_N 0 17 декабря, 2007 Опубликовано 17 декабря, 2007 · Жалоба Уважаемые знатоки, ответьте! Что означает сообщение 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 17 декабря, 2007 Опубликовано 17 декабря, 2007 · Жалоба Уважаемые знатоки, ответьте! Что означает сообщение 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 0 17 декабря, 2007 Опубликовано 17 декабря, 2007 · Жалоба Для ответа не нужно быть знатоком - в ОЗУ не хватает места для стека. Спасибо. Ошибка исчезла, когда я в графе data stack поставил 0х10. Насколько я понимаю я увеличил размер стека. Только почему для увеличения размера нужно указывать меньшее число? Ошибка выдавалась при размере 0x20 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 122 17 декабря, 2007 Опубликовано 17 декабря, 2007 · Жалоба Насколько я понимаю я увеличил размер стека. Только почему для увеличения размера нужно указывать меньшее число?Вы уменьшили размер стека. Соответственно, под него требуется резервировать меньше памяти и теперь он влез. Но есть сомнение, что программе, которая заняла все ОЗУ хватит 16 байт стека данных - в нем выделяется память под локальные переменные, там же компилятор сохраняет регистры в прерываниях. Попробуйте освободить ОЗУ за счет чего-нибудь другого - уменьшайте количество глобальных переменных, например. Или включите модель памяти Small вместо Tiny - станет доступно все ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anjey_N 0 18 декабря, 2007 Опубликовано 18 декабря, 2007 · Жалоба Вы уменьшили размер стека. Соответственно, под него требуется резервировать меньше памяти и теперь он влез. Но есть сомнение, что программе, которая заняла все ОЗУ хватит 16 байт стека данных - в нем выделяется память под локальные переменные, там же компилятор сохраняет регистры в прерываниях. Попробуйте освободить ОЗУ за счет чего-нибудь другого - уменьшайте количество глобальных переменных, например. Или включите модель памяти Small вместо Tiny - станет доступно все ОЗУ. Ваш совет мне помог. Я переключил модель памяти на Small, теперь без ошибок. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться