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). ![]()
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. ![]()
Nel caso della libreria specifica ... senza impazzire con tante modifiche ... basta un banale cast ![]()
Guglielmo