Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 94
Зарегистрирован: Пт фев 14, 2014 20:45:33
Откуда: Северный Кавказ

Сообщение Amigosam »

Трабл был исключительно программный... Чутка не дописал в обработке прерывания.
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

Приветствую!!! Задача состоит в том,что в области EEPROM нужно разместить структуру, полями которой являются тоже структуры с двумя полями типа uint8.Зетем с помощью указателей уже работать с ними.
Но что-то делаю неверно и не могу понять.

Объявляю два новых типа структур:

Код: Выделить всё

typedef struct
{
	uint8_t Rashod;               
	uint8_t Temperatura;            
	
}Dannie_Mecyac;  

 typedef struct 
{
	Dannie_Mecyac Yanvar;
	Dannie_Mecyac Fevral;
	Dannie_Mecyac Mart;
	....
        Dannie_Mecyac Dekabr
}Mecyac ;
2. Определяю их

Код: Выделить всё

 
EEMEM Dannie_Mecyac GWS_Yanvar={0};
EEMEM Dannie_Mecyac GWS_Fevral={0};
EEMEM Dannie_Mecyac GWS_Mart={0};

EEMEM Mecyac GWS_Dannie={GWS_Yanvar,GWS_Fevral,GWS_Mart}; // на такую строчку компилятор ругается на какую то константу ссылается

Mecyac *PtrGWS_Dannie=&GWS_Dannie;
если написать просто

Код: Выделить всё

EEMEM Mecyac GWS_Dannie;
то компилятор молчит.

Проблемы:
1. Адреса полей,структур не совпадают с содержимым указателей на них...
2. Чет на подобную запись компил ошибку выдает.

Код: Выделить всё

GWS_Dannie.GWS_Yanvar.Rashod
Заранее благодарен!
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ROMan2947",url="/forum/viewtopic.php?p=3371923#p3371923"]компилятор ругается на какую то константу ссылается
...
2. Чет на подобную запись компил ошибку выдает.

Код: Выделить всё

GWS_Dannie.GWS_Yanvar.Rashod
...[/uquote]
да, сообщения компилятора особо не важны и вообще не несут полезной информации :facepalm:

по второму пункту - поле структуры не так называется.

ЗЫ а чего за контроллер?

ЗЗЫ [uquote="ROMan2947",url="/forum/viewtopic.php?p=3371923#p3371923"]1. Адреса полей,структур не совпадают с содержимым указателей на них...[/uquote]
каких указателей? у вас их ровно одна штука, на которую "компилятор ругается".
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3371987#p3371987"]ЗЫ а чего за контроллер?[/uquote]
Atmega16A

Добавлено after 6 minutes 50 seconds:
[uquote="arkhnchul",url="/forum/viewtopic.php?p=3371987#p3371987"]по второму пункту - поле структуры не так называется.[/uquote] посмотрел пару статей там так и обращаются, у меня вот так не катит, а как надо?

основная структура GWS_Dannie в ней поле структурного типа GWS_Yanvar в которой поле Rashod типа uint... и пишу так

Код: Выделить всё

GWS_Dannie.GWS_Yanvar.Rashod
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

честно говоря особо не помню чего там в атмегах, но имхо так вольно обращаться с EEPROM-ом не особо позволяется.

смотрите, что происходит по коду: вы объявляете, размещаете в EEPROM (утрированно) и инициализируете три структуры (GWS_Yanvar, GWS_Fevral, GWS_Mart). Затем объявляете, размещаете в EEPROM структуру Mecyac и заполняете три первые ее поля значениями соответствующих полей предыдущих структур. Это не имеет особого смысла.

Добавлено after 2 minutes 23 seconds:
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3372013#p3372013"]посмотрел пару статей там так и обращаются, у меня вот так не катит, а как надо?
основная структура GWS_Dannie в ней поле структурного типа GWS_Yanvar[/uquote]
имя поля - не то, что вы туда положили, а то, как объявили тип. В typedef-е у вас просто Yanvar, Fevral, Mart - вот это и есть имена полей.

и предупрежу сразу, что так работать с календарем чудовищно неудобно. Вместо годовой структуры сделайте массив.
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3371987#p3371987"]каких указателей? у вас их ровно одна штука, на которую "компилятор ругается".[/uquote]
вот во вложении часть кода и контрольные значения...
Вложения
2018-05-08_18-22-32.png
(107.71 КБ) 441 скачивание
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

судя по префиксу EEMEM, у вас WinAVR или другой вариант AVR-GCC. так вот, эти компиляторы напрямую с данными в EEPROM работать не умеют, соответственно, никаких указателей на данные в EEPROM быть не может со всеми вытекающими обращениями.
судя по названиям, вы выбрали крайне неудачный способ структурирования данных.
а главная проблема ваша в том, что первичная инициализация структур должна быть явной, т.е. в качестве данных для одной структуры нельзя указывать содержимое другой структуры.
то есть вам надо для GWS_Dannie использовать явную инициализацию {{0,0}, {1,1}, {2,2}, ... };
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3372027#p3372027"]Вместо годовой структуры сделайте массив.[/uquote]
Массив структур имеете ввиду? я думал про это, но пока на ознакомительном этапе решил так же оставить....
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ARV",url="/forum/viewtopic.php?p=3372032#p3372032"]в качестве данных для одной структуры нельзя указывать содержимое другой структуры[/uquote]
чойта? можно.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3372039#p3372039"][uquote="ARV",url="/forum/viewtopic.php?p=3372032#p3372032"]в качестве данных для одной структуры нельзя указывать содержимое другой структуры[/uquote]
чойта? можно.[/uquote]
см. выше - ROMan2947 пытался, не вышло.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

