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

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

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

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

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

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


 
Опции темы

<avr/eeprom.h>

Непрочитано 02.03.2018, 14:17  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 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.RUN
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

Сообщение от DPANYTA Посмотреть сообщение
Какой "multiple" ?
В обоих случаях один раз.
Там ещё куча переменных, они не "multiple".
Что не так?
Есть магическое слово extern. Но вы его нигде не используете. Разберитесь с ним.
Bill вне форума  
Непрочитано 02.03.2018, 15:02  
МВА
Гражданин KAZUS.RUN
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 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,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

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

Сообщение от Easyrider83 Посмотреть сообщение
Применение extern считается плохим тоном. Оно может вести куда угодно и потом вы и сами потеряетесь, откуда оно тянет функцию. Это очень порочный способ программирования.
С чего это вы взяли?
Bill вне форума  
Непрочитано 02.03.2018, 17:50  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 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.RUN
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: <avr/eeprom.h>

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

Сообщение от DPANYTA Посмотреть сообщение
Какой "multiple" ?
...
Что не так?
Вы привели только два файла. А ведь есть еще Ваши файлы. А там какие инклюды? Да и в приведенных инклюды кастрировали.
Разберитесь со смыслом инклюдов, как работает этот механизм. Да и с экстерном тоже разобраться не мешает - что это и дляназачем. Про дурной тон - это вопрос религиозный.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 03.03.2018, 08:43  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
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
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
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, время: 16:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.