- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Adressierung - Verständnisproblem

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.234
    Anzeige

    Powerstation Test
    Die ersten Speicherplätze im Programmteil werden tatsächlich Hardwaremässig angesteuert.
    Ich hab das zu meinen Assemblerzeiten immer so gelöst, das ich die komplette Interrupttabelle für den Controller immer an den Anfang des Programms gestellt habe.
    Wenn man jetzt noch für alle! möglichen Interrupts ein Label fabriziert in dem nur noch der Befehl RETI ausgeführt wird kann eigentlich nichts unvorhersehbares passieren.
    Man muß auch darauf achten, das in der Vektortabelle die richtigen Sprungbefehle also JMP oder RJMP stehen, weil das von Controller zu Controller verschieden sein kann.

    Das Hauptprogramm beginnt mit dieser Methode direkt nach der Interruptvektortabelle und kann somit nicht aus versehen durch einen Interrupt angesprungen werden.

    Eine weitere praktizierte Methode ist, für nicht benutzte Interrups in die Tabelle einfach den Befehl RETI einzutragen, aber das gefällt mir persönlich nicht besonders.

    Die nächste Möglichkeit ist nur einzelen Interruptvektoren mit einem vorangestellten .org zu versehen.
    Das halt ich persönlich für etwas gefährlich, vertut man sich auch nur um eine Stelle landet der Controller im Nirwana. Möglich ist es aber.

    Mehr Möglichkeiten fallen mir auf Anhieb nicht mehr ein. Praktiziert werden alle 3 Methoden.

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Zitat Zitat von wkrug
    Die ersten Speicherplätze im Programmteil werden tatsächlich Hardwaremässig angesteuert.
    Ich hab das zu meinen Assemblerzeiten immer so gelöst, das ich die komplette Interrupttabelle für den Controller immer an den Anfang des Programms gestellt habe.
    Wenn man jetzt noch für alle! möglichen Interrupts ein Label fabriziert in dem nur noch der Befehl RETI ausgeführt wird kann eigentlich nichts unvorhersehbares passieren.
    Man muß auch darauf achten, das in der Vektortabelle die richtigen Sprungbefehle also JMP oder RJMP stehen, weil das von Controller zu Controller verschieden sein kann.

    Das Hauptprogramm beginnt mit dieser Methode direkt nach der Interruptvektortabelle und kann somit nicht aus versehen durch einen Interrupt angesprungen werden.

    Eine weitere praktizierte Methode ist, für nicht benutzte Interrups in die Tabelle einfach den Befehl RETI einzutragen, aber das gefällt mir persönlich nicht besonders.

    Die nächste Möglichkeit ist nur einzelen Interruptvektoren mit einem vorangestellten .org zu versehen.
    Das halt ich persönlich für etwas gefährlich, vertut man sich auch nur um eine Stelle landet der Controller im Nirwana. Möglich ist es aber.

    Mehr Möglichkeiten fallen mir auf Anhieb nicht mehr ein. Praktiziert werden alle 3 Methoden.
    Genau so wurde uns das heute auch erklärt. Genau so. Danke.

    Code:
    .org $0
    
    .org $2
    rjmp Progstart
    Beim Reset wird der Programm-Counter(-Zeiger) an die Adresse Null gesetzt, danach auf die Adresse zwei an die der Jump Befehl an das Label "Progstart steht" und danach kommt die Interrupt Tabelle die festgelegt im Handbuch steht und nach dieser Tabelle wird ein
    Code:
    .org $45 ; oder 40, willkür laut Prof
    Rangestellt das den PCZ bzw den LInker an diese Adresse setzt an der dann auch das Programm startet. Ist nicht Pflicht sondern eigentlich aufgabe des Linkers, aber: Es kann passieren das man ausversehen ein Interrupt anspringt das man gar nicht anspringen wollte weil eben der PCZ gerade an der Adresse $18 ist an der eigntl ein Interrupt stehen müsste. BEsser die vollständige Tabelle vorranstellen und ruhe haben.

    Darüberhinaus war die Verwirrung mit der Adressierung und benennung der Interrupts und das Anspringen von Leeren Subroutinen für die Katze. Das Musterprogramm was wir bekamen ist einfach das Grundgerüst für jeden der 3 Versuche das wir immer benutzen sollen. Wir müssen es nur erweitern, zB in V1A3 um einen Timer Interrupt der ja schon vorgegeben ist. In der Tabelle wie auch als Subroutine.


    Und ja, ich weis das ich kein Erklärbär bin. Ich denke sehr Komplex (kompliziert) und kann das schlecht enddröseln ...

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress