Hallo, möglicherweise habe ich ein ganz triviales Problem, aber 2 Tage Suche haben mir bisher nicht geholfen. Ich will einen pcode-Interpreter für Pascal (und andere) auf einem (mehreren) ATMEGA162 implementieren. Programmieren des Pcode ist kein Problem, soll in Assembler erfolgen. Für die Real-Funktionen will ich die libc anzapfen. Ziel ist ein Multiprozessorsystem zur Demo des Prinzips. Lösung 1: gcc-Projekt, interpreter in asm als .S-Datei. Problem: ich benötige mehrzeilige Makros, bekomme das mit den #define aber nicht hin. Für einen Real-Zugriff will ich z.B. 7 asm-Befehle incl. einer Warteschleife auf bus-acknowledge ablaufen lassen. Lösung 2: asm-Projekt, interpreter als .asm Problem: wo gebe ich an, daß die libc hinzuzulinken ist ? Lösung 3: gcc-Projekt mit inline-ASM Problem: bei dem Umfang ist der Code praktisch nicht mehr lesbar. Kann mir einer bei L1 (oder L2) eine Tip geben ? Gruß, Michael
Ich verstehe 1. und 2. nicht. Was genau meinst du mit mehrzeiligen #defines in einer .S-Datei, und was ist der Unterschied zu einer .asm-Datei? Wenn du mit .asm-Dateien Quelldateien für den Atmel-Assmebler meinst, der lääst sich nicht mit gcc-objekten zusammenlinken. Das geht damit gar nicht. Oliver
Hallo Oliver, die S-Datei im gcc-Projekt enthält echte asm-Befehl ohne die incline-Schreibweise asm("..."), die Pseudobefehle haben aber eine andere Syntax als der avr asm von Atmel. In .asm geht .MACRO: .MACRO pop2 LD @0,X+ LD @1,X+ .ENDM In .S dagegen geht nur #define wie im C-Programm. #define pop1(x0) \ LD x0,X+ ist ok, aber #define pop2(x0,x1) \ LD x0,X+ \ LD x1,X+ geht halt nicht, Klammerung mit {} und () funktioniert wohl auch nicht. Für die Lösung 1 mit gcc spricht halt auch, daß ich dann das Laufzeitsystem (IO+Tasking+Mem) mit C programmieren kann. Gruß, Michael
Michael Appelt schrieb: > In .asm geht .MACRO: > > ... > > In .S dagegen geht nur #define wie im C-Programm. Unsinn. http://sourceware.org/binutils/docs/as/Macro.html#Macro
Ok, Danke erstmal, ein wenig geht was. Allerdings kann ich keine Register als Parameter angeben, ich bekomme dann "Error: constant value required". Gruß, Michael P.S. Dein Tonfall ist ja erfrischend, heute Frust gehabt ?
Michael Appelt schrieb: > Allerdings kann ich keine Register als Parameter angeben, ich bekomme > dann "Error: constant value required". Dann hast du wohl irgendetwas falsch gemacht. Michael Appelt schrieb: > P.S. Dein Tonfall ist ja erfrischend, heute Frust gehabt ? Nö, aber zuweilen betitle ich Unsinn einfach auch als solchen. Es wäre was anderes gewesen, wenn du so was wie "ich glaube" oder "soweit ich weiß" geschrieben hättest, aber du hast es als Tatsache hingestellt, und somit ist die Aussage schlicht Unsinn.
Michael Appelt schrieb: > Allerdings kann ich keine Register als Parameter angeben, ich bekomme > dann "Error: constant value required". Beispiel?
Hallo, also .macro pushw p1, p2 ST -Y,R11 ST -Y,R12 .endm pushw R11,R12 geht. .macro pushw p1, p2 ST -Y,p1 ST -Y,p2 .endm geht nicht, Error wie oben. Hast Du einen Tip ? Gruß, Michael
:-))) Danke vielmals, das hatte ich sogar gelesen, aber nicht richtig verstanden. Gruß, Michael
Stefan Ernst schrieb:
1 | .macro pushw p1, p2 |
2 | > ST -Y,\p1 |
3 | > ST -Y,\p2 |
4 | > .endm |
Wenn wirklich immer ein Word-Register auf den "Stack" soll, also ein 16-Bit Register beginnend mit einer gerader Register-Nummer, dann geht bequemer auch
1 | .macro pushw regno |
2 | ST -Y,\regno+1 |
3 | ST -Y,\regno |
4 | .endm |
5 | |
6 | pushw 2 |
Denn der GNU-Assembler frisst Zahlen als Registernummer (die Mnemonics sind eindeutig und lassen diese Zuordnung fehlerfrei zu). Es geht also auch
1 | mov 1,2 |
2 | add 3,4 |
Danke, das greife ich gerne auf. Leider haben die verschiedenen Tools bzw. Ebenen sehr unterschiedliche Eigenschaften, die Doku ist auch nicht gerade übersichtlich und im Web mangelt es nicht an falschen oder veralteten Hinweisen. Gruß, Michael
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.