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];