реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> IAR AVR linker, зависает xlink.exe
lutik
сообщение Oct 28 2005, 15:05
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216



подскажите пожалуйста как побороть такую траблу:
в коде есть такой кусок

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

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

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

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


--------------------
однако..
Go to the top of the page
 
+Quote Post
starter48
сообщение Oct 28 2005, 16:59
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(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.
Go to the top of the page
 
+Quote Post
solidreg
сообщение Oct 28 2005, 17:47
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056



Лучше PutStr обявли так:

void PutStr(char __generic *);

Тогда будет работать и с константами из фляша, и с переменными из RAM'a.
Go to the top of the page
 
+Quote Post
lutik
сообщение Oct 31 2005, 08:37
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216



пасиба за советы, но проблема, как всегда, разрешилась внимательным чтением мануала по линкеру..
-y --initializers_in_flash
решили проблему


--------------------
однако..
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 22:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016