массив базового класса, заполненный производным классом (arduino :: ESP2866) - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь заполнить базовый класс производными классами. Я смог заполнить объект, но когда я попытался получить к нему доступ, мой ESP перезапустился. Эта строка вызывает сброс:

tBuf = IOs[i]->printState() ;   //  ESP2866 wdt reset!

Но я думаю, что, скорее всего, ошиблись с населением:

GPIO_NONE *IOs[PIN_NUMBER];
GPIO_NONE temp_GPIO = GPIO_NONE();
temp_GPIO.setPin(PINS[i],i);
IOs[i]= &temp_GPIO;

К сожалению, я не могу понять, где я допустил ошибку.

вот соответствующая часть:

//Class.h
class GPIO_NONE
{
  protected:
    uint8_t         pin;
    uint8_t         pin_gpio_number;
  public:
        virtual void setPin(uint8_t _pin, uint8_t _pin_gpio_number);
    virtual String printState();
};

class GPIO_IN : public GPIO_NONE
{
  protected:

  public:
        virtual void setPin(uint8_t _pin, uint8_t _pin_gpio_number);
    virtual String printState();

};

//Class.ccp
void GPIO_NONE::setPin(uint8_t _pin, uint8_t _pin_gpio_number)
{
  pinMode(pin, OUTPUT);
  pin = _pin;
  pin_gpio_number = _pin_gpio_number;

  //Pclient.publish("sensor/Dx", "none", true); 
}

String GPIO_NONE::printState()
{
  String buf = "NONE GPIO";
  Serial.println(buf);
  buf =+ pin_gpio_number;
  Serial.println(buf);
  Serial.println(buf);
  return ( buf );
}

void GPIO_IN::setPin(uint8_t _pin, uint8_t _pin_gpio_number)
{
  pinMode(pin, INPUT);
  pin = _pin;
  pin_gpio_number = _pin_gpio_number;
  //Pclient.subscribe("homeassistant/switch1");
}

String GPIO_IN::printState()
{
  String buf = "IN GPIO";
  buf =+ pin_gpio_number;
  buf =+ " ";
  buf =+ digitalRead(pin);
  Serial.println(buf);
  return ( buf );
}

//Initialization of a object array with a derived objects:
void add_io_none(int i){
    GPIO_NONE temp_GPIO = GPIO_NONE();
    temp_GPIO.setPin(PINS[i],i);
    IOs[i]= &temp_GPIO;
}  
void add_io_in(int i){
    GPIO_IN temp_GPIO = GPIO_IN();
    temp_GPIO.setPin(PINS[i],i);
    IOs[i]= & temp_GPIO;
}

//Printing out the status of the object array ()
String printGPIO(int arg_cnt, char **args)
{
  String buf = "";
  String tBuf;
  for(uint8_t i=0; i<PIN_NUMBER; i++){
    Serial.println(i);
    tBuf = IOs[i]->printState() ;   //  ESP2866 wdt reset!
    buf+=tBuf;
    Serial.println(buf);
  }
  return ( buf );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...