in a fixed size array with an unitialized union type a uint64_t value can have a default value

This commit is contained in:
Marcel Alburg 2022-08-16 22:33:19 +02:00
parent 04db808920
commit 9073d2a82c
2 changed files with 4 additions and 1 deletions

View file

@ -80,6 +80,7 @@ class Inverter {
RECORDTYPE *record; // pointer for values
uint16_t chMaxPwr[4]; // maximum power of the modules (Wp)
char chName[4][MAX_NAME_LENGTH]; // human readable name for channel
bool initialized; // needed to check if the inverter was correctly added (ESP32 specific - union types are never null)
Inverter() {
ts = 0;
@ -87,6 +88,7 @@ class Inverter {
powerLimit[1] = 0x0000; //
devControlRequest = false;
devControlCmd = 0xff;
initialized = false;
}
~Inverter() {
@ -101,6 +103,7 @@ class Inverter {
memset(name, 0, MAX_NAME_LENGTH);
memset(chName, 0, MAX_NAME_LENGTH * 4);
memset(record, 0, sizeof(RECORDTYPE) * listLen);
initialized = true;
}
uint8_t getPosByChFld(uint8_t channel, uint8_t fieldId) {

View file

@ -91,7 +91,7 @@ class HmSystem {
INVERTERTYPE *getInverterByPos(uint8_t pos, bool check = true) {
DPRINTLN(DBG_VERBOSE, F("hmSystem.h:getInverterByPos"));
if((mInverter[pos].serial.u64 != 0ULL) || false == check)
if((mInverter[pos].initialized && mInverter[pos].serial.u64 != 0ULL) || false == check)
return &mInverter[pos];
else
return NULL;