Register-Namen in asm(...) verwenden

Hallo Zusammen,
statt asm(SBI 10, 5); zu schreiben möchte ich lieber asm(SBI DDRD, PD5); angeben können. Es sind etliche solche Formulierungen im Sketch und es ist einfach unübersichtlich.
Leider sind DDRD und PD5 (bzw. PORTD5) an dieser Stelle nicht bekannt.
In der Datei m328Pdef.inc ist alles was benötigt wird aufgeführt, das Einbinden mit asm(".include \"m328Pdef.inc\""); findet zwar die Dateie, aber meldet praktisch jede Zeile mit Syntaxfehler. Möglicherweise wird hier kein Präprozessor aufgerufen der den Code (mit .equ und .def) verstehen würde.
Als alter (?) Assembler-Programmierer weiß ich hier nicht weiter, wie kann ich dem Befehl asm() die Namen bekanntmachen?

Warum dann mit dem Inlineassembler?
Das ist doch eine Notkrücke für C/C++ Programmierer.

Warum nicht in reinem Assembler?

das wäre für mich alleine schon zielführend. Aber ich habe hier die TimerOne-Library verwendet und ich möchte die am Projekt beteiligten nicht mit purem Assembler erschrecken. Schlimm genug, in der Interrupt-Routine einige asm-Befehle zu verwenden (u.a. um mehrere Portpins gleichzeitig zu ändern. SBI ... war nur ein Beispiel).
Also: wie kann ich m328Pdef.inc oder Teile davon einbinden?

Das geht nicht in C++?

Soweit ich weiß: Gar nicht!
Schon gar nicht im inline Assembler.

Bist Du sicher, dass Du dazu Assembler brauchst? Der C++ Optimizer ist ziemlich gut - der kennt und verwendet sogar die Assemblerbefehle zur direkten Portbitmanipulation (sbi, cbi ) wenn Die I/O Registeradresse im entsprechenden Bereich liegt. Vielleicht solltest Du erstmal schauen, was der Compiler macht, bevor Du da eingreifst.

https://rn-wissen.de/wiki/index.php/Inline-Assembler_in_avr-gcc#Zugriff_auf_SFRs

interessanter Artikel. Aber der Code wird nicht übersichtlicher...
Habe jetzt allen Assembler eliminiert und durch z.B. PORTD &= ~(1 << PD5) ersetzt.

Danke an alle.

Da hast du voll Wahr!
Inline Assembler ist so ziemlich das hässlichste, was man in C++ veranstalten kann.
Ohne Not tut man sich (und anderen) das nicht an.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.