-
        

Ergebnis 1 bis 5 von 5

Thema: interrupt und RAM Positionen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    39
    Beiträge
    178

    interrupt und RAM Positionen

    Anzeige

    hi,

    habe hier bei einem relativen großen Programm ein Problem.

    leider äußert sich der Fehler immer anders so das ich ihn nur relativ schlecht beschreiben könnte ohne das ganze Programm zu erklären.

    definitiv hat dies aber mit dem Timer1 zu tun den ich bei einem M32 verwende um in eine SUB zu springen

    meine Frage lautet: wenn der Sprung erfolgt, muß man dann den Befehl

    disable interrupts und am schluß der SUB dann wieder enable interrupts verwenden?
    oder kann man diese enabled lassen?
    und ist die Position der Variablendeklaration beliebig oder sollte man sich da an eine bestimmt Reihenfolge halten (schreibt man z.B. auch alle Byte, Integer und Bits zusammen oder ist das prinzipell egal?)
    ----
    kurze Fehlerbeschreibung zu der Auswirkung auf meinem Grafikdisplay:
    einmal hatte ich ein Byte aus dem ERAM ausgelesen und in eine Variable im RAM geschrieben, funktionierte auch bis nach einer gewissen Zeit, dann stand anstelle einer einzelnen Ziffer eine 4-stellige Zahl auf dem Display.
    ich hatte verschiedene Teile im Programm umgeschrieben und auch die Position der deklarieren Variablen (also die Zeilen mit: Dim x as byte.. usw.) verschoben. Nun hatte ich z.B. den Effekt das nachdem einstellen des Datums dieses zwar kurzzeitig korrekt angezeigt wurde, die aber wiederrum auf eine unerklärlich zustandekommende Zahl eingestellt wurde.... Datum lautet dann z.B. 33.32.09 Uhrzeit: 33:32:09)

    wäre sehr dankbar für kompetene Antworten!

    Zapo.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Hi Zapo,
    ich kenne das Problem auch, es tritt gern bei großen Programmen mit zig Variablen auf. Meist hilft es schon die Werte für sw-stack framesize und hw-stack zu erhöhen ...

    zu den Interrupts, also wenn ich dich recht verstanden habe springst du im Interrupt innerhalb der ISR in eine subprozedur. Die wird, da ja die ISR noch nicht verlassen wurde ergo noch in der Interruptroutine ausgeführt, so als würde der Code in eben der ISR drin stehen. Wenn das so sein soll, dann kannste die enable disable- Geschichte sein lassen.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    39
    Beiträge
    178
    hi,

    also des mit dem Stack hab ich auch schon probiert, steht momentan auf:
    hwstack = 80
    swstack = 80
    framesize = 120

    allerdings muß ich zugeben das ich nicht genau weiß in welchen maße man diese Werte erhöhen sollte! kann mir da mal jemand genauer erklären falls es mit diesem Problem zu tun hat?

    während eines Interrupt springe ich nicht mehr in eine weitere SUB Routine. ich war nur der meinung, das ich evt. den Timer und oder die Interrupts global disablen sollte sobald der Sprung erfolgt ist und dann wieder eingeschaltet werden muß sobald die Prozedur abgearbeitet ist und die SUB am ende ist.

    Christian

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    zu den grössen gibts im Wiki einen Artikel:
    http://www.roboternetz.de/wissen/ind.../Bascom_Inside

    Wegen dem IRQ sperren/freigeben: Wenn eine ISR aufgerufen wird, sind die sowieso gesperrt, also muss man die nicht extra selber disablen.
    Eine ISR sollte nur so knapp wie möglich sein, damit sie schnell abgearbeitet werden kann, das aufrufen einer Sub kommt da nicht so gut.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    39
    Beiträge
    178
    okay, danke...wußte nicht das die dann sowieso gesperrt sind wenn die ISR aufgerufen wird...

    und wie gesagt, während die SUB des IRQs läuft springe ich nicht, wird nur ein zähler hochgezählt und beim erreichen eines bestimmten integer wertes der I2C Bus ausgelesen.

    danke schonmal....
    ich probiers mal weiter und lese mir nochmal den Artikel durch...

Berechtigungen

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