z.B. so:
1 |
void tft_write_bus(uint8_t high_byte,uint8_t low_byte)
|
2 |
{
|
3 |
GPIOA->BSRR = 0x00FF0000 | low_byte;
|
4 |
GPIOA->BSRR = 0x00FF0000 | high_byte;
|
5 |
}
|
daraus macht der Compiler:
1 |
f04f 4390 mov.w r3, #1207959552 @ 0x48000000
|
2 |
f441 017f orr.w r1, r1, #16711680 @ 0xff0000
|
3 |
f440 007f orr.w r0, r0, #16711680 @ 0xff0000
|
4 |
6199 str r1, [r3, #24]
|
5 |
6198 str r0, [r3, #24]
|
6 |
4770 bx lr
|
Das geht in Assembler auch nicht besser. Allerdings kann man durch Inlining den Aufwand für das wiederholte Laden der Register-Adresse einsparen.
Ein Problem dürfte aber sein dass die IO-Ports bei den hohen Prozessortakten sowieso nicht mitkommen und man das Beschreiben eher künstlich verlangsamen muss.