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

Re: "Variablen" in ASM die 2. Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 19.08.2004 8:33)
Als Antwort auf Re: "Variablen" in ASM die 2. von Thomas - 18.08.2004 19:34
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Thomas,

> Und hier sollte jetzt wohl mein Verständnisproblem liegen: Ich denke:
>    
>    zahl  equ  11111111b
>    

> definiert eine Konstante, die im Code in Segment 3 abgelegt wird und auf die ich mit

Nein. "zahl" wird hier nicht in Segment 3 abgelegt.
equ heiÃ? hier equal, was hier die bedeutung von "gleichbedeutend" hat.
"zahl" ist hier also nur ein Synonym für die Zahl 011111111b.
Ob Du nun mov  R12,#zahl oder mov  R12,#011111111b schreibst,
ist exakt dasselbe.
Wenn Du Konstante, nicht änderbare Daten in ein Flash-Segment ablegen willst, mu�t
Du z.B. db verwenden.

>    
>    mov  R12,#zahl   //Schreibt Speicheradresse in R12


Hier wird die Zahl 0b11111111 in R12 geschrieben, keine Speicheradresse.

>    exts #3,#1       //??? 3 oder 8 ???

Segment 3 ist das Flash-Segment in dem Du arbeitest, Segment 8 ist der RAM.

>    movb RL1,[R12]   //Schreibt Wert von zahl in RL1


Stimmt so leider auch nicht.
Du Schreibst hier den Inhalt von Byte 0b11111111 des Flash-Seg3 in RL1.

>    shr  R1,#1
>    

> zugreifen kann, um anschlieÃ?end wieder mit
>    
>    exts  #3,#1
>    movb  [R12],RL1  //schreibt Wert aus RL1 an Speicheradresse von zahl
>    


Hier versuchst Du auf das Flash-Byte 0b11111111 schreibend zuzugreifen.
Aber so kann man nicht auf den Flash zugreifen.

> den neuen Wert an die Speicheradresse zu bringen und dann mit
>    
>    mov  PL1,#zahl
>    

> auf den davor geschrieben Wert zugreifen zu können. Somit sollte die Konstante zahl nun den Wert
> 11111110 enthalten, was sie ja aber anscheinend nicht tut, da ja immer noch alle 8 Portausgänge
> auf 'ON' gesetzt sind.

Mit dem letzten mov PL1, #zahl schreibst Du wieder die zahl 0b11111111 in P1L.

Du kannst zahl  equ  011111111b mit const zahl=0b11111111; in C2 vergleichen.
In C2 werden Integer(&Byte)-Konstanten auch nicht im Konstanten abgeleget, sondern
als Immediate-Data direkt bei der verwendeten Position verwendet.

Wenn Du wirklich einen Temporären Speicher benötigst, mu� Du den RAM benutzen.
Dazu benötigst Du entweder Segment8 (64kB-RAM) oder etwas vom unbenutzen RAM in Segment0.
(freie RAM-Bereiche in Seg0 siehe "Buch MSR mit CC2")

Ich gehe davon aus, daÃ? Du Deine Routine aus C2 heraus aufrufst und irgendwann wieder
zurückspringen willst. Dann darfst Du Segment8 nicht frei verwenden, sondern mu�t z.B.
eine Bytearray definieren und als Parameter dem ASM-Aufruf übergeben. Die Startadresse
des Arrays kannst Du mit der OS-Pop-Routine dann vom Threadstack holen.
Du kannst dann den kompletten Speicherbereich des definierten Arrays in ASM frei nutzen.

> Zur EDE:
> Ich arbeite nicht direkt mit der EDE, sondern nur mit dem Konsolenassembler, da die EDE unter Linux
> nicht richtig läuft. Für den Konsolenassembler habe ich jedoch noch keine Einstellungsmöglichkeiten
> gefunden.

Das erklärt natürlich einiges. :-)
Hast Du in Deinem Linux-System einen Windoofs-Emulator ? Denn mit den Tasking-Tools
lässt es sich einfacher programmieren. Auch ist eine nette Hilfe zu ASM dabei.

Allerdings frage ich mich, warum Du Deinen Lauflichtwert unbedingt in einen Speicher schreiben
willst. Die Register würden schlie�lich auch reichen.
Genaugenommen sind die Register R0 bis R15 die Variablen in ASM mit denen man direkt arbeitet.
Also würde Dein Programm eigentlich auch so seinen Zweck erfüllen:

lauflicht       proc far
        ;alle Ports auf Ausgang setzen
        extr#1
        mov     DP1L,#0FFh
        ;Wert in R1 laden
        mov     R1,#080h
        mov     R2,#8
        loop1:
        ;Ausgabe
        mov     P1L,R1
        ;Shift-Rechts
        shr     R1,#1
        mov     R3,#65000
loop2:
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        cmpd1   R3,#0
        jmpr    cc_NE,loop2

        cmpd1   R2,#0
        jmpr    cc_NE,loop1

        pop R1  ; nötig für Rücksprung in C2-Programm
        pop R1
        rets    ;Ruecksprung
lauflicht       endp



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: "Variablen" in ASM die 2. (von Thomas - 20.08.2004 16:00)
    Re: "Variablen" in ASM die 2. (von André H. - 20.08.2004 22:14)