Ich wollte schauen ob mein C++ Pin Objekt genauso effizient ist wie ein
direkter C-Style Aufruf. Also:
1 | HAL_GPIO_WritePin(GPIOA, PIN, GPIO_PIN_SET);
|
vs
1 | STM32Pin pin{GPIOA, PIN};
|
2 | ...
|
3 | pin.write(true);
|
mit
1 | struct STM32Pin {
|
2 | GPIO_TypeDef *port;
|
3 | uint32_t pinnum;
|
4 | STM32Pin() = delete;
|
5 | void write(bool level) const { HAL_GPIO_WritePin(port, pinnum, static_cast<GPIO_PinState>(level)); }
|
6 | };
|
Antwort: wenn das pin Objekt const gemacht wird, ist der Code identisch
(-O2 Optimierung).
Siehe hier: https://godbolt.org/z/p6lkWx
Zu dem generierten Assembly habe ich zwei Fragen:
1. Was sollen die ganzen ldrb und strb Befehle für Methode 1?
2. Wenn der pin nicht const ist, werden für Methode 2 (C++ pin) sogar
weniger Befehle emittiert, wie kann das sein?