Probabile BUG del compilatore ...

Nel .cpp della libreria troviamo :

uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop)
{
  // clamp to buffer length
  if(quantity > BUFFER_LENGTH){
    quantity = BUFFER_LENGTH;
  }
  // perform blocking read into buffer
  uint8_t read = twi_readFrom(address, rxBuffer, quantity, sendStop);
  // set rx buffer iterator vars
  rxBufferIndex = 0;
  rxBufferLength = read;

  return read;
}

uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity)
{
  return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true);
}

uint8_t TwoWire::requestFrom(int address, int quantity)
{
  return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true);
}

uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop)
{
  return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)sendStop);
}

... ovvero due casi per due parametri e due casi per tre parametri, mancano i casi incrociati (unit8_t, int) e (int, uint8_t), quindi, volendo è facile aggiungerli.

E' anche chiaramente visibile che, comunque vengano scelti, alla fine sempre a uint8_t vengono portati, qualunque caso si sceglie (... e ci mancherebbe altro). :slight_smile:

Comunque, lo scopo del thread era un altro ... mostrare il comportamento di una versione di gcc rispetto alla versione successiva e mettere quindi in guardia sul tipo di problematica. :roll_eyes:

Nel caso della libreria specifica ... senza impazzire con tante modifiche ... basta un banale cast :grin:

Guglielmo