Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BMI270 API Dynamic array allocation inside functions results in VLA_alloc error

    BMI270 API Dynamic array allocation inside functions results in VLA_alloc error

    punitjain8695
    Member

    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?

    1 REPLY 1

    BSTRobin
    Community Moderator
    Community Moderator

    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.

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist