Hi,
I'm interfacing the BMI270 shuttle board with TI's TM4C1294NCPDT based evaluation board. It's a 32-bit arm-based microcontroller.
I'm trying to use BMI270_API.
I see that there are multiple array allocations inside functions, for example,
int8_t bmi2_ois_get_regs(uint8_t ois_reg_addr, uint8_t *ois_reg_data, uint16_t data_len, struct bmi2_ois_dev *ois_dev)
{
// ...
/* Variable to define temporary buffer */
uint8_t temp_buf[temp_len];
// ...
}
This results in a runtime error related to memory allocation, around vla_alloc.c.
I searched for the error code, it was associated with "VLA allocation failed".
A related thread: https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/Use-of-bmi160-h-API-with-PIC-Microcnotro...
What should I do?
I can think of the following possibilities: modify all functions in the API to allocate memory via dynamic allocation, or make the buffers of size a byte more than the max number of registers it can read or write (for BMI270, I could keep it as 128).
or any other better solution that can be implemented. (compiler options? )
Another side question is (not necessarily related), why does the API use array allocations like this? Isn't this frowned upon in the industry?
Solved! Go to Solution.
Hello punitjain8695,
Now the array is a temporary variable in the function. You can define the array as a static array
Now this array is a temporary variable in the function. You can define this array as a static array. The data length needs to refer to the maximum value of data_len.