Re: Speicherzugriff, Code im Segment 8 Kategorie: Progr. Assembler, TaskingTools, OS (von Hansi - 1.11.2004 13:32) | ||
Als Antwort auf Re: Speicherzugriff, Code im Segment 8 von André H. - 28.10.2004 23:46 | ||
| ||
Hallo André, der Vergleichbefehl war/ist schon korrekt geschrieben, dass die 1 in Worten eins wie ein l ( el ) aussieht liegt am Zeichensatz. Mit der Sprungmarke hast Du allerdings vollkommen Recht, ich habe nicht cc_SLT sondern cc_NE im Programm benutzt. Das Problem bleib allerdings bestehen, im Segment 8 läuft das Programm nicht, Im Segment 3 schon. Wie ich das Programm in Segment 8 gekriegt habe? Wie im Buch MSR mit C-Control II beschrieben, Hexcode in ein Integerarray geschrieben. Low und Highbyte selbstverständlich getauscht und vor dem Programmcode jede Menge Nops. Deshalb auch die Hohe Speicheradresse von dezimal 2000. Gru� Hansi ...und wie geschrieben, in Segment 3 funzt es. > Hallo Hansi, > > > > > 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 > > > > > > 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: > cmpil r2,#48000 ; Schleifenzähler erhöhen und mit Endwert vergleichen > jmpr cc_SLT, Loop1 > 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. > | ||
Antwort schreiben Antworten: Re: Speicherzugriff, Code im Segment 8 (von André H. - 5.11.2004 8:33) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 5.11.2004 13:21) Re: Speicherzugriff, Code im Segment 8 (von André H. - 8.11.2004 13:10) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 11.11.2004 10:28) Re: Speicherzugriff, Code im Segment 8 (von André H. - 11.11.2004 21:52) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 11.11.2004 22:37) Re: Speicherzugriff, Code im Segment 8 (von André H. - 11.11.2004 23:23) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 12.11.2004 7:31) Re: Speicherzugriff, Code im Segment 8 (von André H. - 19.11.2004 12:05) |