Hallo, gibt es einen derartigen Befehl(oder Makro) der es ermöglicht eine Konstante bei der Kompilierung als Programmcode zu schreiben? Bsp: ... .org $2a .BYTES 100 0xfd ; Makro/Befehl ... erzeugt: 0x2a: 0xfdfd 0x2c: 0xfdfd 0x2e: 0xfdfd 0x30: 0xfdfd 0x32: 0xfdfd ... Mit .db bzw .dw kann muss jeder einzelne Wert ja selber geschrieben werden. Unter nasm ist mir so eine Konstruktion bekannt, jedoch nicht für den avr-assembler. Danke schon mal!
Hier das NASM-Gegenstück: "The TIMES prefix causes the instruction to be assembled multiple times. This is partly present as NASM's equivalent of the DUP syntax supported by MASM-compatible assemblers, in that you can code" zerobuf: times 64 db 0 Quelle: http://www.nasm.us/doc/nasmdoc3.html Ich brauche sowas unbedingt auch für den AVR-Assembler... Irgendwelche Ideen??
Hallo, auch wenn ich den Sinn des ganzen nicht erkenne - wie oft brauchst du denn die Funktion in deinem Programm? - ist mir auch keine sinnvolle Möglichkeit bekannt das mit Assemblerdirektiven zu lösen. Bleibt nur der Editor und copy&paste Sascha
Hi, des würde mich auch interessieren, falls jemand eine Idee/Lösung dafür hat.
Wenn die Funktion unsinnig wäre, wäre sie doch in NASM nicht implementiert...
na dann sag doch mal wozu man 100 identische Bytes im Flash braucht. Sascha
Unter Nasm benutz ich sowas wenn ich nen Bootloader geschrieben hab und die letzten 2 Bytes eine Signatur dafür sind, dass der Code ein Bootloader ist. "times" füllt sozusagen nicht-vorhandenen Code mit 0-Bytes(oder 0xff) auf und setzt am Ende die 0x55AA Signatur. In Assembler will ich nur in einen 1000-Byte langen NOP-Block springen^^, um mir das Nachdenken über die Schleifenkonstrukte zu ersparen (Delay). Falls es so einen Befehl nicht gibt, verwerfe ich mal die Idee...
Bubble schrieb: > Unter Nasm benutz ich sowas wenn ich nen Bootloader geschrieben hab und > die letzten 2 Bytes eine Signatur dafür sind, dass der Code ein > Bootloader ist. > "times" füllt sozusagen nicht-vorhandenen Code mit 0-Bytes(oder 0xff) > auf und setzt am Ende die 0x55AA Signatur. dann würde es doch reichen die Signatur an die Endadresse zu setzen - zwischen Programm und Signatur steht nach dem Erase der Blöcke eh' 0xFF > In Assembler will ich nur in einen 1000-Byte langen NOP-Block > springen^^, um mir das Nachdenken über die Schleifenkonstrukte zu > ersparen (Delay). das habe ich auch noch nicht gehört - musst aber viel Speicher haben > Falls es so einen Befehl nicht gibt, verwerfe ich mal die Idee... genau, ein Delay mit Schleifen zu programmieren ist doch auch kein Problem Sascha
Bubble schrieb: > In Assembler will ich nur in einen 1000-Byte langen NOP-Block > springen^^, um mir das Nachdenken über die Schleifenkonstrukte zu > ersparen (Delay). Das ist jetzt aber nicht Dein Ernst, oder? Und wenn Du mal eine Sekunde warten musst? Brauchst Du dann 16 Mio Nops? Manchmal sollte man sich das Nachdenken nicht ersparen ;-) Grüße
Bubble schrieb: > Wenn die Funktion unsinnig wäre, wäre sie doch in NASM nicht > implementiert... NASM ist für Architekturen, wo man z.B. mal eben ein Alignment auf eine Cache-Zeile haben will, und deshalb die Bytes dazwischen mit irgendwas füllen muss (je nach Anwendung vorzugsweise mit etwas, was nicht zu einer "Invalid Opcode"-Exception oder gar irgendwelchen sinnlosen Befehlen führt). Bei 8bit-Controllern braucht man das aber tendenziell eher nicht. Andreas
Klar geht das. http://lmgtfy.com/?q=avr+assembler+flash erstes Ergebniss, unter Anwendung, Flash-ROM
Bubble schrieb: > In Assembler will ich nur in einen 1000-Byte langen NOP-Block > springen^^, um mir das Nachdenken über die Schleifenkonstrukte zu > ersparen (Delay). Das ist jetzt aber nicht Dein Ernst? Delays macht man ganz einfach zyklusgenau: http://www.mikrocontroller.net/attachment/416/Mdelay.asm Peter
Was du machen willst geht mit einem rekursiven Assembler-Makro wie
1 | .macro _NOPS cnt |
2 | .if (\cnt > 0) |
3 | nop |
4 | _NOPS (\cnt)-1 |
5 | .endif |
6 | .endm |
Anwendung dann
1 | _NOPS (1000) |
Evtl hilft dir auch .fill oder .space.
Johann L. schrieb: > .macro _NOPS cnt > .if (\cnt > 0) > nop > _NOPS (\cnt)-1 > .endif > .endm Danke! Endlich jemand der Sinn und Frage getrennt behandelt!! Es geht also doch! Rekursion wäre mir nicht in den Sinn gekommen.
Bubble schrieb: > Danke! Endlich jemand der Sinn und Frage getrennt behandelt!! Es geht > also doch! Rekursion wäre mir nicht in den Sinn gekommen. Geht im AVR Studio soweit ich mich erinnere aber maximal bis zu einer Tiefe von 6 Ebenen.
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.