Ошибка при компиляции: '...' does not name a type

beve
Offline
Зарегистрирован: 15.07.2015
#include <EEPROM.h>

// чтение
int EEPROM_int_read(int addr) {    
  byte raw[2];
  for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
  int &num = (int&)raw;
  return num;
}
int cycleTimer = 0;
cycleTimer = EEPROM_int_read(0); 

void setup(){
}
void loop(){
}

Уже больше часа потратил на размышление и поиск решения, почему при компиляции этого наглядного примера скетча, что выше, появляется ошибка: 'cycleTimer' does not name a type. Уже решил использовать EEPROM.get, но все таки хочу понять, почему в объявленную ранее переменную не может идти запись?

Вот в этом примере ошибок не возникает:

#include <EEPROM.h>

// чтение
int EEPROM_int_read(int addr) {    
  byte raw[2];
  for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
  int &num = (int&)raw;
  return num;
}
int cycleTimer = EEPROM_int_read(0);

void setup(){
}
void loop(){
}
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
#include <EEPROM.h>

// чтение
int EEPROM_int_read(int addr) {    
  byte raw[2];
  for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
  int &num = (int&)raw;
  return num;
}
int cycleTimer = 0;
//  cycleTimer = EEPROM_int_read(0);  //ставить надо не сюда

void setup(){
cycleTimer = EEPROM_int_read(0);  //ставить надо  сюда
}
void loop(){
cycleTimer = EEPROM_int_read(0); //или ставить надо сюда
}

 

beve
Offline
Зарегистрирован: 15.07.2015

Попробовал читать с EEPROM внутри функции setup() - ошибок при компиляции нет. Выходит так и задумано кем то...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

beve пишет:

Попробовал читать с EEPROM внутри функции setup() - ошибок при компиляции нет. Выходит так и задумано кем то...

Ну да. Теми кто проектировал язык Си

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Или сюда

#include <EEPROM.h>

// чтение
int EEPROM_int_read(int addr) {    
  byte raw[2];
  for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
  int &num = (int&)raw;
  return num;
}
int cycleTimer = 0;
//  cycleTimer = EEPROM_int_read(0);  //ставить надо не сюда

void setup(){
}
void loop(){
cycleTimer = EEPROM_int_read(0);  //или сюда - в зависимости от необходимого действия

}

 

beve
Offline
Зарегистрирован: 15.07.2015

Спасибо за ответ, пока отписывался, вы уже ответили. Вопрос решен.

nik182
Offline
Зарегистрирован: 04.05.2015

Разница в записях в том, что строка cycleTimer = EEPROM_int_read(0); это попытка выполнения команды вне процедуры - это ошибка, внутри setup процедуры - нет ошибки. Во втором int cycleTimer = EEPROM_int_read(0); случае это объявление переменной и присвоение ей адреса подпрограммы- вполне нормальное объявление, только не надо ожидать что подпрограмма при этом будет выполнена.