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

Рейтинг: 1Ответов: 1Опубликовано: 05.03.2023

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

Ответы

▲ 1

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

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

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