|
WinAVR2007 & AVR Studio 4.13, возможно глупый вопрос, но очень важный |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jan 18 2008, 07:47
|

Местный
  
Группа: Свой
Сообщений: 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" После всего этого можно вызывать функцию.
|
|
|
|
|
Jan 18 2008, 07:56
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата Имена функции в вызове и реализации совпадают? да. Цитата Упомянутые файлы в одной директроии? в разных. продублировал так чтоб были в одной - не помоглло.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Jan 18 2008, 09:10
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jan 18 2008, 11:56
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Как-то странно. программа еще не написана (всего одна функция) а кода на 4k с ключом оптимизации -Оs. Что делать? Цитата Попробуйте повторить фокус, удаляя лишнее постепенно хм. попробую.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Jan 18 2008, 12:03
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jan 18 2008, 20:46
|
Гуру
     
Группа: Свой
Сообщений: 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
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Jan 18 2008, 22:28
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jan 19 2008, 02:26
|
Гуру
     
Группа: Свой
Сообщений: 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.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|