CBMC: throws: "атомные секции различаются в зависимости от ветки"

Я пытаюсь использовать CBMC в большом стеке встроенного программного обеспечения с одним основным прерыванием. Файлы .c обрабатываются нормально, но я застрял в моделировании поведения прерывания с помощью следующего кода:

      void main_interrupt(void);

void BMC_intr_0() {
    __CPROVER_atomic_begin();
    main_interrupt();
    __CPROVER_atomic_end();
}

И тест выглядит так:

      void BMC_intr_0(void);
void main_interrupt(void);

void ADC_Read_test()
{
    __CPROVER_ASYNC_0: BMC_intr_0();

    int    val;
    bool   fresh;

    ADC_Read(adc0, &val, &fresh);
}

Main_interrupt () вызов в BMC_intr_0() заворачивают в __CPROVER_atomic_begin() и __CPROVER_atomic_end() , потому что, как я понял, CBMC модель BMC_intr_0() в качестве дополнительной нити работает параллельно с ADC_Read_test. Таким образом, чтобы предотвратить выполнение ADC_Read_test во время работы BMC_intr_0 (прерывание), он заключен в атомарный блок. Проблема в том, что CBMC выдает мне это:

      : atomic sections differ across branches

из этого файла: строка.

У меня вопрос, почему? Что означает эта ошибка? Я нашел 0 документации по этому поводу, буду признателен за любые указатели!

0 ответов

Другие вопросы по тегам