den folgenden Code Gegeben:Warum darf es innerhalb eines Sequenzpunkts nicht mehr als einen Lesezugriff mit einem Typ mit flüchtiger Qualifizierung geben?
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);
}
}
ich Probleme mit MISRA C 2012 Regel 13.2 und ich beschlossen, einige der Forschung zu machen gefunden. Ich fand hier (http://archive.redlizards.com/docs/misrac2012-datasheet.pdf), dass:
es wird innerhalb einer Sequenz Punkt nicht mehr als ein Lesezugriff mit flüchtigem qualifiziertem Typ sein hier
Die Sache, dass ich haven ist‘ Ich konnte ein Beispiel oder eine Erklärung finden, die deutlich machen, warum es innerhalb eines Sequenzpunkts nicht mehr als einen Lesezugriff mit einem Typ mit flüchtiger Qualifizierung geben darf.
Ich muss eine Lösung für den verletzenden Code finden, aber mir ist nicht wirklich klar, was zu tun ist.
Ich weiß jetzt, dass es nicht mehr als einen Lesezugriff mit flüchtigen qualifizierten Typ innerhalb eines Sequenzpunktes geben soll. Die Frage ist, warum? und ich muss wissen warum, um eine Lösung zu implementieren und jedem hier zu erklären, warum ich den Code ändere.
Grüße.
Perfekt !! Vielen Dank! Diese Antwort kann mir auch bei anderen Problemen helfen. Mir fehlte der Nebeneffekt der Regel. – m4l490n
Da ist etwas, was mir nicht ganz klar ist. Warum ist das Lesen einer volatilen Variablen ein Nebeneffekt? – m4l490n
@ m4l490n, denn dafür steht "volatile" - es gibt an, dass Schreib- und Lesevorgänge nicht zwischengespeichert oder neu angeordnet werden können.Ein Beispiel wäre ein Hardware-Register, in dem Lesevorgänge bei aufeinanderfolgenden Lesevorgängen unterschiedliche Werte zurückliefern und zu willkürlichen Aktionen führen können. – ecatmur