Массив массивов структур - как-то так
- Войдите на сайт для отправки комментариев
Чт, 09/11/2017 - 22:56
Совсем я запутался, помогите пожалуйста - есть, предположим, девять каналов лед-свед. Каждый управляется четырьмя тайметами,с одинаковыми атрибутами. Я написал так:
struct timer { //таймер long start; long stop; byte level; }; struct ch { byte timers; timer Timer[4]; //четыре таймера на канал }; ch Channel[9]; // девять каналов по четыре таймера
Сдается, что-то я неправильно делаю, потому что при заполнении - чтении выходит каша. Не могу понять, массив структур Timer[4] в структуре Channel[0] тот же что и в Channel[1] - [...] или нет (как хотелось)? Заполняю так :
Channel[1].Timer[0].start = 34800;
Дык компилируеся оно,понятно! А если структуру заполнить и зеписать в еепром, а потом прочитать?
Дык компилируеся оно,понятно! А если структуру заполнить и зеписать в еепром, а потом прочитать?
так вы про указатели что-то знаете?
Дык компилируеся оно,понятно! А если структуру заполнить и зеписать в еепром, а потом прочитать?
если правильно записать и правильно прочитать... все будет ОК.
Опишите структуру как union с байтовым массивом и потом побайтно читайте - пишите.
Я пишу - читаю с помощью EEPROM2 она побайтно ,как мне кажется, и работает.
Да, доступ к элепентам структуры происходит по указателю, так написано. Покажите на примере как получить значение Channel[2].Timer[3].start. Прошу прощение за тупость!
Я пишу - читаю с помощью EEPROM2 она побайтно ,как мне кажется, и работает.
1. Хотелось бы на это посмотреть.
2. нафига искать сложностей? В шаттной (из коробки) библиотеке есот замечательные функции EEPROM.put EEPROM.get - там достаоточно написать
EEPROM.put(<адрес>, Channel)
И всё! Отлично запишется! Нахрена придумывать себе сложности, а потом геройски преодолевать?
Опишите структуру как union с байтовым массивом и потом побайтно читайте - пишите.
Всё уже написано до нас - https://www.arduino.cc/en/Reference/EEPROMPut
(собсна пишет любой тип от начала и размеров в его sizeof) есть такая же для чтения.
Еще вчера понял, EEPROM.put , EEPROM.get. Но таки Serial.print(Channel[2].Timer[3].start) пишет не то что туда записано
Еще вчера понял, EEPROM.put , EEPROM.get. Но таки Serial.print(Channel[2].Timer[3].start) пишет не то что туда записано
ну, давайте код. Как пишете, как читаете. Где-то лажанулись.
Еще вчера понял, EEPROM.put , EEPROM.get. Но таки Serial.print(Channel[2].Timer[3].start) пишет не то что туда записано
ну, давайте код. Как пишете, как читаете. Где-то лажанулись.
Да, и причем глупо. EEPROM.put писал со 139 адреса, а EEPROM.get читал с 0. Все работает (пока). Спасибо!
И слава Богу! С Победой!