Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.03.2018, 14:17  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 113
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию <avr/eeprom.h>

Пытаюсь работать с EEPROM в Atmel Studio 7.

Если подключаю библиотеку и объявляю переменные в main.c :
Код:
//--------------------------------------------------------------

#include "main.h"
//—————————————-
#include ‹avr/eeprom.h›
uint16_t freq1e EEMEM = 500; uint16_t p_lene EEMEM = 1000; uint16_t freq2e EEMEM = 5000;
//----------------------------------------------------------------------
//—————————————-
void port_ini(void)
{
	PORTD=0b00000011;
 	 DDRD=0b11111100;
	PORTC=0b00111100;
	 DDRC=0b00000000; 
}
//—————————————-
//==================================================  ===========
int main(void)
{
	
	//==================================================  ===========
	port_ini(); //Инициализируем порты
	LCD_ini(); //Инициализируем дисплей
	clearlcd();//очистим дисплей
То работает, но не видит функции чтения/записи из других файлов. Только в main.c.

Если делаю подключение/объявление в main.h :
Код:
#ifndef MAIN_H_
#define MAIN_H_
//==================================================  ===========
#define F_CPU 8000000UL
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹util/delay.h›
#include ‹stdio.h›
#include ‹stdlib.h›
#include ‹avr/eeprom.h›
uint16_t freq1e EEMEM = 500; uint16_t p_lene EEMEM = 1000; uint16_t freq2e EEMEM = 5000;

//--------------------------------------
#include "lcd.h"
#include "timers.h"
#include "adc.h"
#include "encoders.h"
#include "eeprom.h"
//-------------------------------------------------------------
#define e1 PORTD|=0b00001000 // установка линии E в 1
#define e0 PORTD&=0b11110111 // установка линии E в 0
#define rs1 PORTD|=0b00000100 // установка линии RS в 1 (данные)
#define rs0 PORTD&=0b11111011 // установка линии RS в 0 (команда)
//-------------------------------------------------------------------

int EncValue11; int EncValue2; int EncValue3;
uint16_t freq1;
uint16_t p_len;
uint16_t freq2;
То ругается : multiple definition of `freq1e' .



Какой "multiple" ?
В обоих случаях один раз.
Там ещё куча переменных, они не "multiple".
Что не так?
Реклама:
DPANYTA вне форума  
Непрочитано 02.03.2018, 14:49  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от DPANYTA Посмотреть сообщение
Какой "multiple" ?
В обоих случаях один раз.
Там ещё куча переменных, они не "multiple".
Что не так?
Есть магическое слово extern. Но вы его нигде не используете. Разберитесь с ним.
Bill вне форума  
Непрочитано 02.03.2018, 15:02  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

У меня нет седьмой студии, но переменные в eeprom я не так объявляю.
У меня объявлены вот так:
PHP код:
uint16_t    EEMEM SPEED1;    //рецепт позиции 1 в eeprom
uint16_t    EEMEM SPEED2;    //поз. 2
uint16_t    EEMEM SPEED3;    //поз. 3 
И все работает.
И еще. На прямую в них, через =, записать нельзя. Только через функции записи.

Последний раз редактировалось МВА; 02.03.2018 в 15:11.
МВА вне форума  
Непрочитано 02.03.2018, 15:11  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от Bill Посмотреть сообщение
Есть магическое слово extern. Но вы его нигде не используете. Разберитесь с ним.
Применение extern считается плохим тоном. Оно может вести куда угодно и потом вы и сами потеряетесь, откуда оно тянет функцию. Это очень порочный способ программирования.
Easyrider83 вне форума  
Непрочитано 02.03.2018, 15:17  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от Easyrider83 Посмотреть сообщение
Применение extern считается плохим тоном. Оно может вести куда угодно и потом вы и сами потеряетесь, откуда оно тянет функцию. Это очень порочный способ программирования.
С чего это вы взяли?
Bill вне форума  
Непрочитано 02.03.2018, 17:50  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 113
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Пробовал и uint16_t EEMEM SPEED1;
пробовал и uint16_t SPEED1 EEMEM ;

Без разницы.

Добавление магического слова extern привело к ошибке:
undefined reference to `freq2e'

Остальные переменные обходятся же без магии...
DPANYTA вне форума  
Непрочитано 03.03.2018, 06:44  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от DPANYTA Посмотреть сообщение
Добавление магического слова extern привело к ошибке:
undefined reference to `freq2e'
Еще раз: разберитесь с extern, где и как его использовать.
Bill вне форума  
Непрочитано 03.03.2018, 07:40  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,839
Сказал спасибо: 2,530
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от DPANYTA Посмотреть сообщение
Какой "multiple" ?
...
Что не так?
Вы привели только два файла. А ведь есть еще Ваши файлы. А там какие инклюды? Да и в приведенных инклюды кастрировали.
Разберитесь со смыслом инклюдов, как работает этот механизм. Да и с экстерном тоже разобраться не мешает - что это и дляназачем. Про дурной тон - это вопрос религиозный.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме  
Непрочитано 03.03.2018, 08:43  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 401
Сказали Спасибо 2,212 раз(а) в 1,311 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от Bill Посмотреть сообщение
С чего это вы взяли?
дак вот с того и взято, что ладно бы, если по имени переменной/функции вы можете вспомнить, в какой файл вы положили ее реальное описание... а если нет? Вот и представьте себе, что вы скопипастили текст в другой проект, а в тексте - extern, да еще и штук 10. Вам надо методом тыка найти каждый файл с реальным описанием. Нормальные ПО разработки конечно по щелчку на имени приведут к исходному тексту, но если вы просто из "блокнота" копируете?
Это один момент. Второй момент - вам не ясна структура связей проекта, что куда и откуда завязывается и на что ссылается.
Отсюда и получаются непонятки с "красными карточками".

А "multiple definion" - это "двойное определение", чаще всего получается из-за повторного подключения одного и того же заголовочника. Каждый заголовочник должен иметь "предохранитель" от повторного подключения в виде
#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H
....
текст заголовочника
....
#endif

И еще. В первом сообщении в коде: что это такое
#include "main.h"
//—————————————-
#include

почему пустой инклюд?

Чтобы правильно подключать функции из других файлов, не используя extern, надо делать так:
Пишем файл my_file.c и в пару к нему my_file.h
В файле my_file.c пишем тексты функций, например

void MyFunct (int param)
{
... текст функции....
}

а в файле my_file.h пишем
void MyFunct (int param);

После этого в main.c вверху пишем
#include my_file.h

и далее в тексте спокойно уже вызываем нашу функцию
...
MyFunct(215);
...

Вот так, все корректно и красиво, наглядно видно, откуда пришла функция, и без всяких extern

Последний раз редактировалось NewWriter; 03.03.2018 в 08:56.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
mikhail09p (03.03.2018)
Непрочитано 03.03.2018, 09:37  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,839
Сказал спасибо: 2,530
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от NewWriter Посмотреть сообщение
Пишем файл my_file.c и в пару к нему my_file.h
В файле my_file.c пишем тексты функций
Но тут есть один маленький деталь. У меня маленькая кучка файлов с необходимыми функциями, а не один. Что - копипастить их в один?!
Просто я их собираю в "myf.h", а этот уже в main. И экстернов не боюсь, в каждом хидере с экстернами есть предупреждающее описание. И никаких непоняток и фобий.

Сообщение от NewWriter Посмотреть сообщение
А "multiple definion" - это "двойное определение"
Если уж быть точным, то "множественное".
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме  
Сказали "Спасибо" akegor
FoxikM (03.03.2018)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot