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

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

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.

Reply to
Konstantin Morozov
Loading thread data ...

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

Reply to
Alexander Derazhne

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

Reply to
Konstantin Morozov

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

Reply to
Alexander Derazhne

Hello, Alexander Derazhne !

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

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

Reply to
Dima Orlov

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

Reply to
Konstantin Morozov

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

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

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

Reply to
Harry Zhurov

П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()

Reply to
Sergey Nazarkin
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

Reply to
Alexej Goncharovskij

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.