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 документации по этому поводу, буду признателен за любые указатели!