- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: WinAVR,AVR Studio, Warnmeldungen , komische Fehler..?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576

    WinAVR,AVR Studio, Warnmeldungen , komische Fehler..?

    Anzeige

    Powerstation Test
    Hallo Leute

    Habe da ein bisschen ein komisches Problem:

    Benutze neueste Version von WinAVR mit AVR Studio.
    Prog. ein MEGA16 über STK500

    Schreibe da gerade ein bisschen an einem Programm für einen kleinen Robi..

    Das Programm besteht derzeit aus 3 Teilen die alle unter Source-File im AvrStudio liegen.
    Eines ist für das Grafik LCD (Sharp) eines als Hauptprogramm und eines für die Motorstersteuerung. (derzeit gerade mit PWM)

    Die Ausgabe am LCD (in Text) funktionierte bis jetzt immer einwandfrei.
    Auf einmal kommen teilweise wirre Zeichen.
    Jetzt bin ich draufgekommen, dass wenn ich den Compiler optimieren lasse, sind diese Anzeigefehler weg.

    Kennt jemand diese Probleme ?

    Jetzt habe ich mir mal die Warnungen angeschaut..
    Schätze mal, das hängt irgendwie zusammen
    Hier mal ein Auszug:

    ../sharp_lcd_v2.c:166: warning: left shift count >= width of type
    ../sharp_lcd_v2.c:168: warning: left shift count >= width of type
    ../sharp_lcd_v2.c:172: warning: implicit declaration of function 'Kontroll_Register'
    ../sharp_lcd_v2.c: At top level:
    ../sharp_lcd_v2.c:190: warning: conflicting types for 'Kontroll_Register'
    ../sharp_lcd_v2.c:172: warning: previous implicit declaration of 'Kontroll_Register' was here
    ../sharp_lcd_v2.c: In function 'LCD':
    ../sharp_lcd_v2.c:251: warning: suggest parentheses around comparison in operand of |
    ../sharp_lcd_v2.c:251: warning: suggest parentheses around comparison in operand of |
    ../sharp_lcd_v2.c:251: warning: suggest parentheses around comparison in operand of |
    avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -DF_CPU=8000000UL -O1 -fsigned-char -MD -MP -MT Hauptprogramm.o -MF dep/Hauptprogramm.o.d -c ../Hauptprogramm.c
    ../Hauptprogramm.c: In function 'main':
    ../Hauptprogramm.c:48: warning: implicit declaration of function 'Motor_init'
    ../Hauptprogramm.c:50: warning: implicit declaration of function 'LCD_init'
    ../Hauptprogramm.c:55: warning: implicit declaration of function 'Display_fuellen'
    ../Hauptprogramm.c:56: warning: implicit declaration of function 'LCD'
    Vielleicht könnt Ihr mir da ein paar Tipps geben, wo ich da ansetzen kann?
    Leider schaut es mit dem englisch nicht so gut aus und auch im C bin ich erst Anfänger , Aber der Wille ist da

    Vielleicht habt Ihr ein paar Tipps für mich ?!
    L.G. Roberto

    Ps.: Weis schon, ohne Code ist da blöd einen Rat zu geben, aber will auch nicht den ganzen Code da reinmüllen.
    Bei bedarf vielleicht auszugsweise....

    Nachtrag:
    Zeile 166:
    LCD_Adress_Port &= ~(1<<_resb);
    Zeile 172:
    Kontroll_Register(0xf0);
    Zeile 190:
    void Kontroll_Register(int Register)
    {
    LCD_Bus_Port=Register; //Register-Daten anlegen
    LCD_Adress_Port |= rs; // org. war rs=1; //Registerauswahl (Low = Datenregister, High = Controllregister)
    LCD_Adress_Port &= ~_csb; // org. war _csb=0; //Display Auswählen (Low Aktiv)
    LCD_Adress_Port &= ~_wrb; // org. war _wrb=0; //Write (Low ist schreiben)
    LCD_Adress_Port |= _wrb; // org. war _wrb=1; //Nicht mehr schreiben
    LCD_Adress_Port |= _csb; // org. war _csb=1; //Display nicht mehr auswählen
    }
    Zeile 251:
    if (Zeile == 1|Zeile == 3 | Zeile ==5 | Zeile ==7)
    .
    .
    .

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Hi!

    Zu Zeile 166: Du scheinst hier weiter zu schieben als der Datentyp groß ist.
    Wenn z.B. LCD_Adress_Port ein 8-bit Datentyp ist und _resb größer 8 ist, erhälst Du diese Warnmeldung.

    Zu Zeile 172: Du benutzt die Funktion Kontroll_Register(), bevor sie deklariert ist. Wenn Du an den Anfang der Datei einen Prototyp setzt (void Kontroll_Register(int); ), sollte der Fehler weg sein. Normalerweise gehören die Prototypen aber in die zugehörige Header-Datei.

    Zu Zeile 190: Ich schätze mal, dass LCD_Bus_Port ein 8-bit Datentyp ist. Dann muss Register auch ein 8-bit Typ sein.

    Zu Zeile 251: Der Compiler schlägt Dir sinnvollerweise vor, Klammern um die Vergleichsoperationen zu legen, also so:
    if ((Zeile == 1) | (Zeile == 3) | (Zeile ==5) | (Zeile ==7))

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo,

    Zeile 251 müßte man so schreiben:
    Code:
    if (Zeile == 1 || Zeile == 3 || Zeile == 5 || Zeile == 7)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    @marvin: Stimmt, das hatte ich glatt übersehen.
    | ist bitweises Oder, || logisches Oder.
    Trotzdem sind Klammern hier schon alleine der Übersicht wegen sinnvoll.

    askazo

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    Hallo
    Danke für Eure Antwort .
    Hat ein bisschen gedauert. Musste das erst noch umsetzen..

    Habe jetzt alle(fast) Warnungen heraus bekommen.
    (Warnt das er nicht optimiert hat )

    Irgendwie scheint mir das C schon ein bisschen unsicher..

    Inzwischen, mit noch ein paar Warnungen, ging das Display wieder normal(Ohne Optimierung)
    Jetzt sind alle Warnungen raus und das Display geht wieder nicht richtig (mit optimieren )

    Wenn ich optimiere (-O1)geht wieder alles normal

    Müsste es nicht ohne Optimieren auch gehen
    (habe mal wo gelesen, dass das Simulieren nur ohne optimieren gehen soll..),
    oder sollte man sowieso immer optimieren?


    Wegen den Prototypen:

    Muss ich in jedem C-Teil (File) jeden Block den ich verwende, vorher als Prototypen deklarieren (schön umständlich !)
    Auch wenn der Block im anderen C-Teil liegt?(wenn ich ihn benutze)
    Warum kann sich der Compiler das nicht selber zusammensuchen ?

    ----
    l.G. Roberto

    Ps.:
    Ohne Optimierung ist das Programm 7664 bytes
    Mit -o1 = 2376 bytes
    Mit -02 = 2420 bytes
    Mit -03 = 2702 bytes
    Mit -Os = 2342 bytes

Berechtigungen

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

Solar Speicher und Akkus Tests