• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Непонятное поведение переменных

mishgan

Member
Есть достаточно большой скетч с кучей переменных
работал до сегоднешнего дня правильно без глюков
сегодня начались странные глюки с переменными

Код:
#include <EEPROM.h>
int st[15];
byte dm[3];
....
void setup() {
Serial.begin(9600);
EEPROM.begin (101);
st[0] = EEPROM.read(0);
...
Serial.println(st[0]); //1й
for(byte j = 1; j <=3 ; j++)  {
dm[j] = EEPROM.read(j+21); delay(4);
}
Serial.println(st[0]); //2й
....
EEPROM.end();
}
в нулевой ячейке EEPROM записан 0. В каждой ячейке 22,23,24 записана цифра 100. Первый Serial.println(st[0]); выведет как положено 0. Второй Serial.println(st[0]); выведет 100. Весь мозг съел... Не пойму в чем проблема. Помогите добрые люди...
 
Последнее редактирование:

AndrF

Active member
Индексация массива начинается с 0. По крайней мере с массивом dm[3] вы уже работаете неправильно.
 

Юрий Ботов

Moderator
Команда форума
Ответа не знаю.. НО st у вас массив INT (двухбайтовый) а eeprom.read возвращает однобайтовое ЗНАЧЕНИЕ а никак не массив. Что означает ваше троеточие после этой команды - я не в курсе. К тому же длина st у вас 15 а в dm вы читаете с 21... Ввиду полного бардака просьба ПОДРОБНО описать а чего вы собственно от кода хотите и выложить код без купюр в виде троеточий (явки и пароли выкладывать не обязательно)
 

mishgan

Member
Сам ничего не понял... изменил тип некоторых переменных с byte на int и все заработало нормально.
 

CodeNameHawk

Moderator
Команда форума
У вас все просто, выход за пределы массива.
Массив у вас byte dm[3]; возможные его элементы dm[0], dm[1], dm[2], а вы записываете в элемент dm[3], которого нету.
 
Сверху Снизу