Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Speicherzugriff, Code im Segment 8 Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 28.10.2004 23:46)
Als Antwort auf Speicherzugriff, Code im Segment 8 von Hansi - 23.10.2004 23:50
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
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.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Speicherzugriff, Code im Segment 8 (von Hansi - 1.11.2004 13:32)
    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)