-         

Ergebnis 1 bis 3 von 3

Thema: UART per Interrupt

  1. #1
    Neuer Benutzer Öfters hier Avatar von sunshine
    Registriert seit
    12.06.2006
    Beiträge
    14

    Rotes Gesicht UART per Interrupt

    Anzeige

    Hallo,

    ich nutze Codevision (gekaufte Version ohne Einschränkungen) und auf meinem Atmega128 2 UART Schnittstellen.

    Diese habe ich mit dem Codewizard mit Interrupts erstellt. Ich habe den Interrupt jeweils für den Receive und für den Transmitter Buffer auf 8 gestellt.

    Kann mir wer sagen, welche Auswirkungen die Größe des Buffers macht?

    Muss ich irgendwas spezielles beachten, oder kann ich die Funktionen getchar, getchar1, putchar und putchar1 wie gewohnt benutzen und über die Interruptkonfiguration wird der Rest automatisch geregelt?

    Danke, ich nutze Interrupts zum ersten Mal....

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    18.03.2011
    Beiträge
    8
    naja...
    das Problem hatte ich im vorletzten Semester erst... Buffergröße vs. normaler Speicher...
    bei 1kb Speicher und viel Datenmüll müssen die Buffer halt kleiner ausfallen

    im Sendebuffer legst du alles ab, was du senden willst...
    wir haben da ein Ringbuffersystem aufgebaut gehabt, so dass man immer max. Sendeplatz nutzen konnte - nie Speicher blockiert... egal btt
    der Buffer ist dafür da, dass du die Daten direkt erzeugen kannst und darin ablegen kannst... die Daten können dann direkt - sobald die Leitung frei ist - übertragen werden...
    Vorteil:
    Daten können erstmal komplett erzeugt werden, bevor man sie sendet
    µC muss nicht sinnlos rumidlen um den richtigen Moment für's Senden abzupassen

    Empfangsbuffer ist genau andersrum
    Daten, die ankommen, werden erstmal dort abgelegt und können später vom Programm verarbeitet werden
    Vorteil:
    Routine kann erstmal durchlaufen (sonst müsste man erstmal Register freiräumen, ...)
    µC muss nicht ständig nachgucken, ob was ankommt und dann ein Register irgendwo hin schreiben, weil ja gleich wieder was ankommen könnte
    (wenn man das mit Buffer ganz extrem sieht) µC muss nicht in nem Status festhängen und nichts tun, weil er auf den Rest eines Pakets wartet...

    Die Buffergröße liefert ein wenig Bequemlichkeit... betrachten wir es mal aus der Sicht:

    Warum die Größe wichtig ist/Wann sollte man ihn vergrößern?
    • wenn die Datenpakete größer sind und man sie komplett braucht (sonst müsste man sie in einen anderen Buffer zwischensichern) [Beispiel: Crypto-Coprozessor für Verfahren mit Blocklänge]
    • wenn die Anzahl der Pakete pro Zeit "groß" ist [Überlauf durch Stoßzeiten, UART eigentlich nur, wenn man nicht abräumt]
    • wenn das Programm geschützte Bereiche hat, in denen es auf Bufferinput nicht reagiert [z.B. ABS oder sowas, wo Parameter warten müssen]
    • wenn man sich sicher sein muss, dass kein Paket verloren geht [Daten die beim Sender weggeworfen werden nach dem Senden]


    Kenne die Funktionen nicht, hatten uns da ne eigene Lib an Funktionen geschrieben, weil wir die Pakete unterschiedlich interpretiert haben... (Zeitstamp, Text, Messwerte, ...)... sollten aber auch mit veränderter Buffergröße funktionieren...

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von steveLB
    Registriert seit
    24.10.2005
    Beiträge
    481
    Codevision AVR, hat den Codewizzard, vergleiche doch einfach den Code, einmal mit 8 und einmal mit mehr, dann siehst genau was der Unterschied ist. Ich würds auf 8 lassen, hast du die Help von Codevision mal aufgerufen und dort mal gesucht ?
    [X] <-- Nail here for new Monitor

Berechtigungen

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