Изменение массива между прерываниями

У меня есть программа на C общения с устройством по UART. У меня есть массив dataArr, в котором хранятся числа и со временем они будут обновляться в функции main. Иногда вызывается прерывание при получении информации HAL_UART_RxCpltCallback и там ответом отправляется массив dataArr. Как правильно это реализовать? Ведь может возникнуть ситуация, когда во время обновления массива вызовется прерывание и будут отправлены неверные данные.


Ответы (1 шт):

Автор решения: Pak Uula

На время обработки массива запретите прерывания. Я погуглил, у вас в IDE должны быть функции __enable_irq() и __disable_irq().

Пример использования в документации на компилятор ARM:

void foo(void) {
    int was_masked = __disable_irq();
    /* здесь вы обновляете dataArr */
    if (!was_masked) {
        __enable_irq();
    }
}
→ Ссылка