Kalombyr
@Kalombyr

Почему так используется приведение типов?

Доброго дня!
Пытаюсь адаптировать библиотеку от Arduino к Raspberry PI (c++ WiringPI)
К примеру, есть такая функция (Arduino):
int16_t ina219GetShuntVoltage(void)
{
  uint16_t value;
  ina219Read16(INA219_REG_SHUNTVOLTAGE, &value);
  return value;
}

Как видите, функция возвращает тип int16_t, внутри функции результат сначала записывается в uint16_t,
код ina219Read16
static void ina219Read16(uint8_t reg, uint16_t *value)
{
  // Clear write buffers
  uint32_t i;
  for ( i = 0; i < I2C_BUFSIZE; i++ )
  {
    I2CMasterBuffer[i] = 0x00;
  }

  I2CWriteLength = 2;
  I2CReadLength = 2;
  I2CMasterBuffer[0] = INA219_ADDRESS;            // I2C device address
  I2CMasterBuffer[1] = reg;                       // Command register
  // Append address w/read bit
  I2CMasterBuffer[2] = INA219_ADDRESS | INA219_READ;  
  i2cEngine();

  // Shift values to create properly formed integer
  *value = ((I2CSlaveBuffer[0] << 8) | I2CSlaveBuffer[1]);
}


Тупо делаю у себя так:
int16_t ina219GetShuntVoltage(void)
{
   uint16_t value = wiringPiI2CReadReg16(node->fd, INA219_REG_SHUNTVOLTAGE);
   return (int16_t)value;
}


Заголовочник wiringPiI2CReadReg16:
int wiringPiI2CReadReg16 (int fd, int reg)

Проблема в том, что делаю я это "тупо" копируя.
Ведь размеры типов в Arduino отличаются.

В общем, мне бы понять, почему сделано так, что результат сначала из uint16_t загоняют в int16_t и как мне сделать правильно, если у меня результат приходит в int.
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
почему сделано так

INA219 Zerø-Drift, Bidirectional Current/Power Mon...
8.6 Register Maps
    8.6.3 Data Output Registers
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы