-         

Ergebnis 1 bis 8 von 8

Thema: Lib 2.71 und LCD Code

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847

    Lib 2.71 und LCD Code

    Anzeige

    Hallo,

    ich wollte mal den Programmcode aus Band 2 "Asuro bekommt ein Gesicht"

    Code:
    /*******************************************************************************
    *
    * File Name:   aufgabe3.c
    *
    * Lösung zur Aufgabe <ASURO bekommt ein Gesicht> aus Mehr Spaß Mit ASURO, Band II
    *
    * Project  :   ASURO-LCD extension-module
    *
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * 1.00		30.5.06		martin hofmann		build
    *
    *
    * Copyright (c) 2007 Martin Hofmann
    *****************************************************************************/
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   any later version.                                                    *
     ***************************************************************************/
    
    #include "asuro.h"
    #include "lcd.h"
    #include "i2c.h"
    
    const unsigned char Eye_L[8] PROGMEM = {0X00,0X00,0X1C,0X00,0X04,0X00,0X01,0X03};					  
    const unsigned char Eye_R[8] PROGMEM = {0X00,0X00,0X07,0X00,0X04,0X00,0X10,0X18};
    
    const unsigned char MouthA[8] PROGMEM = {0X00,0X00,0X02,0X01,0X00,0X00,0X00,0X00};
    const unsigned char MouthB[8] PROGMEM = {0X03,0X01,0X00,0X00,0X18,0X07,0X00,0X00};
    const unsigned char MouthC[8] PROGMEM = {0X18,0X10,0X00,0X00,0X03,0X1C,0X00,0X00};
    const unsigned char MouthD[8] PROGMEM = {0X00,0X00,0X08,0X10,0X00,0X00,0X00,0X00};
    
    
    void smily_load(void)		//Nötige Sonderzeichen in das Display laden
    {
    	lcd_setchar(0,Eye_L);
    	lcd_setchar(1,Eye_R);
    
    	lcd_setchar(4,MouthA);
    	lcd_setchar(5,MouthB);
    	lcd_setchar(6,MouthC);
    	lcd_setchar(7,MouthD);
    }
    
    void smily_draw(void)		//Smily mit Sonderzeichen auf dem Display darstellen
    {
    	lcd_home();
    	lcd_gotoxy(2,0);
        lcd_putc('(');			//linkes Ohr
    	lcd_putc(0);			//linkes Auge
    	lcd_putc(1);			//rechtes Auge
    	lcd_putc(')');			//rechtes Ohr
    
    	lcd_gotoxy(2,1);
    	lcd_putc(4);			//Mund A
    	lcd_putc(5);			//Mund B	
    	lcd_putc(6);			//Mund C
    	lcd_putc(7); 			//Mund D
    }
    
    int main(void)
    {
    	Init();										//Initialisiert ASURO
    	lcd_init(LCD_DISP_ON);			//Initialisiert das Display Modul
    	
    	smily_load();
    	smily_draw();
    	
    	for(;;);
    	return 0;
    }
    mit AVR Studio unter der Lib 2.71 kompilieren und bekomme eine Mega-Liste von Fehlermeldungen:

    Code:
    Build started 7.2.2008 at 10:26:31
    -------- begin --------
    avr-gcc --version
    avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
    Copyright (C) 2007 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    avr-gcc -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=aufgabe3.o aufgabe3.o asuro.o i2c.o pcf8574.o lcd.o   --output aufgabe3.elf -Wl,-Map=aufgabe3.map,--cref -lm
    i2c.o: In function `i2c_read':
    i2c.c:(.text+0x4a): undefined reference to `sbi'
    i2c.c:(.text+0x54): undefined reference to `cbi'
    i2c.c:(.text+0x60): undefined reference to `cbi'
    i2c.c:(.text+0x76): undefined reference to `sbi'
    i2c.c:(.text+0x84): undefined reference to `cbi'
    i2c.c:(.text+0x90): undefined reference to `sbi'
    i2c.c:(.text+0x9c): undefined reference to `cbi'
    i2c.o: In function `i2c_write':
    i2c.c:(.text+0xc8): undefined reference to `sbi'
    i2c.c:(.text+0xe4): undefined reference to `cbi'
    i2c.c:(.text+0xf0): undefined reference to `sbi'
    i2c.c:(.text+0xfc): undefined reference to `cbi'
    i2c.c:(.text+0x112): undefined reference to `sbi'
    i2c.c:(.text+0x11c): undefined reference to `cbi'
    i2c.c:(.text+0x128): undefined reference to `cbi'
    i2c.o: In function `i2c_start':
    i2c.c:(.text+0x154): undefined reference to `sbi'
    i2c.o: In function `i2c_stop':
    i2c.c:(.text+0x16a): undefined reference to `sbi'
    i2c.c:(.text+0x174): undefined reference to `sbi'
    i2c.c:(.text+0x180): undefined reference to `cbi'
    i2c.c:(.text+0x18c): undefined reference to `cbi'
    i2c.o: In function `i2c_rep_start':
    i2c.c:(.text+0x19e): undefined reference to `sbi'
    i2c.c:(.text+0x1aa): undefined reference to `cbi'
    i2c.c:(.text+0x1b6): undefined reference to `cbi'
    i2c.c:(.text+0x1c2): undefined reference to `sbi'
    i2c.o: In function `i2c_init':
    i2c.c:(.text+0x1d8): undefined reference to `cbi'
    i2c.c:(.text+0x1e2): undefined reference to `cbi'
    i2c.c:(.text+0x1ec): undefined reference to `cbi'
    i2c.c:(.text+0x1f6): undefined reference to `cbi'
    lcd.o: In function `lcd_puts_p':
    lcd.c:(.text+0x6c): undefined reference to `PRG_RDB'
    make: *** [aufgabe3.elf] Error 1
    Build failed with 28 errors and 0 warnings...
    Was muss ich hier tun dass das fehlerfrei durchläuft?

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

    Was muss ich hier tun dass das fehlerfrei durchläuft?
    Da hast du dir ja was vorgenommen:
    Zuerst mal enthält die Asuro Lib eigene Funktionen für LCD und I2C. Das kollidiert schon mal etwas. Beides einbinden bringt da sicher nicht viel, zumal die Header Dateien gleich heißen, aber die Funktionen unterschiedliche Namen haben.
    Des weiteren wurde der Quellcode aus dem Asuro Buch für die alten Compiler Versionen geschrieben. Daher die vielen Warnungen und Fehler über unbekannte Funktionen wie sbi und cbi.
    Einige Funktionen gibt es in der AuroLib V2.71 noch nicht. Z.B. das Ausgaben von Strings aus dem Flash, Erstellen und Ausgaben von Sonderzeichen.
    Das wird es erst mit der AsuroLib V2.80 geben.

    Vielleicht fängst du besser erst mal klein an und versuchst das LCD Beispiel Programm aus dem examples Ordner der AsuroLib auf dem Display zum laufen zu bringen. Was dazu an der Lib geändert werden muß steht hier:
    http://www.asurowiki.de/pmwiki/pmwik...LCDErweiterung

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hi m.a.r.v.i.n,

    Das Beispielprogramm I2CLCD aus dem Examples-Ordner der LIB2.71 läuft fehlerfrei durch, das anzupassen war kein Problem.

    Kannst (oder willst) du mir sagen ab wann die Lib2.80 veröffentlicht wird, und ob man dann diese Funktionen alle nützen kann?

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

    wenn es dir nur darum geht, die Beispiele aus dem Asuro Buch mit einer aktuellen WinAVR Version zu übersetzen, dann kann ich dir heute abend die angepaßten Beispiele dafür posten.

    Du kannst es natürlich auch gerne selbst probieren. Entweder durch einbinden von:

    Code:
    #include <compat/deprecated.h>
    Und das in allen Files die die Funktionen sbi, cpi, inp, out benutzen.

    Oder du schreibst dir die fehlenden Makros selbst und packst sie in die asuro.h

    Code:
    #define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
    #define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT)))
    #define outp(VAL,ADRESS) ((ADRESS) = (VAL))
    #define inp(VAL) (VAL)
    Oder du ersetzt in den Quellen alle diese fehlenden Funktion von Hand

    z.B. aus

    Code:
    sbi(SDA_DDR, SDA);
    cbi(SDA_DDR, SDA);
    wird dann

    Code:
    SDA_DDR |= (1<<SDA);
    SDA_DDR &= ~(1<<SDA);
    Mit der AsuroLib 2.80 wird es noch ein wenig dauern (2-4 Wochen).
    Die fehlenden LCD Funktionen sind bisher noch gar nicht implementiert.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hallo m.a.r.v.i.n,

    nachdem ich eine "Programmierpflaume" bin, brauche ich wahrscheinlich viel länger als bis heute Abend um meine Lib lt. deiner Beschreibung anzupassen.

    Ich finde es etwas seltsam von den Autoren des Buches dass man ihre Codes meistens gar nicht weiterentwickeln kann, weil die Bibliotheken fehlen um die Sache sauber zu übersetzen.

    Zum Glück gibt es aber Profis wie dich, die die Grütze und die Energie haben die Lib weiterzuentwickeln, dafür möchte ich mich einmal herzlich bedanken!

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

    Zum Glück gibt es aber Profis wie dich, die die Grütze und die Energie haben die Lib weiterzuentwickeln, dafür möchte ich mich einmal herzlich bedanken!
    Danke, das tut gut

    hier die versprochenen LCD Examples (ohne Warnings und Errors).
    http://www.asurowiki.de/pmwiki/uploa...CDexamples.zip

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hi m.a.r.v.i.n,

    nochmals danke für deine Mühe, besonders nett ist dass du noch zusätzlich ein "Goody" beigelegt hast. Wenn ich das richtig sehe hast du auch schon die Anpassungen in den Dateien i2c.h und lcd.h vorgenommen.

    Wenn ich die Codes kompiliere kriege ich noch eine Warnung:

    Code:
    Build started 8.2.2008 at 07:36:12
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=lcd.lst lcd.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > lcd.d; \
        [ -s lcd.d ] || rm -f lcd.d
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=pcf8574.lst pcf8574.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > pcf8574.d; \
        [ -s pcf8574.d ] || rm -f pcf8574.d
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=i2c.lst i2c.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > i2c.d; \
        [ -s i2c.d ] || rm -f i2c.d
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
        [ -s asuro.d ] || rm -f asuro.d
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=lcd-demo.lst lcd-demo.c \
        | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > lcd-demo.d; \
        [ -s lcd-demo.d ] || rm -f lcd-demo.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
    Copyright (C) 2007 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    avr-gcc -c -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=lcd-demo.lst lcd-demo.c -o lcd-demo.o
    avr-gcc -c -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c -o asuro.o
    avr-gcc -c -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=i2c.lst i2c.c -o i2c.o
    i2c.c:45: warning: function definition has qualified void return type
    avr-gcc -c -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=pcf8574.lst pcf8574.c -o pcf8574.o
    avr-gcc -c -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=lcd.lst lcd.c -o lcd.o
    avr-gcc -mmcu=atmega8 -I. -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=lcd-demo.o lcd-demo.o asuro.o i2c.o pcf8574.o lcd.o   --output lcd-demo.elf -Wl,-Map=lcd-demo.map,--cref -lm
    avr-objcopy -O ihex -R .eeprom lcd-demo.elf lcd-demo.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
        --change-section-lma .eeprom=0 -O ihex lcd-demo.elf lcd-demo.eep
    c:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 never used
    avr-objdump -h -S lcd-demo.elf > lcd-demo.lss
    Size after:
    lcd-demo.elf  :
    section    size      addr
    .text      3250         0
    .data       262   8388704
    .bss          1   8388966
    .stab       888         0
    .stabstr     95         0
    Total      4496
    
    
    Errors: none
    -------- end --------
    Build succeeded with 1 Warnings...
    kann ich die ignorieren?

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

    kann ich die ignorieren?
    Ja die Warnung kannst du ignorieren. Muß ich wohl übersehen haben.

Berechtigungen

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