Помогите с ошибкой в IAR AVR

Jun 29, 2004 8 Replies

Всем привет ! После компиляции проекта выдается такое сообщение:



Error[e16]: Segment TINY_I (size: 0x316 align: 0) is too long for segment definition. At least 0x276 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND", where at the moment of placement the available memory ranges were "60-ff" Reserved ranges relevant to this placement: 00000054 - 00000087 SWITCH 00000054 - 00002431 CODE 00000054 - 00002437 INITTAB 00000054 - 0000274D TINY_ID



Что это такое и как с этим бороться ? P.S. IAR v.2.28A, ATMega16.


Hello, Konstantin! You wrote on Tue, 29 Jun 2004 12:36:30 +0000 (UTC):

KM> Error[e16]: Segment TINY_I (size: 0x316 align: 0) is too long for KM> segment definition. At least 0x276 more bytes needed. KM> The problem occurred while processing the segment placement command KM> "-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND", where KM> at the moment of placement the available memory ranges were "60-ff" KM> Reserved ranges relevant to this placement: KM> 00000054 - 00000087 SWITCH 00000054 - 00002431 CODE KM> 00000054 - 00002437 INITTAB 00000054 - 0000274D TINY_ID

KM> Что это такое и как с этим бороться ? KM> P.S. IAR v.2.28A, ATMega16.

Памяти в сегменте TINY_I не хватило. Переходи к модели памяти SMALL (шукай в ключах компилятора/линкера).

Alexander,Derazhne@adic,kiev,ua (replace commas with dots) Alexander Derazhne

Спасибо за информацию, уже сам разобрался. Проект переносил из Image Craft, там были строчки объявления констант во флеше типа const char tst0[]="abc", заменил на __flash const char tst0[]="abc" - ошибка исчезла. Но появилась новая проблема: при выводе строки типа printf("P= %s",tst0) печатается какая-то белиберда. если убрать из объявления константы __flash - все работает правильно. Где надо копаться ?

Hello, Konstantin! You wrote to Alexander Derazhne on Wed, 30 Jun 2004 10:19:28 +0000 (UTC):

KM> исчезла. Но появилась новая проблема: при выводе строки типа KM> printf("P= %s",tst0) печатается какая-то белиберда. если убрать из KM> объявления константы __flash - все работает правильно. Где надо KM> копаться ?

В Гарвардской архитектуре. Я сам пока с этим не разбирался, у меня сейчас голый асм, но printf явно пытается выбирать значения из ОЗУ, в то время как строчка живёт в ПЗУ, т.е. совсем в другом адресном пространстве с другими командами доступа (!! это не другой "сегмент", как на интелах!). Кажется, у IAR'а были ключики/слова использовать трёхбайтные адреса, но библиотека (из которой printf берётся) должна тоже это поддерживать.

Alexander,Derazhne@adic,kiev,ua (replace commas with dots) Alexander Derazhne

Hello, Alexander Derazhne !

Дело не в архитектуре, а в мягко говоря странных подходах IAR'а к кодогенерации. Hаписано const, да еще прямо указано, что flash, какого черта копировать в ОЗУ константные данные? А он это делает даже если никакими библиотечными printf'ами не пользоваться. Это обходится, но как-то уж очень неестественным образом.

С уважением, Дима Орлов.

Еще пара вопросиков. Почему при отладке в С-SPY (Simulator) в таймерах не модифицируются TCNT0, TCNT1, и соответственно, не вызываются прерывания ? Это так задумано или я что-то не так делаю ? Хотел отладить в AVR Studio 4, так IAR выдает ошибку при генерации coff файла - Error[e92]: Cannot use the coff output format with this cpu. А это можно побороть ?

Thu, 01 Jul 2004 07:32:24 +0600 Konstantin Morozov wrote to Konstantin Morozov:

KM> Еще пара вопросиков. KM> Почему при отладке в С-SPY (Simulator) в таймерах не модифицируются TCNT0, KM> TCNT1, и соответственно, не вызываются прерывания ? Это так задумано или я KM> что-то не так делаю ?

Спай не симулирует периферию, только ядро. Для моделирования работы периферийных устройств служат макросы. В доке про это достаточно подробно написано с примерами.

Пpивет Konstantin !

  • 30/Jun/2004 14:19, Konstantin Morozov -> Alexander Derazhne:

KM> заменил на __flash const char tst0[]="abc" - ошибка исчезла. Hо KM> появилась KM> новая проблема: при выводе строки типа printf("P= %s",tst0) печатается KM> какая-то белиберда. если убрать из объявления константы __flash - все KM> работает KM> правильно. Где надо копаться ?

Используй printf_P()

01 июля 04, Konstantin Morozov wrote to Konstantin Morozov

KM> Хотел отладить в AVR Studio 4, так IAR выдает ошибку пpи генеpации coff KM> файла - Error[e92]: Cannot use the coff output format with this cpu. А KM> это можно побоpоть ?

Hадо генеpиpовать не coff а ubrof8, AVR Studio его понимает. Пpавда это не всегда pешение пpоблемы - есть симулятоp понимающий только coff, пpичем в фоpмате AVR Studio 3.x.

Bye

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required