Hallo zusammen Wer kann mir bitte diese Funktion mit Assembly aufschreiben? void tft_write_bus(uint8_t high_byte,uint8_t low_byte) { GPIOA->ODR = (GPIOA->ODR & 0xffffff00) | low_byte; GPIOB->ODR = (GPIOB->ODR & 0xffffff00) | high_byte; }
Ismail A. schrieb: > Wer kann mir bitte diese Funktion mit Assembly aufschreiben? Ein C-Compiler ;-)
Den Code könnte man auch in C noch optimieren sodass er schneller und interrupt-sicher ist, und dann kann man mit Assembler auch nichts mehr "verbessern".
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.
Norbert schrieb: > Einer findet sich immer… Zum sinnlosen Nörgeln? Es gibt sogar Leute die machen Kreuzworträtsel wenn ihnen langweilig ist.
Niklas G. schrieb: > Norbert schrieb: >> Einer findet sich immer… > > Zum sinnlosen Nörgeln? Es gibt sogar Leute die machen Kreuzworträtsel > wenn ihnen langweilig ist. Nee Jung', das ist ja wohl sehr offensichtlich eine Lernaufgabe. Denkst du das auf diese Art und Weise auch nur irgend etwas gelernt wird? Eben… Aber schönen Dank für deinen Kommentar…
Norbert schrieb: > Nee Jung', das ist ja wohl sehr offensichtlich eine Lernaufgabe. Na und, vielleicht hab ich ja trotzdem Lust auf eine Fingerübung.
Niklas G. schrieb: > Na und, vielleicht hab ich ja trotzdem Lust auf eine Fingerübung. Du meinst den Compiler mit dem Schummelparameter aufrufen und schauen was dabei heraus kommt? ;-)
Norbert schrieb: > Niklas G. schrieb: >> Norbert schrieb: >>> Einer findet sich immer… >> >> Zum sinnlosen Nörgeln? Es gibt sogar Leute die machen Kreuzworträtsel >> wenn ihnen langweilig ist. > > Nee Jung', das ist ja wohl sehr offensichtlich eine Lernaufgabe. > Denkst du das auf diese Art und Weise auch nur irgend etwas gelernt > wird? > > Eben… > > Aber schönen Dank für deinen Kommentar Vielen vielen Danke Niklas G
:
Bearbeitet durch User
Norbert schrieb: > Du meinst den Compiler mit dem Schummelparameter aufrufen und schauen > was dabei heraus kommt? ;-) Wie du siehst habe ich den C-Code optimiert. Und was soll der Schummelparameter sein? -O2 ? Ismail A. schrieb: > Vielen vielen Danke Niklas G Gern!
Niklas G. schrieb: > Wie du siehst habe ich den C-Code optimiert. Und was soll der > Schummelparameter sein? -O2 ? Das ist der, welcher dir für deinen C-Sourcecode automagisch den passenden Assembler-Sourcecode generiert.
Norbert schrieb: > Das ist der, welcher dir für deinen C-Sourcecode automagisch den > passenden Assembler-Sourcecode generiert. Die Default-Einstellungen der STM32CubeIDE reichen um diesen Code zu erzeugen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.