nrf_twi_mngr_transfer_t and const write data

I am trying to populate a nrf_twi_mngr_transfer_t at runtime depending on chunks of an input file that I'm pushing to i2c. 

nrf_twi_mngr_transfer_t const write_cfg_transfers[] = {
   NRF_TWI_MNGR_WRITE(bytes[0] >> 1, &data, i-1, 0),
};
Then I get a build error - 

error: initializer element is not constant

How is this done? 

I've tried using the twi instance from the twi_mngr struct, I can see it on the wire, but I get a hardfault on invoking the callback (likley undefined at this point)

ret_code_t err_code = nrf_drv_twi_tx(&(m_nrf_twi_mngr.twi), bytes[0] >> 1, data, i-1, false);
Parents
  • The "initializer element is not constant" error occurs because NRF_TWI_MNGR_WRITE is designed for compile-time const initialization, so you cannot use runtime variables like bytes[0] or i-1 directly within it. Instead, declare a non-const nrf_twi_mngr_transfer_t variable and populate its fields at runtime before passing it to nrf_twi_mngr_perform(); your hardfault with nrf_drv_twi_tx suggests issues with proper TWI driver initialization or callback setup for the m_nrf_twi_mngr.twi instance.  Internet roadtrip

Reply
  • The "initializer element is not constant" error occurs because NRF_TWI_MNGR_WRITE is designed for compile-time const initialization, so you cannot use runtime variables like bytes[0] or i-1 directly within it. Instead, declare a non-const nrf_twi_mngr_transfer_t variable and populate its fields at runtime before passing it to nrf_twi_mngr_perform(); your hardfault with nrf_drv_twi_tx suggests issues with proper TWI driver initialization or callback setup for the m_nrf_twi_mngr.twi instance.  Internet roadtrip

Children
No Data
Related