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;
}
|
Anzeige
|
Assembly aufschreiben Stm32 Cubeide32Hallo 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; } 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:
daraus macht der Compiler:
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. 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…
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? ;-)
Vielen vielen Danke Niklas G
Wie du siehst habe ich den C-Code optimiert. Und was soll der Schummelparameter sein? -O2 ?
Gern!
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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|