"error # 28: la expresión debe tener un valor constante" - con nRF51822 app_twi

0

He estado intentando copiar el ejemplo de app_twi nRF51822 para la aplicación propia a fin de comprender mejor cómo funciona la HAL.

Sin embargo, ahora tengo un error ahora que no entiendo ya que mi código es básicamente idéntico al ejemplo.

El error:

src\main.c(170): error:  #28: expression must have a constant value

Esa función donde se produce el error:

void LSM303_read(uint8_t *m_buffer)
{
    static app_twi_transfer_t const transfers[] =
    {
        LSM303_ACC_XYZ_READ(&m_buffer[0])    /* <<<<<<<<<<<< ERROR OCCURS HERE */
        // Additional transfer go in here
    };
    static app_twi_transaction_t const transaction =
    {
    .callback            = twi_read_callback,
    .p_user_data         = NULL,
    .p_transfers         = transfers,
    .number_of_transfers = sizeof(transfers) / sizeof(transfers[0])
    };
}

La función que causa el error, que reside en mi archivo de cabecera LSM303.h:

extern uint8_t const lsm303_acc_first_reg;

#define LSM303_ACC_READ(p_reg_addr, p_buffer, byte_cnt) \
            APP_TWI_WRITE(LSM303_ADDRESS_ACCEL, p_reg_addr, 1, APP_TWI_NO_STOP), \
            APP_TWI_READ (LSM303_ADDRESS_ACCEL, p_buffer, byte_cnt, 0)

#define LSM303_ACC_XYZ_READ(p_buffer) \
            LSM303_ACC_READ(&lsm303_acc_first_reg, p_buffer, 6)

No tengo ni idea de cuál es el problema ya que esta es exactamente la misma función utilizada en el ejemplo app_twi.

¿Alguien puede dar un consejo aquí? (Estoy usando Keil uvision 5 con SDK v10.0.0)

Editar: El m_buffer que utilizaron (idéntico al mío)

// Buffer for data read from sensors.
#define BUFFER_SIZE  11
static uint8_t m_buffer[BUFFER_SIZE];
    
pregunta Sensors

1 respuesta

0

m_buffer se define como global en el programa principal, por lo tanto, no es necesario pasarlo a la función lsm303_read . Hacer esto significa que el puntero m_buffer no es constante en el momento de la compilación.

Cambiar la definición de la función para no tomar ningún argumento resuelve el problema:

void LSM303_read(void)
    
respondido por el Sensors

Lea otras preguntas en las etiquetas