Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Hansi, > > > <asm> > > mov R2,#2000 ; Anfangsspeicheradresse im Segment 8 > > Loop1: mov R4,P1H ; Port einlesen > > and R4,#0080h ; Bid 7 isolieren > > shr R4,#7 ; und auf Bid 0 schieben > > add r4,#30h ; ASCII erzeugen 0 / I > > EXTS #8,#1 ; Speicherzugriff auf Segment 8 erzwingen > > movb [R2],RL4 ; und ASCII im Speicher ablegen > > cmpil r2,#48000 ; Schleifenzähler erhöhen und mit Endwert vergleichen > > jmpr cc_SLT, Loop1 > > pop R2 > > pop R2 > > rets > > </asm> > > > > Das Problem: > > Naja, das ausgelesene Integer-Array ( unter C2 ) zeigt keinerlei Veränderung. > > Wohin werden die Daten bei meinem Programm geschrieben? > > Die Daten werden ab Adresse 0x2000 in Segment8 geschrieben, wie Du es in > der Routine festlegst. > Allerdings hast Du einen groben Fehler in Deiner Routine: > <asm> cmpil r2,#48000 ; Schleifenzähler erhöhen und mit Endwert vergleichen > jmpr cc_SLT, Loop1</asm> > Der Befehl sollte wohl cmpi1 heißen, also compare and increment GPR by 1. > Du willst zu Loop1 springen, solange R2 kleiner 48000 ist. > Dummerweise machst Du einen Vorzeichenbehafteten Vergleich. > Somit wird 48000 nicht als 48000 gewertet, sondern als -17536. > Somit wird die Schleife bereits nach dem ersten Durchlauf verlassen. > Damit das ganze so funzt, wie Du willst, darfst Du nicht auf SLT, sondern mußt auf ULT prüfen. > > > > Ich habe das Programm gerade probeweise in das Segment 3 geladen und siehe da > > ES FUNKTIONIERT! ( leider nur im Segment 3 ) > > Das wundert mich aber ein wenig. > > Aber, wie hast Du die Routine in den RAM geladen ? (C2-Code) > Vielleicht hast du z.B. high- und low-Byte vertauscht, oder die falsche Adresse > als Einsprungadresse benutzt. > > > Übrigens macht es mittlerweile wenig Sinn, ASM-Routinen im RAM abzulegen. > Seitdem es sehr einfach geworden ist, die Flashsegmente 1 bis 3 für ASM > zu nutzen, gibt es nurnoch einen sinnvollen Grund für ASM im RAM: > Und zwar zum testen von Routinenzur Laufzeit. > D.h. auf der CC2 läuft ein Testprogramm, welches neue ASM-Routinen entgegenimmt > und im RAM speichert, ohne daß ein neues Programm geladen wird. > > MfG André H.