Guten Tag! Könnt ihr mir bitte auf eine Anleitung für Assembler Hinweis geben? Das Problem: wenn ich mit C zusammen Assembler als *.S File benutzen möchte, geht dort vieles nicht, was in AVR-Assembler von AVR Studio geht. Und ich finde nirgendwo eine Anleitung genau für diesen Fall. Mit Assembler in AVR Studio kein Problem: dort gibt es Help. Wenn ich aber Assembler-Anleitung für GCC suche, komme ich nur auf Inline-Assembler. Ich möchte aber besser jetzt Assembler von GCC für AVR kennenlernen. Beispiel auf http://www.nongnu.org/avr-libc/user-manual/assembler.html ist leider rudimentär. Als Beispiel, was mit Assembler von GCC für AVR nicht klappt: byte3(@0) in Macro #define byte8(x) (x>>56)&0xff - keine Wirkung. usw. Also, Anleitung für Assembler, welche als *.S mit C-Compiler funktioniert. Was ist dort möglich und was nicht. Vielen Dank im voraus!
Maxim B. schrieb: > #define byte8(x) (x>>56)&0xff - keine Wirkung. was soll den deiner meinung nach passieren bei einem 8Bit AVR
Maxim B. schrieb: > Assembler in AVR Studio kein Problem: dort gibt es Help. Wenn ich aber > Assembler-Anleitung für GCC suche, komme ich nur auf Inline-Assembler. Dann suchst du falsch.. Der Assembler nennt sich Gas (für Gnu Assembler), und ist natürlich komplett dokumentiert. https://sourceware.org/binutils/docs/as/ Die Eigenheiten, die beim Zugriff auf AVR-Register zu beachten sind, findest du dann in der Doku zur avrlibc. Oliver
Maxim B. schrieb: > Guten Tag! > Könnt ihr mir bitte auf eine Anleitung für Assembler Hinweis geben? > Das Problem: wenn ich mit C zusammen Assembler als *.S File benutzen > möchte, geht dort vieles nicht, was in AVR-Assembler von AVR Studio > geht. Stimmt nicht. > Und ich finde nirgendwo eine Anleitung genau für diesen Fall. https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Assembler_und_Inline-Assembler https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en591235 Mehr braucht es nicht. Man muss aber beachten, daß man dann mit dem gcc Assembler arbeitet, der hat teilweise leicht andere Syntax! > byte3(@0) in Macro > #define byte8(x) (x>>56)&0xff - keine Wirkung. > usw. Beitrag "Re: Frage zu IR-Remote+LED-Strips an AVR" Dort ist ein Makro drin, vielleicht hilft es für den Anfang.
Falk B. schrieb: > https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Assembler_und_Inline-Assembler Das ist gerade was ich "rudimentär" nenne. Ein paar Beeispiele ohne systematisch zu gehen.
Thomas Z. schrieb: > was soll den deiner meinung nach passieren bei einem 8Bit AVR Mit Assembler aus AVR Studio funktioniert das wunderschön:
1 | #ifndef temp |
2 | #define temp r24 |
3 | #endif |
4 | |
5 | #ifndef BYTE_H |
6 | #define BYTE_H |
7 | #define byte5(x) (x>>32)&0xff |
8 | #define byte6(x) (x>>40)&0xff |
9 | #define byte7(x) (x>>48)&0xff |
10 | #define byte8(x) (x>>56)&0xff |
11 | #endif /* BYTE_H */ |
12 | |
13 | .macro outi ; @0 Ziel, @1 Data, temp wird benutzt, 2-3c, 4-6b |
14 | ldi temp, @1 ; 2-3c, 4-6b |
15 | .if @0 < 0x40 |
16 | out @0, temp |
17 | .else |
18 | sts @0, temp |
19 | .endif |
20 | .endm |
21 | |
22 | .macro outi64 ; @0 Ziel, @1 Data64, temp wird benutzt, 24c, 48b |
23 | outi @0, low(@1) |
24 | outi @0+1, high(@1) |
25 | outi @0+2, byte3(@1) |
26 | outi @0+3, byte4(@1) |
27 | outi @0+4, byte5(@1) |
28 | outi @0+5, byte6(@1) |
29 | outi @0+6, byte7(@1) |
30 | outi @0+7, byte8(@1) |
31 | .endm |
Oliver S. schrieb: > Der Assembler nennt sich Gas (für Gnu Assembler), und ist natürlich > komplett dokumentiert. > > https://sourceware.org/binutils/docs/as/ Danke! Nun lese ich das alles.
Maxim B. schrieb: > Das ist gerade was ich "rudimentär" nenne. Ein paar Beeispiele ohne > systematisch zu gehen. Warum machst Du Dich dann nicht an eine umfassende Beschreibung? Suche Dir halt alle Teile zusammen und baue etwas für die Nachwelt :-). Man wird es Dir sicher danken.
Hugo H. schrieb: > Suche > Dir halt alle Teile zusammen und baue etwas für die Nachwelt :-). Das ist aber nicht mein Job. Ich bin ein Profi für andere Sachen. Wenn du mal eine Orgelfuge brauchst... Was aber Assembler und C betrifft, frage ich lieber bei klugen Menschen :) Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer Konstante heraushole. Nur lo8(x)und hi8(x).
:
Bearbeitet durch User
Hi >Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer >Konstante heraushole. Nur lo8(x)und hi8(x). Im AVR-Assembler gibt es nur low(expression) oder byte0(expression) high(expression) oder byte1(expression) byte2(expression) byte3(expression) MfG spess
Spess53 schrieb: > Hi > >>Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer >>Konstante heraushole. Nur lo8(x)und hi8(x). > > Im AVR-Assembler gibt es nur > > low(expression) oder byte0(expression) > high(expression) oder byte1(expression) > byte2(expression) > byte3(expression) > > MfG spess Und mit "Assembler von C" arbeitet byte3(expression) nicht. Auch Versuch, mit #define fehlende Möglichkeit zu schaffen, scheitert, während mit AVR-Assembler problemlos bis 8 bytes arbeitet, mehr leider nicht. Dank Oliver S. schon einiges gefunden: Äquivalente für byte3() und byte4() sind hh8 und hhi8. D.h. AVR Assembler C Assembler low lo8 high hi8 byte3 hh8 byte4 hhi8
:
Bearbeitet durch User
Maxim B. schrieb: > Bisher habe ich z.B. nicht gefunden, wie ich byte3 und byte4 aus einer > Konstante heraushole. Nur lo8(x)und hi8(x). https://sourceware.org/binutils/docs/as/AVR_002dModifiers.html
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.