mikrocontroller.net

Forum: Compiler & IDEs SUART geht/geht nicht


Autor: Sascha Biedermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich habe ein Prob mit der SUART-Lib von den AVR-Freaks (Project 59).
Auf meinem Mega32 sind ca. 50% Flash belgt. Wenn ich nun ein Zeichen
Empfange, dann landet es nicht im Empfangs-Puffer-Array. Aber die
Zähler-Variable meint, dass er was empfangen hat.
Wenn ich ein paar Files weg lasse (also die Code-Größe reduziere) dann
klappt's.
Kann es sein, dass ASM-Sprünge (oder so) nicht mehr funzen, wenn das
SUART-Modul hinter einer best. Position im Flash liegt ?
Kann ich beim linken angeben, dass er das SUART-Modul weiter vorn im
Flash platzieren soll?

Sonst nocht irgentwelche ideen?


Ich habe leider keine Ahnung von Asm, sons würde ich selbst mal drin
rum wühlen g

MfG
Sascha

Autor: Sascha Biedermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal noch eine wenig im ASM-Code gesucht, und ich glaube dass
dieser schnipsel nicht so recht funktioniert:

suart_wr_buf_0:  sts     rx_c, r24
                 lds     s_index, suart_rx_count

                 lds     s_temp1, suart_receive_string
                 cpi     s_temp1, 1
                 brne    suart_wr_buf_1


                 cpi     s_Rxbyte, RX_TERMINATION_CHAR
                 breq    suart_term_recv0

suart_wr_buf_1:  cpi     s_index, SUART_BUF_SIZE
                 breq    suart_buf_reset

suart_wr_buf_2:  ldi     z_low, lo8(suart_rx_buffer)
                 ldi     s_temp1, hi8(suart_rx_buffer)
                 add     z_low, s_index
                 adc     z_high,s_temp1
suart_wr_buf_3:  st      Z+, s_Rxbyte
                 inc     s_index
                 clr     s_temp1
                 st      Z, s_temp1

Wenn ich das richtig, sehe dann kopiert die 1. Zeile das Empfangene
Zeichen aus dem Register in der Variable rx_c. Das Funktioniert auch,
soll heissen: Wenn ich im C-Prog die variable rx_c ausgebe, dann
erhalte ich das empfangene Zeichen.

Nur das Char-Array "suart_rx_buffer" bleibt leer. Die Variable
suart_rx_count wir auch korrekt incrementiert.

suart_receive_string ist 0....

So, liebe ASM-Freude, währe schönt, wenn ihr etwas erkennen würdet.

MfG
Sascha

Autor: Sascha Biedermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So.. ich habe eine super-exterm-schnell-asm-crashkurs gemacht.

Nachdem ich dann endlich verstanden habe, was der Code macht, ist mir
folgendes aufgefallen:

suart_wr_buf_2:  ldi     z_low, lo8(suart_rx_buffer)
                 ldi     s_temp1, hi8(suart_rx_buffer)
                 add     z_low, s_index
                 adc     z_high,s_temp1

In der letzten Zeile wird zu z_high s_temp1 addiert, aber es ist ja
noch garnicht sicher was in z_high drin steht. Die Simulation zeigt,
das dort 2A drin steht, also wird mein Zeichen irgentwo ins Nirvana
geschrieben.

Habe also noch ein:
ldi     z_high, hi8(0x0000)
davor gebastelt, jetzt geht's.

freu

MfG
Sascha

Autor: Sascha Biedermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und bevor ich es vergesse:
Ist das so richtig gedacht? Kann sich mal einer von den ASM-Profis dazu
äußern ?

MfG
Sascha

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.