Walter Tarpan schrieb:
> Hallo zusammen,
> in einer Headerdatei zum ARM-GCC (stm32F10x_tim.c) steht folgende Zeile
>
1 | > TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC1E);
|
2 | >
|
>
> Was will der Autor damit eigentlich sagen? Was bewirkt der Doppel-Cast
> mehr als nur
>
1 | > TIMx->CCER &= ~(uint16_t) TIM_CCER_CC1E;
|
2 | >
|
> ?
>
> Und wenn nichts: Wie entstehen solche Konstrukte? Codegenerierung?
Wenn alle GCC Warnungen eingeschaltet sind, gibt die Zeile
1 | TIMx->CCER &= ~(uint16_t) TIM_CCER_CC1E;
|
Fehler, da ein 32 Bit-Wert auf eine 16-Bit Variable geschrieben wird.
Das ist ein Fehler, der beabsichtigt wird. Damit der Compiler die
Warnung unterlässt, wird nochmals auf 16 Bit gecastet. Damit hält der
Code auch einem MISRA Test stand.