PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lib 2.71 und LCD Code



pinsel120866
07.02.2008, 09:22
Hallo,

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


/************************************************** *****************************
*
* 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:


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?

m.a.r.v.i.n
07.02.2008, 11:31
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/pmwiki.php/Main/LCDErweiterung

pinsel120866
07.02.2008, 11:59
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?

m.a.r.v.i.n
07.02.2008, 14:31
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:


#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


#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


sbi(SDA_DDR, SDA);
cbi(SDA_DDR, SDA);

wird dann


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.

pinsel120866
07.02.2008, 14:50
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!

m.a.r.v.i.n
07.02.2008, 21:06
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 :D

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

pinsel120866
08.02.2008, 07:34
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:


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?

m.a.r.v.i.n
08.02.2008, 22:43
Hallo,


kann ich die ignorieren?

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