Dato il seguente codice:Perché non ci deve essere più di un accesso in lettura con tipo volatile all'interno di un punto di sequenza?
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);
}
}
ho trovato problemi con MISRA C 2012 Rule-13.2 e ho deciso di fare qualche ricerca. Ho trovato qui (http://archive.redlizards.com/docs/misrac2012-datasheet.pdf) che:
non è posta alcuna accesso più di un lettura con il tipo di volatili-qualificata entro punto una sequenza
La cosa qui è che io porto' Sono stato in grado di trovare un esempio o una spiegazione che chiarisca il motivo per cui non ci deve essere più di un accesso in lettura con tipo di tipo volatile all'interno di un punto di sequenza.
Ho bisogno di trovare una soluzione per il codice di violazione ma non mi è chiaro cosa fare.
Ora so che non ci deve essere più di un accesso in lettura con tipo di tipo volatile all'interno di un punto di sequenza. La domanda è, perché? e ho bisogno di sapere perché per implementare una soluzione e per spiegare a tutti qui perché sto cambiando il codice.
Saluti.
Perfetto !! Grazie! Questa risposta può aiutarmi anche con altri problemi. Mi mancava la parte degli effetti collaterali della regola. – m4l490n
C'è qualcosa che non mi è molto chiaro. Perché la lettura di una variabile volatile è un effetto collaterale? – m4l490n
@ m4l490n perché questo è ciò che è "volatile" - specifica che le scritture e le letture non possono essere memorizzate nella cache o riordinate.Un esempio potrebbe essere un registro hardware, in cui le letture possono restituire valori diversi su letture successive e provocare azioni arbitrarie. – ecatmur