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

PutStr("Строка"); который выводит строку в LCD индикатор.

при компиляции строка помещается в сегмент NEAR_C, а линкуется этот сегмент к коду..
дело тока в том, что в дебагер показывает что ищет эту константу в сегменте данных.
поправил xcl файл - указал так
-Z(DATA)NEAR_C=100-10FF

теперь вроде как усе нормально, и константа линкуется куда нада..
тока вот при создании бинария линкер зависает - создает bin файл и пишет туда сначала код моей проги а потом нулей на сколько свободного дискового пространства есть

кто может ткнуть носом - де грабли
starter48
Цитата(lutik @ Oct 28 2005, 22:05)
подскажите пожалуйста как побороть такую траблу:
в коде есть такой кусок

PutStr("Строка"); который выводит строку в LCD индикатор.

при компиляции строка помещается в сегмент NEAR_C, а линкуется этот сегмент к коду..
дело тока в том, что в дебагер показывает что ищет эту константу в сегменте данных.
поправил xcl файл - указал так
-Z(DATA)NEAR_C=100-10FF

теперь вроде как усе нормально, и константа линкуется куда нада..
тока вот при создании бинария линкер зависает - создает bin файл и пишет туда сначала код моей проги а потом нулей на сколько свободного дискового пространства есть

кто может ткнуть носом - де грабли
*

Я делал так:
в .h файл писал строки:
__flash const char NASTROJKA[]="настройка";
и т.д....
т.е. указываем, что строки лежат во flash.

далее, PutStr() переписываешь так, чтобы она принимала аргумент из flash:
типа void PutStr(const char __flash *);
и вызываешь PutStr(NASTROJKA);
но учти, что на Mega128 и выше, возможно, потребуется вместо __flash указать __farflash.
А ещё лучше, перепиши ф-ю putchar() для вывода на свой индикатор, и пользуйся стандартными puts_P() и printf_P(). Они отличаются от обычних puts() и printf() тем, что берут строку из __flash.
solidreg
Лучше PutStr обявли так:

void PutStr(char __generic *);

Тогда будет работать и с константами из фляша, и с переменными из RAM'a.
lutik
пасиба за советы, но проблема, как всегда, разрешилась внимательным чтением мануала по линкеру..
-y --initializers_in_flash
решили проблему
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.