Учитывая следующий код:Почему в одной точке последовательности должно быть не более одного доступа для чтения с нестабильным типом?
static volatile float32_t tst_mtr_dutycycle;
static volatile uint8_t tst_mtr_direction;
static volatile uint32_t tst_mtr_update;
void TST_MTR_Task(void)
{
if (tst_mtr_update == 1U)
{
tst_mtr_update = 0;
MTR_SetDC(tst_mtr_dutycycle, tst_mtr_direction);
}
}
Я нашел проблемы с MISRA C 2012 Правило-13.2 и я решил сделать некоторые исследования. Я нашел здесь (http://archive.redlizards.com/docs/misrac2012-datasheet.pdf), что:
не должно быть доступа более чем один для чтения с летучими квалифицированных типа в точке одна последовательность
Дело в том, что пристанищем I» t смог найти пример или объяснение, в котором четко указано, почему в одной точке последовательности не должно быть доступа к чтению с нестабильным типом.
Мне нужно найти решение для нарушающего код, но мне не совсем ясно, что делать.
Теперь я знаю, что в одной точке последовательности должно быть не более одного доступа для чтения с нестабильным типом. Вопрос в том, почему? и мне нужно знать, почему для того, чтобы реализовать решение и объяснить всем здесь, почему я меняю код.
С уважением.
Perfect !! Благодаря! Этот ответ может помочь мне и в других вопросах. Мне не хватало побочных эффектов в правиле. – m4l490n
Есть что-то, что мне не очень понятно. Почему чтение изменчивой переменной является побочным эффектом? – m4l490n
@ m4l490n, потому что для этого используется 'volatile' - он указывает, что записи и чтения не могут быть кэшированы или переупорядочены.Примером может служить аппаратный регистр, в котором reads может возвращать разные значения при последовательных чтениях и приводить к произвольным действиям. – ecatmur