Forum: Mikrocontroller und Digitale Elektronik Assembly aufschreiben Stm32 Cubeide32


von Ismail A. (ismail)


Lesenswert?

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;

}

von Klaus (feelfree)


Lesenswert?

Ismail A. schrieb:
> Wer kann mir bitte diese Funktion mit Assembly aufschreiben?

Ein C-Compiler ;-)

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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".

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Norbert (der_norbert)


Lesenswert?

Einer findet sich immer…

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Norbert schrieb:
> Einer findet sich immer…

Zum sinnlosen Nörgeln? Es gibt sogar Leute die machen Kreuzworträtsel 
wenn ihnen langweilig ist.

von Norbert (der_norbert)


Lesenswert?

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…

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Norbert schrieb:
> Nee Jung', das ist ja wohl sehr offensichtlich eine Lernaufgabe.

Na und, vielleicht hab ich ja trotzdem Lust auf eine Fingerübung.

von Norbert (der_norbert)


Lesenswert?

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? ;-)

von Ismail A. (ismail)


Lesenswert?

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
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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!

von Norbert (der_norbert)


Lesenswert?

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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.