qwerty wrote:
> Hallo Leute! Ich bin ein Einfänger.> Also, Könnte mir irgend jemand sagen, ob es in AVR-GCC eine Möglichkeit> Asm Code nutzen gibt?
Prinzipiell ja.
Allerdings erhebt sich die Frage: Wozu
Wenn du Anfänger bist, dann schreib deine Programm in C.
Assembler braucht man nur dann, wenn es wirklich auf den
letzten Taktzyklus ankommt und man eine Optimierung machen
muss, die der Compiler so nicht hinkriegt, weil ihn die
C Regeln einschränken.
>> Mein Bs
Wenn du einen C Compiler benutzt, dann schreibe auch in C.
Wenn du in Assembler programmieren willst, dann benutze
auch einen Assembler (wie zb den im AVR-Studio).
Alles andere ist der Versuch, sich selbst ins Knie zu schiessen.
Karl heinz Buchegger wrote:
> Wenn du einen C Compiler benutzt, dann schreibe auch in C.> Wenn du in Assembler programmieren willst, dann benutze> auch einen Assembler (wie zb den im AVR-Studio).> Alles andere ist der Versuch, sich selbst ins Knie zu schiessen.
Tatsächlich schiessen sich Anfänger mit dem gcc inline assembler
eigentlich nur ins Knie.
@qwerty: Der gcc inline assembler unterscheidet sich grundlegend von den
inline assemblern die du vielleicht von Borland-C oder Visual Studio
kennst, denn er ist so entworfen, daß er mit dem *Optimierer
zusammenarbeitet*, d.h. du kannst sicheren assembler code mit hoch
optimierten code mischen (andere compiler schalten in Gegenwart von IA
den Optimierer einfach ab). Damit das funktioniert, ist es *absolut
notwendig* die sog. operand constraints zu verstehen.
Zu Anfang kannst du dir diesen Text zu Gemüte führen:
http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
und dann den entsprechenden Eintrag im gcc Manual lesen:
http://gcc.gnu.org/onlinedocs/gcc-4.2.3/gcc/Constraints.html
Wenn du dir danach etwa die Frage beantworten kannst, was einen "early
clobber" von einem "clobber" unterscheidet und warum man ihn
spezifizieren muss, bist du nach meiner Erfahrung sicher genug.
Mit anderen Worten: der Inline-Assembler ist ein mächtiges Werkzeug
für Entwickler von Bibliotheken, während Endnutzer in der Regel ohne
ihn auskommen können sollten.
Da der GCC mit einem Linker arbeitet, der verschiebliche
("relocatable") Objektmodule auch aus verschiedenen Sprachen
miteinander kombinieren kann, kann man für wirklich zeitkritische
Dinge immer noch reine Assemblerdateien dem C-Code mit zur Seite
stellen. Das ergibt in den meisten Fällen ohnehin besser lesbaren
Code als die Benutzung des Inline-Assemblers. Siehe auch:
http://www.nongnu.org/avr-libc/user-manual/group__asmdemo.html
Hi,
anbei noch ein kleines Beispiel, indem der PORTB eines ATMega1281
gesetzt wird.
Hierbei ist das Setzen des Ports in einer Assembler Datei codiert, deren
Object dann zum C-Object dazugelinkt wird.
Vielleicht hilft es ja :-)
>Hi,>anbei noch ein kleines Beispiel, indem der PORTB eines ATMega1281>gesetzt wird.>Hierbei ist das Setzen des Ports in einer Assembler Datei codiert, deren>Object dann zum C-Object dazugelinkt wird.>Vielleicht hilft es ja :-)>
thanksssssssssssss :D :D :D