pinmanager bugfix for -S2/-S3

pinmanager ran out out array bounds on -S2 and -S3, as these MCUs have more than 40 GPIO. As consequence, memory was overwriten, and pins > 39 were reported as "allocated" but not "owned".

Thisfixes the problem, by extending internal arrays so that up to 50 pins can be managed.
This commit is contained in:
Frank 2022-12-02 20:08:11 +01:00
parent 643f300792
commit 33f4e8cf73

View File

@ -69,9 +69,9 @@ class PinManagerClass {
uint8_t pinAlloc[3] = {0x00, 0x00, 0x00}; //24bit, 1 bit per pin, we use first 17bits uint8_t pinAlloc[3] = {0x00, 0x00, 0x00}; //24bit, 1 bit per pin, we use first 17bits
PinOwner ownerTag[17] = { PinOwner::None }; PinOwner ownerTag[17] = { PinOwner::None };
#else #else
uint8_t pinAlloc[5] = {0x00, 0x00, 0x00, 0x00, 0x00}; //40bit, 1 bit per pin, we use all bits uint8_t pinAlloc[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 56bit, 1 bit per pin, we use 50 bits on ESP32-S3
uint8_t ledcAlloc[2] = {0x00, 0x00}; //16 LEDC channels uint8_t ledcAlloc[2] = {0x00, 0x00}; //16 LEDC channels
PinOwner ownerTag[40] = { PinOwner::None }; PinOwner ownerTag[50] = { PinOwner::None }; // new MCU's have up to 50 GPIO
#endif #endif
struct { struct {
uint8_t i2cAllocCount : 4; // allow multiple allocation of I2C bus pins but keep track of allocations uint8_t i2cAllocCount : 4; // allow multiple allocation of I2C bus pins but keep track of allocations