04-12-2021 09:56 AM
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.
04-12-2021 10:06 AM
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.