- Отформатировать мои функции чтения/записи I2C так, чтобы они действовали на ссылочные входные данные и возвращали логическое значение для использования. для обработки ошибок.
- Используйте перечисления в коде драйвера, чтобы избежать магических чисел.
Когда я пытаюсь прочитать регистр устройства в переменную, объявленную как одну из enum-типы, я получаю несколько разновидностей ошибок о невозможности преобразования между перечислениями и другими типами. Я думаю, что смогу заставить его работать с reinterpret_cast, но у меня сложилось впечатление, что этого следует избегать, когда это возможно.
Я сжал свою реальную программу в репрезентативный пример, показанный ниже.
#include
#include
// i2cCommunication.h GENERIC I2C COMMUNICATION FILE
// This function is part of a generic library that cannot see the enum definition
bool read(uint8_t& input_ref)
{
if(!true) // This would be where you write the device address to the I2C bus and see if it was acknowledged
{
return false;
}
input_ref = 0b01; // This would be where you actually read from the device
return true; // This bool would be set by a separate function that reports read status
}
// driver.h DEVICE DRIVER FILE
// #include "i2cCommunication.h"
// This enum is defined in a header for a device "driver"
enum GainLevel
{
GAIN1 = 0b00,
GAIN2 = 0b01
};
GainLevel gain = GAIN1;
bool updateGainLevel()
{
if(read(static_cast(gain)))
{
std::cout
Подробнее здесь: https://stackoverflow.com/questions/783 ... ences-as-a