Biorąc pod uwagę następujący kod:Dlaczego w jednym punkcie sekwencyjnym nie może być więcej niż jedno zezwolenie na odczyt z typem o kwalifikacjach lotnych?
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);
}
}
znalazłem problemów z MISRA C 2012 Rule-13,2 i postanowiłem zrobić kilka badań. Znalazłem tu (http://archive.redlizards.com/docs/misrac2012-datasheet.pdf), że:
nie będzie dostęp do więcej niż jednego odczytu z rodzaju lotnych wykwalifikowanych w ciągu jednego punktu sekwencji
Chodzi o to, że przystań” • byli w stanie znaleźć przykład lub wyjaśnienie, które wyjaśnia, dlaczego w jednym punkcie sekwencyjnym powinno być nie więcej niż jedno zezwolenie na odczyt z typem o kwalifikacjach lotnych.
Potrzebuję znaleźć rozwiązanie dla naruszającego kod, ale nie jest dla mnie jasne, co robić.
Wiem, że w ramach jednego punktu sekwencyjnego nie będzie więcej niż jeden dostęp do odczytu z typem o zmiennej lotności. Pytanie brzmi: dlaczego? i muszę wiedzieć, dlaczego, aby wdrożyć rozwiązanie i wyjaśnić tutaj wszystkim, dlaczego zmieniam kod.
Pozdrawiam.
Perfect !! Dzięki! Ta odpowiedź może mi również pomóc w innych sprawach. Brakowało mi efektów ubocznych w regule. – m4l490n
Jest coś, co nie jest dla mnie jasne. Dlaczego czytanie zmiennej lotnej jest efektem ubocznym? – m4l490n
@ m4l490n, ponieważ do tego służy słowo "volatile" - określa, że zapisy i odczyty nie mogą być buforowane ani zamieniane.Przykładem może być rejestr sprzętowy, w którym odczyty mogą zwracać różne wartości podczas kolejnych odczytów i powodować dowolne akcje. – ecatmur