- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 5 von 5

Thema: Bitte um Hilfe bei C-Code aus unbekannter Quelle

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    .. ich versuche mich mal am Assembler Teil: ..
    Danke für Deine Mühe, das hilft mir schon mal etwas weiter. Die eigentlichen Assemblerbefehle hatte ich schon aus dem Studio4 rausgelesen; die hatte ich zwar nicht parat, aber in meinen AVR-Anfangszeiten hatte ich wenige, einfache Aufgaben (z.B. Servotester mit Potiabfrage etc) in Assembler programmiert. Daher sagten mir zB sbiw oder brne schon etwas. (Es gibt auch noch Rudimente zu 8086- oder Z80-Assembler . . . aus der Studienzeit).

    Code:
    ;Auszug aus Servotester; beispielhaft
      mc_init:    ;=== Initialisiere Mikrocontroller
                  ; PB0 (servo1) + PB3 (servo2) = Ausgang, PB4 (poti1) = ADC-Eingang
        ldi    r16,0b00001000    ;Ausgang (1) auf PB3, Eingang (0) auf PB4
        out    ddrb,r16          ;Datenrichtungsbits setzen, Port ist Ausgang
        ldi    r16,0b11100111    ;Datenrichtungsbits setzen
        out    portb,r16         ;  und initialisieren
        ret                     ;=====----->>>>>
    Unverständlich sind mir noch Zahlendarstellung dieser Art : rjmp .+8 , brne .-4 , brne .-12.

    Ebenso unverständlich ist mir noch der Zusammenhang zwischen Assemblercode und Kommentar wie hier :
    ........rjmp .+8 ; 0x40 <__SREG__+0x1>
    ........brne .-4 ; 0x3a <__CCP__+0x6>
    ........brne .-12 ; 0x38 <__CCP__+0x4>

    SREG hatte ich in der Studio4-Assemblerhilfe gefunden, ist klar. CCP dagegen gibts weder im Instruction Set Summary der Controllerdokumentation noch in der Studio4-Hilfe.

    Lücken über Lücken - auch die Zeilen
    ........sbiw %0,1
    ........\n\t
    ........brne 1b
    ........: "=w" (__c) : "0" (__c)
    sind geheimnisvoll.

    Ich sehe, dass ich sehr umfassende Wissenslücken zu Assembler habe. Daher sollte ich die Titelfrage ändern in: Wo kann man diese Fragen - und alle sonstigen Feinheiten - zu Assembler lernen? Buch? (www-)Tutorial? oder . . .

    Danke für die Aufmerksamkeit
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Hallo,

    Zitat Zitat von oberallgeier Beitrag anzeigen
    Unverständlich sind mir noch Zahlendarstellung dieser Art : rjmp .+8 , brne .-4 , brne .-12.
    Ich benutze immer das Instruction set
    http://ww1.microchip.com/downloads/e...set-manual.pdf

    Da sieht man, daß das Sprungziel bei den meisten Sprünge wie auch die Sprünge bei Verzweigungen wie bei brne relativ mit einer Konstanten k angegeben werden. Der Assembler/Compiler rechnet die Konstante anhand des Sprunglabels aus und trägt es in den Befehl ein. Die .+8 bzw .-4 ist die relative Sprungweite. Dahinter schreibt der Assembler nochmal die Programmcounter Adresse als absoluten Wert wie 0x3A oder so ein. Die relative Sprungweite scheint zu groß zu sein, hat aber vermutlich damit zu tun, daß der Programmcounter schon auf den nächsten Befehl zeigt.


    Ebenso unverständlich ist mir noch der Zusammenhang zwischen Assemblercode und Kommentar wie hier :
    ........rjmp .+8 ; 0x40 <__SREG__+0x1>
    ........brne .-4 ; 0x3a <__CCP__+0x6>
    ........brne .-12 ; 0x38 <__CCP__+0x4>

    SREG hatte ich in der Studio4-Assemblerhilfe gefunden, ist klar. CCP dagegen gibts weder im Instruction Set Summary der Controllerdokumentation noch in der Studio4-Hilfe.
    Der Compiler erzeugt auch eine .lst Datei. Dort findet man die Zuordnung der Namen zu Adressen unter DEFINED SYMBOLS ganz unten in der Datei.
    Die 0x38 beim letzen brne liegt 0x4 Adressen über der Adresse von __CCP__ (0x3a liegt 0x6 über __CCP__). __CCP__ war bei mir das MCUSR Register (Schulterzuck )
    Das gleiche mit __SREG__ . Wozu die Angabe gut ist? Keine Ahnung.


    Lücken über Lücken - auch die Zeilen
    ........sbiw %0,1
    ........\n\t
    ........brne 1b
    ........: "=w" (__c) : "0" (__c)
    sind geheimnisvoll.
    Das sind die Inline Assembler Geheimnisse/Syntax von C. Aufschluß könnte der Artikel im RN-Wissen geben:
    https://rn-wissen.de/wiki/index.php/...ler_in_avr-gcc

    Ich sehe, dass ich sehr umfassende Wissenslücken zu Assembler habe. Daher sollte ich die Titelfrage ändern in: Wo kann man diese Fragen - und alle sonstigen Feinheiten - zu Assembler lernen? Buch? (www-)Tutorial? oder . . .
    Da habe ich leider keine spezielle Empfehlung. Ich hatte meine ersten Assembler Erfahrungen mit dem C64. Jetzt versuche ich andere Beispielcodes zu verstehen bzw wie andere Authoren bestimmte Probleme lösen und nutze für meine asm-Routinen hauptsächlich das o.g. Instruction Set Manual.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    .. Ich benutze immer das Instruction set ..
    Danke, prima, das AVR-Instruction-Set-Manual hatte ich noch nicht. Nie gesehen. DAS ist ja wirklich sehr informativ - viel Lesestoff für diesen Winter *gg*. Dann noch der RN-Wissen-Abschnitt. Ja, so wirds wohl durchsichtig.

    Erstmal vielen, vielen Dank!
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Code läuft nicht feherfrei, bitte um Hilfe! Input Capture und UART nicht gleichzeitig
    Von Accenter im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 04.06.2013, 21:00
  2. Antworten: 0
    Letzter Beitrag: 29.01.2013, 20:33
  3. [ERLEDIGT] Eine Bitte bezüglich des Code-Tag Buttons
    Von TobiKa im Forum Anregungen/Kritik/Fragen zum Forum und zum Wiki RN-Wissen
    Antworten: 4
    Letzter Beitrag: 23.03.2011, 15:44
  4. C Anfänger! Bitte code angucken
    Von Freakster235 im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 21.02.2008, 17:10
  5. Schaut euch mal bitte diesen Code an:
    Von jagdfalke im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 26.11.2005, 20:49

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests