Hallo,
wenn ich mich recht errinnere, dürfen für die Anzahl der auszugebenden Elemente nur Konstanten eingesetzt werden. Wenn L immer 5 ist, würde ich die 5 besser in den PrintBin-Befehl schreiben.
Ruppi
Ich habe im Eeprom mehrere AT Befehle und Rufnummern für ein Modem programmiert.
Für die Ausgabe habe ich ein Array mit 25 Byte dimensioniert, in welches die entsprechenden Daten aus dem EEprom eingelesen werden.
Da die Ausgabe mit Printbin jedesmal unterschiedlich lang ist, habe ich für die Länge ebenfalls eine Variable dimensioniert.
L=5
Printbin Daten(1);L
Dabei werden aber immer alle 25 Byte vom Array ausgegeben !?!?!?
Wie kann ich ( ohne eine Schleife ) die Ausgabe, mit der Variablen auf die entsprechende Länge begrenzen ???
Hallo,
wenn ich mich recht errinnere, dürfen für die Anzahl der auszugebenden Elemente nur Konstanten eingesetzt werden. Wenn L immer 5 ist, würde ich die 5 besser in den PrintBin-Befehl schreiben.
Ruppi
Wenn du die daten als strings speicherst, haben sie am ende eh' eine NULL, da würdest du keine Länge extra brauchen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@Ruppi
das es nur Konstanten sein dürfen, lese ich da nicht heraus.The number of bytes to send can be specified by an additional numeric parameter.
@Robert
daran habe ich auch schon gedacht, aber es sind ja auch Steuerbefehle dabei.
Ich werde mir mal in Assembler ansehen, was Bascom mit der Variablen beim Printbin macht.
NULL kann's ja nicht sein, alles andere wäre ja wurst.. aber es sind ja auch Steuerbefehle dabei..
Printbin byte = Print chr(byte)
d.h. das Zeichen geht 1:1 raus
Länge: Bascom ist eine Schweinebacke: Länge als variable geht nicht, das muß eine numerischer Wert sein
In dem Beispiel printet er zuerst B(14) ! und dann die variable "A" !!
Code:Dim A As Byte Dim B(14) As Byte A = 4 Printbin B(1) ; A '---------------------------------------------------------- A = 4 LDI r24,0x04 STS 0x0060,r24 Printbin B(1) ; A LDI r19,0x0E ; len array (14) LDI XL,0x61 ; B(1) LDI XH,0x00 CALL L_0x00A4 ; printbin LDI r19,0x01 ; len 1 LDI XL,0x60 ; A LDI XH,0x00 CALL L_0x00A4 ; printbin CLI L_0x00A2: RJMP L_0x00A2 L_0x00A4: LD r24,X+ RCALL L_0x00AE DEC r19 BRNE L_0x00A4 RET L_0x00AE: SBIS UCSRA,UDRE RJMP L_0x00AE OUT UDR,r24 RET
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@PicNick
Mit welchen Disassembler hast Du den Code erzeugt? AVR-Studio 4 erzeugt aus meinem OBJ-Code keine Labels (die das Lesen deutlich vereinfachen).
da hilft auch in AVR Studio kein Display/ShowLabelsCode:BREQ PC+0x03 Branch if equal JMP 0x000001C1 Jump
@Robert
genau das habe ich auch gerade herausgefunden.In dem Beispiel printet er zuerst B(14) ! und dann die variable "A" !!
Damit ist der Printbin Befehl für mich unbrauchbar. Wenn wenigstens ein Error beim kompilieren aufgetreten wäre ...![]()
Da die Ausgaberoutine so schön einfach ist, werde ich mir eine eigene in Assembler schreiben. Dann kann ich meinen EEprominhalt auch so lassen.
Hehe, genau wegen diesen Labeln hab ich mir den Hex-Hacker selber zusammen gefriemelt...Mit welchen Disassembler..![]()
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
derklingt nach
... ich hab da etwas für Dich ...![]()
Das gibt (oder gab ?) es auch fertig.Hehe, genau wegen diesen Labeln hab ich mir den Hex-Hacker selber zusammen gefriemelt.
So etwas war mal bei einem früheren AVRStudio mit bei.
Google mal nach "DisAVR" eventuell findet man den Disassembler noch.
Lesezeichen