www.mikrocontroller.net

Forum: GCC Ratlosigkeit beim Senden von Array Inhalt


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Pier S. (bigpier)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Leute,
ich bin schon wider mit meinem Latein am Ende.
Etwas in meinen Augen Idioten sicheres Programm will einfach nicht 
klappen.
Ich Sende über die Uart mit einer for Schleife einmal denn 
Schleifenzähler und einmal denn Array  Inhalt.
Der Schleifenzähler kommt jedes mal richtig an hingegen der Array 
Inhalt nur bis Position 5, der Rest Zufall Zahlen.
Ich verstehe einfach nicht was ich falsch mache.

Danke für Eure Unterstützung

Peter

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
SUART.c:

>static u8 srx_in;
>static u8 srx_out;
>...
>void uputchar( u8 c )        // transmit byte
>{
>  u8 i = stx_in;
>
>  ROLLOVER( i, STX_SIZE );
>  stx_buff[stx_in] = ~c;     // complement for stop bit after data
>  while( i == vu8(stx_out)); // until at least one byte free
>                             // stx_out modified by interrupt !
>  stx_in = i;
>}

Ich würde zuerst den Abschnitt Interruptfeste Programmierung im 
Artikel Interrupt im Code implementieren. Moderne AVR-GCC sind 
optimierfreudiger als ältere Versionen und was früher ging, kann heute 
haken.

Konkret: Die gemeinsam von IRQ-Code und IRQ-Code benutzten Variablen 
srx_in und srx_out volatile kennzeichnen und den nicht 
unterbrechbaren Block (quasi die komplette Funktion) atomar.

Wenn es dann immer noch hakt, dann hilft's nix und man muss sich in die 
Fremdlibrary "Software UART with FIFO, using T1" von Peter Dannegger 
reinfuxen.

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> srx_in und /srx_out/
Es sind natürlich stx_in und stx_out gemeint, sorry.

Autor: Pier S. (bigpier)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke für deine Antwort was ich aber nicht verstehe warum kommt die 
Variable i immer richtig an und der Array Inhalt nicht ?
for ( i=0;i<15;i++)
        {
          uputchar(i);
          uputchar(arraytest[i]);
        }

Gruß
Peter

Autor: Pier S. (bigpier)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Auch Strings kann ich problemlos 100mal hintereinander senden ohne denn 
kleinsten Fehler.
Ich bin einfach ratlos!

Ich hoffe es kann mir jemand helfen.

Gruß

Peter

Autor: hp-freund (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ATTiny26?
Bist Du sicher das das alles in 128 Byte RAM passt?
Vielleicht sind deine Zufallszahlen schon der Stackinhalt...

Autor: Pier S. (bigpier)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ja eigentlich bin ich sicher nach dem copillieren mein das Avr Studio 
Folgendes

Device: attiny26
    Program:    1684 bytes (82.2% Full)
    (.text + .data + .bootloader)
    Data:        109 bytes (85.2% Full)
    (.data + .bss + .noinit)

Sollte also passen?

Gruß

Peter

Autor: Frank M. (ukw) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Pier S. schrieb:
> Ja eigentlich bin ich sicher nach dem copillieren mein das Avr Studio
> Folgendes
>
> Device: attiny26
>     Program:    1684 bytes (82.2% Full)
>     (.text + .data + .bootloader)
>     Data:        109 bytes (85.2% Full)
>     (.data + .bss + .noinit)
>
> Sollte also passen?

Nein, passt höchstwahrscheinlich nicht, denn da bleiben nur 19 Bytes für 
den Stack übrig. Allein schon, wenn Du eine Funktion mit mehreren 
Argumenten aufrufst oder eine Funktion mehrere lokale Variablen 
verwendet, wirds sofort krachen.

Autor: Pier S. (bigpier)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Wie viel muß frei bleiben um auf Nummer sicher zu gehen?

Gruß

Peter

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hmm, 128 Bytes...

Der Sendepuffer der Library hat 20, der Empfangspuffer 15, static Vars 
8,... abzüglich .data und .bss sind noch mickrige 19 Bytes RAM frei. Das 
ist ein heisser Tipp von hp-freund!

>Autor: hp-freund
>ATTiny26?
>Bist Du sicher das das alles in 128 Byte RAM passt?
>Vielleicht sind deine Zufallszahlen schon der Stackinhalt...

#if defined(_AVR_ATtiny26_)
//#warning "Attiny26"
#endif

:-)

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> Wie viel muß frei bleiben um auf Nummer sicher zu gehen?

Mindestens so viel, dass alle PUSH register in den ISRs (13-15! Bytes) 
plus die lokalen Variablen plus Rücksprungadressen (2 Bytes pro 
Tiefenschritt) Platz auf dem Stack haben.

Autor: Pier S. (bigpier)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das finde ich jetzt SCHADE um nicht BESCHEIDEN zu sagen!!!

Leider war ich der Meinung das ich die Anzeige des Speichers voll 
ausnutzen kann.
Dummheit schützt vor Strafe nicht!!!!

Da werde ich meinen Plan nochmal überarbeiten müssen!

Danke und Gruß
Peter

Autor: Jackfritt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Gib's da keine Möglichkeit das einen der Compiler oder sowas drauf 
hinweisst. Mich würde nich wundern wenn ich alles nächstes in diese 
Falle tappe.
 Gruß
Jörg

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Jackfritt schrieb:
> Gib's da keine Möglichkeit das einen der Compiler oder sowas drauf
> hinweisst.

Tut das System doch im Rahmen seiner Möglichkeiten.
82% bei 128 Bytes Speicher insgesamt ist nun mal schon sehr hoch.

> Mich würde nich wundern wenn ich alles nächstes in diese
> Falle tappe.

Das Mitdenken auf Maschinen abzuwälzen hat noch nie funktioniert.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net