www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 C und ASM


Autor: Mathias Dubdidu (darkfirefighter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich würde gerne zum Verständniss einen kurzen Teil in meinem C Programm 
mit Inline Assembler schreiben. Leider finde ich hierzu keinerlei 
Beispiele und hoffe, dass jemand von euch evtl eins kennt. Also z.b. 
einfach nur einen Pin zu setzen. Mit C mache ich das ja mit
GPIOE->BSRR = GPIO_Pin_4; nur wie würde das mit ASM gehen? Kann ich dann 
auch die einzelnen bits im Register direkt ansprechen? Also z.b. BS4 = 1
Ich arbeite mit der µVision 4 IDE von Keil

Gruß
Mathias

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hilfe zur Selbsthilfe:

Übersetze das und schaue Dir das Listing an.

Autor: Simon R. (Firma: Safety Control GmbH) (simon_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst bestimmt bei deiner IDE bzw. dem C-Compiler die 
Listing-Ausgabe aktivieren. Dadurch wird der vom C-Compiler generierte 
Assembler-Code mit den dazu gehörenden C-Kommandos als Kommentar 
ausgegeben.
Dann musst du nur noch deinen C-Code compilieren und siehst, was der 
Compiler daraus gemacht hat.

Beim IAR-WorkBench findet man die Einstellung bei den
Projekteinstellungen->C/C++ Compiler.->List
[x] Output list file
    [x] Assembler mnemonics
[x] Output assembler file
    [x] Include source.

Wird beim Keil wohl ähnlich sein.

Das Ansprechen von einzelnen Bits in Registern findest du im Datenblatt 
unter dem Stichwort Bitbanding. Wenn du aber mehrere Bits im Register 
bearbeiten möchtest, könnte das Lesen/Ändern/Zurückschreiben des ganzen 
Registers schneller sein.

Grus
   Simon

Autor: Mathias Dubdidu (darkfirefighter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Danke für den Tipp, werde es mir mal anschauen

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon R. schrieb:

> unter dem Stichwort Bitbanding. Wenn du aber mehrere Bits im Register
> bearbeiten möchtest, könnte das Lesen/Ändern/Zurückschreiben des ganzen
> Registers schneller sein.

Nicht beim STM32. Der hat eine sehr elegante Methode, mehrere Bits 
beliebig zu verändern ohne die übrigen anzufassen.

Autor: Simon R. (Firma: Safety Control GmbH) (simon_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Nicht beim STM32. Der hat eine sehr elegante Methode, mehrere Bits
> beliebig zu verändern ohne die übrigen anzufassen.

Und wie heißt die Methode bzw. wo finde ich eine Beschreibung dazu?
Das könnte ich gut brauchen.

Gruß
  Simon

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach BSRR schreiben. Einsen in den oberen 16 Bits löschen Portbits, 
Einsen in den unteren setzen sie. Setzen gewinnt. Wenn man also in die 
oberen 16 Bits die Bitmaske schreibt, kann man mit den unteren 16 Bits 
den gewünschten Zustand dieser Bits schreiben ohne den Rest zu 
beeinflussen.

Autor: Simon R. (Firma: Safety Control GmbH) (simon_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke A. K.,
ach-ja das mit dem BSRR kannte ich schon.
Sowas gibt's aber nicht bei allen Peripherals.
Dachte schon es gibt noch 'ne Alternative zum Bitbanding.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.