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
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
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
...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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.