[uquote="ARV",url="/forum/viewtopic.php?p=3372032#p3372032"]эти компиляторы напрямую с данными в EEPROM работать не умеют[/uquote]
Вот этот момент мне не понятен, читал на форумах,что нужно подключить файл.... а что за файл как подключить не ясно..
[uquote="ARV",url="/forum/viewtopic.php?p=3372032#p3372032"]судя по названиям, вы выбрали крайне неудачный способ структурирования данных.[/uquote] по ходу названия меня и запутали...

Добавлено after 1 minute 22 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3372044#p3372044"]пытался, не вышло.[/uquote] может нужно сначала компилятор научить работать с EEPROM,после выйдет?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ROMan2947 писал(а):а что за файл как подключить не ясно..
нате вам здрасте! вы что, не делали в начале #include <avr/eeprom.h>?!
ROMan2947 писал(а):по ходу названия меня и запутали
дело не в названиях. судя по вашему коду, вам нужен массив структур, а не структура из 12 полей, каждое из которых тоже структура.

Добавлено after 42 seconds:
Но в любом случае при работе с EEPROM точечная нотация не прокатит, т.к. компилятор не умеет...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

ROMan2947 писал(а):Массив структур имеете ввиду?
или указателей на структуры.
[uquote="ARV",url="/forum/viewtopic.php?p=3372044#p3372044"]см. выше - ROMan2947 пытался, не вышло.[/uquote]
у него с EEPROM не вышло. А вообще вполне работает -
Спойлер

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef struct {
    uint8_t Rashod;
    uint8_t Temperatura;

} Dannie_Mecyac;

typedef struct {
    Dannie_Mecyac Yanvar;
    Dannie_Mecyac Fevral;
    Dannie_Mecyac Mart;
    Dannie_Mecyac Dekabr;
} Mecyac;

int main(int argc, char *argv[]) {
    Dannie_Mecyac GWS_Yanvar={10,20};
    Dannie_Mecyac GWS_Fevral={0};
    Dannie_Mecyac GWS_Mart={11,5};

    Mecyac GWS_Dannie={GWS_Yanvar,GWS_Fevral,GWS_Mart}; // на такую строчку компилятор ругается на какую то константу ссылается

    Mecyac *PtrGWS_Dannie=&GWS_Dannie;

    printf("%d %d\n",GWS_Dannie.Yanvar.Rashod, PtrGWS_Dannie->Mart.Temperatura);
}
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

[uquote="ARV",url="/forum/viewtopic.php?p=3372054#p3372054"]#include <avr/eeprom.h>?![/uquote]делал...

[uquote="ARV",url="/forum/viewtopic.php?p=3372054#p3372054"]вам нужен массив структур[/uquote]придется переписать :?

[uquote="ARV",url="/forum/viewtopic.php?p=3372054#p3372054"]при работе с EEPROM точечная нотация не прокатит[/uquote]это связано только с работой с EEPROM? точечная не идет а стрелочная как себя поведет?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

стрелочная точно так же не пойдет: не умеет AVR-GCC работать так с EEPROM. при помощи функций eeprom_read_byte, eeprom_read_word, eeprom_read_dwod и eeprom_read_block (аналогично и для write) вы должны будете ручками считывать данные из EEPROM в переменную в обычном ОЗУ, и уже с нею работать, как принято.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ROMan2947",url="/forum/viewtopic.php?p=3372064#p3372064"]это связано только с работой с EEPROM? точечная не идет а стрелочная как себя поведет?[/uquote]
точки для непосредственных значений, стрелки - для указателей. С EEPROM-ом не связано, что положите туда - с тем и работайте.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

arkhnchul писал(а):С EEPROM-ом не связано
как раз связано: ни точечная, ни стрелочная нотация не будет работать с описанными в EEPROM переменными и указателями на них.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3372073#p3372073"]точки для непосредственных значений, стрелки - для указателей.[/uquote] ну по поводу этого я в курсе,я и имел ввиду может при использовании указателей можно будет работать с EEPROM...оказалось нет...

Добавлено after 1 minute 9 seconds:
Спасибо Вам, суть понял, буду разбираться :beer:

Добавлено after 4 minutes 5 seconds:
Частенько начал сталкиваться с возможность и не возможностью компилятора, что нужно лопатить для изучения компилятора именно AVR-GCC.документация может или книга,где подробно описывалось бы как он работает и хотелось бы на русском....?
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ARV",url="/forum/viewtopic.php?p=3372075#p3372075"]ни точечная, ни стрелочная нотация не будет работать с описанными в EEPROM переменными и указателями на них.[/uquote]
да, извиняюсь, забыл, как оно там в AVR. Привык к stm-ам)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ROMan2947 писал(а):что нужно лопатить для изучения компилятора именно AVR-GCC.документация может или книга,где подробно описывалось бы как он работает и хотелось бы на русском....?
вот мои скромные потуги: https://simple-devices.ru/articles/7-so ... avr-studio
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

Вернуться в «Разные вопросы по МК»