Forum: Compiler & IDEs SUART geht/geht nicht


von Sascha Biedermann (Gast)


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

von Sascha Biedermann (Gast)


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

von Sascha Biedermann (Gast)


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

von Sascha Biedermann (Gast)


Lesenswert?

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

MfG
Sascha

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.