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

 
 
 
Reply to this topicStart new topic
> atmega88pa в AVRstudio 6, Ошибка
max_mart
сообщение May 2 2012, 16:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Всем привет.
Народ, подскажите, пожалуйста, что за ошибка все время вылазит, когда подключаю внешнюю библиотеку? И как с ней бороться?


Error 7 multiple definition of `SPI_Write_Reg' G:\JETTER_project\radio_module\hope_rf\transmitter\transmitter\transmitter\Debug/.././RFM70_init.c 108 1 transmitter

Error 8 multiple definition of `SPI_Read_Reg' G:\JETTER_project\radio_module\hope_rf\transmitter\transmitter\transmitter\Debug/.././RFM70_init.c 125 1 transmitter

и так далее!!!
Просто кошмар каой-то!!! maniac.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 2 2012, 17:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



А вы библиотеку как подключаете?
Код
#include "RFM70_init.c"

Не так случайно?

Сообщение отредактировал IgorKossak - May 3 2012, 07:07
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
max_mart
сообщение May 2 2012, 17:34
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



да

Сообщение отредактировал IgorKossak - May 3 2012, 07:07
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 2 2012, 17:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ May 2 2012, 20:34) *
да

И что вы тогда хотите?
Всё верно говорит компилятор.
Нужно так:
Код
#include "RFM70_init.h"
Go to the top of the page
 
+Quote Post
max_mart
сообщение May 2 2012, 18:50
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



А почему так, интересно???!!! Ведь в 4 версии можно было так делать и в кодвизионе тоже!!!??? wacko.gif

Сделал. Все заработало. Спасибо Но все равно вопрос написанный выше актуален!!! Почуму????

И раз уж мы про авр студио 6, то подскажите пожалуйста как мне дать ему понять, что я исп. 8000000 МГ, Поскольку применяю задержки?

ВСЕ Решил проблему, как Вы и сказали!!! biggrin.gif

Но вопрос написанный выше все равно актуален!!!

И раз уж мы в АВР студио 6, то как мне задать частоту,например 8000000 Гц, компилятору для работу со своими задержками и поменять ,например метод компилирования(пл размеру, по скорости)?

Сообщение отредактировал IgorKossak - May 3 2012, 07:08
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 2 2012, 19:22
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ May 2 2012, 21:50) *
Ведь в 4 версии можно было так делать и в кодвизионе тоже!!!??? wacko.gif

И здесь тоже можно так делать.
Но не нужно и вредно.

Цитата(max_mart @ May 2 2012, 21:50) *
И раз уж мы про авр студио 6, то подскажите пожалуйста как мне дать ему понять, что я исп. 8000000 МГ, Поскольку применяю задержки?

Возможны варианты:
Используется makefile:
Код
CFLAGS    += -DFREQUENCY=8000000

Могу ошибаться, но как-то так.
Используется свойства проекта (меню Project\Properties).
Тогда выбрать Toolchain\AVR GNU C compiler\Symbols
добавить что-то вроде
Код
FREQUENCY=8000000

Использовать глобальную константу можно так:
Код
uint32_t freq=FREQUENCY;


Цитата(max_mart @ May 2 2012, 21:50) *
поменять ,например метод компилирования(пл размеру, по скорости)?

Тип оптимизации можно выбрать там же Toolchain\AVR GNU C compiler\Optimization


Цитата(max_mart @ May 2 2012, 21:50) *
А почему так, интересно???!!! Ведь в 4 версии можно было так делать и в кодвизионе тоже!!!??? wacko.gif

Попробую объяснить.
пусть есть файл file.c в нём определена функция Myfunc:
Код
void Myfunc(void)
{
// ....
}

#include "file.c" - это, по простому говоря, просто вставка текста.
К примеру, в проекте два файла src1.с и src2.c, оба содержат #include "file.c".
в итоге получается что функция Myfunc определена в двух файлах. Это есть ошибка: непонятно какую из них линковать. Как-то так.

Чтобы ошибки не было создаётся файл file.h:
Код
#ifndef FILE1_H_
#define FILE1_H_

void Myfunc(void);

#endif /* FILE1_H_*/


и в src1.с и src2.c добавляется #include "file.h".
Либо можно просто перед использованием Myfunc написать в src1.с и src2.c:
Код
void Myfunc(void);

Go to the top of the page
 
+Quote Post
max_mart
сообщение May 2 2012, 20:52
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Спасибо большое!!! Теперь стало ясно!!!

Т.е мне просто достаточно добавить в symbols строку:
FREQUENCY=8000000?

И все будит работать как надо?

Да и в какой symbols: defined or undefined?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 2 2012, 21:05
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ May 2 2012, 23:52) *
Т.е мне просто достаточно добавить в symbols строку:
FREQUENCY=8000000?
И все будит работать как надо?

Должно работать.
Нужно только выбрать правильный symbols: mfv их два - GNU C и GNU C++.

Цитата(max_mart @ May 2 2012, 23:52) *
Да и в какой symbols: defined or undefined?

В defined, конечно, undefined - отменяет уже определённые.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 2 2012, 23:21
Сообщение #9


Гуру
******

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



QUOTE (max_mart @ May 2 2012, 23:52) *
Т.е мне просто достаточно добавить в symbols строку:
FREQUENCY=8000000?

И все будит работать как надо?
будЕт, только не FREQUENCY, а F_CPU


--------------------
На любой вопрос даю любой ответ
"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
hd44780
сообщение May 3 2012, 03:57
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(max_mart @ May 2 2012, 20:34) *
да


Это неправильно. Не по стандарту Си.
Некоторые компиляторы это понимают, некоторые нет. Лучше так никогда не делайте.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
max_mart
сообщение May 3 2012, 06:38
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Всем спасибо большое. Учту на будущее по работе с инклудами.

По поводу частоты все правильно, надо делать так:

#define F_CPU 8000000UL- так было написано в библиотеки delay.h и надо определять частоту перед инклудом самой библиотеки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 3 2012, 07:59
Сообщение #12


Гуру
******

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



QUOTE (max_mart @ May 3 2012, 09:38) *
перед инклудом самой библиотеки.
В каждом файле, где вы хотите использовать задержку? А потом задумаете поменять кварц на более быстрый и будете искать по всем исходникам эту магическую строчку чтобы заменить? И обязательно в каком-нибудь файле забудете и начнете удивляться чудесам в уже работавшей программе? Специально для таких случаев этот символ определяется в одном месте - в оболочке или makefile и будет передан компилятором автоматически в каждый файл.


--------------------
На любой вопрос даю любой ответ
"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
_Артём_
сообщение May 3 2012, 13:12
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(hd44780 @ May 3 2012, 06:57) *
Это неправильно. Не по стандарту Си.
Некоторые компиляторы это понимают, некоторые нет. Лучше так никогда не делайте.

Не в стандарте дело - просто способ кривой.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:21
Рейтинг@Mail.ru


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