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

 
 
> WinAVR2007 & AVR Studio 4.13, возможно глупый вопрос, но очень важный
smk
сообщение Jan 17 2008, 22:29
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Конечно понимаю, что это элементарно и вообще... но всетаки как прикрепить к проекту внешний файл? имеется ввиду, что если функция описана в одном файле (пусть "dva.с") , а упоминается в основном файле проекта (пусть "odin.c"), то как и что сделать чтоб не было "undefined reference to"???
В С новичок, сильно не бейте, плз. Буду очень признателен за науку!!! Заранее спасибо!


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Сергей Борщ
сообщение Jan 17 2008, 22:54
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Jan 18 2008, 00:29) *
Конечно понимаю, что это элементарно и вообще...
Ну, только за честность: щелчок правой кнопкой мыши на Source Files в дереве проекта (или проекте там же), add existing source file(s).

С вас пиво smile.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 06:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
щелчок правой кнопкой мыши на Source Files в дереве проекта (или проекте там же), add existing source file(s).

Спасибо. Это я в курсе. Ошибка не исчезает.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 07:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Наверное будет правильно подробнее объяснить ситуацию.

Я хочу в своем проекте использовать фунуции файла lcd.c из комплекта AVRlib. Для этого я в отдельную директорию скопировал lcd.h, lcd.c и прочие файлы на которые имеются ссылки в виде #include. Все пути исправил. Добавил в "опциях проекта" путь к этой папке. Добавил в свой проект строчку #include "lcd_1/lcd.h". Этот файл и те, что подключаются внутри него (global.h b lcdconf.n) отобразились в списке подключенных.

В своем проекте вызвал функцию lcdInit(); и получил вышеупомянутую ошибку. Попробовал файл lcd.c подключить к проекту (способом, упомянутым выше) - ошибка повторилась.

Что я делаю не так и как правильно сделать? Буду очень признателен за подсказку! Спасибо!


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jan 18 2008, 07:47
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(smk @ Jan 18 2008, 02:29) *
Конечно понимаю, что это элементарно и вообще... но всетаки как прикрепить к проекту внешний файл? имеется ввиду, что если функция описана в одном файле (пусть "dva.с") , а упоминается в основном файле проекта (пусть "odin.c"), то как и что сделать чтоб не было "undefined reference to"???
В С новичок, сильно не бейте, плз. Буду очень признателен за науку!!! Заранее спасибо!

1) Имена функции в вызове и реализации совпадают? Упомянутые файлы в одной директории?

2)По хорошему делать надо так. Реализация функции в файле "dva.с", ее прототип в файле "dva.h", а в файле "odin.c" есть строка:
Код
#include"dva.h"


После всего этого можно вызывать функцию.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 07:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Имена функции в вызове и реализации совпадают?

да.
Цитата
Упомянутые файлы в одной директроии?

в разных. продублировал так чтоб были в одной - не помоглло.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 18 2008, 09:10
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Jan 18 2008, 09:56) *
продублировал так чтоб были в одной - не помоглло.
Не принципиально. Давайте попробуем так: Копируете свой проект в новую папку. Удаляете все исходники кроме main.c, global.h, lcdconf.h, lcd.h, lcd.c. В main оставляете только
Код
void main()
{
     lcdInit();
}
в lcd.c оставляете
Код
void  lcdInit()
{
}
в lcd.h только
Код
extern void lcdInit();
Компилируете, если снова не собирается - вместе с файлами проекта (.aps, .aws) в .zip и сюда.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 11:29
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Копируете свой проект в новую папку. Удаляете все исходники кроме main.c, global.h, lcdconf.h, lcd.h, lcd.c. В main оставляете только

Благодарю! Все получилось. Даже подключились еще много других файлов. Огромное спасибо! А в чем секрет был?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 18 2008, 11:40
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Jan 18 2008, 13:29) *
А в чем секрет был?
Я не знаю. Я думал - вы узнаете. Попробуйте повторить фокус, удаляя лишнее постепенно smile.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 11:56
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Как-то странно. программа еще не написана (всего одна функция) а кода на 4k с ключом оптимизации -Оs. Что делать?

Цитата
Попробуйте повторить фокус, удаляя лишнее постепенно

хм. попробую.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 18 2008, 12:03
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Jan 18 2008, 13:56) *
Как-то странно. программа еще не написана (всего одна функция) а кода на 4k с ключом оптимизации -Оs. Что делать?
Паковать в .zip и выкладывать. Весь scmRTOS с примером приложения в варианте от ReAl компилится в 1К кода. А, есть мысль: в ключи компилятора добавьте -ffunction-sections -fdata-sections, а в ключи линкера - -Wl,--gc-sections -Wl,--relax
Если поможет, то описание тут.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 19:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
в ключи компилятора добавьте -ffunction-sections -fdata-sections, а в ключи линкера - -Wl,--gc-sections -Wl,--relax

Добавил. Код стал 1,5k и практически не зависит от режима оптимизации. -Os меньше -O1 аж на 16 байт.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 18 2008, 20:46
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Теперь осталось в вашем скрипте сделать KEEP() для сегмента, в котором располагаются вектора.


почти совсем непонятно.

возник другой вопрос.

вот код:

#include <avr/io.h>


int main(void)
{

lcdInit();

lcdGotoXY(2, 0);

lcdPrintData("Hello World!", 12);

lcdGotoXY(2, 1);

lcdPrintData("Hello World!", 12);

}

после программирования девайсом от PROTTOSSa сразу начинает работать правильно. стоит выключить и включить питание - пишет только верхнюю строчку. Что за чудеса? причем верхняя строчка к подсвечена как при включении LCD без конроллера, только питание и цепи контрасности.

Сообщение отредактировал smk - Jan 18 2008, 20:49


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 18 2008, 22:28
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Jan 18 2008, 22:46) *
почти совсем непонятно.
Это относилось к самописным скриптам. В скриптах из комплекта WinAVR это все уже сделано
Цитата(smk @ Jan 18 2008, 22:46) *
возник другой вопрос.

вот код:
....
Что за чудеса?
Это уже, похоже, не имеет отношения к компилятору. У вас не проходит инициализация дисплея. Судя по симптомам, не выдерживаете паузу от подачи питания до первой команды. Вставьте задержку миллисекунд 50-200 перед инициализацией.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 19 2008, 02:26
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Судя по симптомам, не выдерживаете паузу от подачи питания до первой команды.

Да. есть такое.

А как можно посмотреть какие функции включены в программу? 1,7к многовато (я думаю) )для кода:
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
_delay_ms(200);
lcdInit();
while(1)
{
lcdGotoXY(2, 0);
lcdPrintData("Hello World!", 12);
lcdGotoXY(2, 1);
lcdPrintData("Hello World!", 12);
}
}

Или нормально?
оптимизация -Os.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 11:07
Рейтинг@Mail.ru


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