Newsgroup: it.hobby.elettronica.digitale
Titolo: Procyon AVRLIB

Ciao,
ho trovato le librerie in oggetto e sto cercando di provarle.
Programma elementare di test:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "global.h"
int main(void)
{
	outb(DDRA, 0x00);
	return 0;
}
Il file global.h (contenuto nella cartella dei sorgenti) è questo:
#ifndef GLOBAL_H
#define GLOBAL_H
#include "avrlibdefs.h"
#include "avrlibtypes.h"
#define F_CPU        8000000
#define CYCLES_PER_US ((F_CPU+500000)/1000000)
#endif
Il makefile:
MCU = atmega48
TRG = Shift_Monitor_V2
SRC = $(AVRLIB)/buffer.c $(AVRLIB)/uart.c $(AVRLIB)/rprintf.c 
$(AVRLIB)/timer.c $(TRG).c
ASRC =
LIB  =
INC  =
ASFLAGS = -Wa, -gstabs
CPFLAGS	= -g -Os -Wall -Wstrict-prototypes -I$(AVRLIB) 
-Wa,-ahlms=$(<:.c=.lst)
LDFLAGS = -Wl,-Map=$(TRG).map,--cref
include $(AVRLIB)/make/avrproj_make
buffer.o		: buffer.c		buffer.h
uart.o		: uart.c			uart.h		global.h
uart2.o		: uart2.c		uart2.h		global.h
rprintf.o	: rprintf.c		rprintf.h
a2d.o			: a2d.c			a2d.h
timer.o		: timer.c		timer.h		global.h
pulse.o		: pulse.c		pulse.h		timer.h	global.h
lcd.o			: lcd.c			lcd.h			global.h
i2c.o			: i2c.c			i2c.h			global.h
spi.o			: spi.c			spi.h			global.h
swpwm.o		: swpwm.c		swpwm.h		global.h
servo.o		: servo.c		servo.h		global.h
swuart.o		: swuart.c		swuart.h		global.h
tsip.o		: tsip.c			tsip.h		global.h
nmea.o		: nmea.c			nmea.h		global.h
vt100.o		: vt100.c		vt100.h		global.h
gps.o			: gps.c			gps.h			global.h
$(TRG).o		: $(TRG).c						global.h
Praticamente ho ridotto all'osso gli esempi proposti da AVRLIB.
In fase di compilazione ottengo:
Shift_Monitor_V2.c:8: error: 'DDRA' undeclared (first use in this function)
In pratica non mi trova le definizioni dei registri. Come mai visto che 
dovrebbero essere incluse in io.h?
Grazie!
Marco / iw2nzm

 Marco / iw2nzm
ciao!

 la risposta č sul datasheet.
vabbč, ho preso proprio l'unico micro che non aveva la porta A.
Comunque il problema non era relativo a quello. Molti altri registri non 
vengono riconosciuti. Ad esempio quelli relativi alla porta seriale: UDR 
  per dirne uno. Lo so che č definito come UDR0 nel mega48, ma possibile 
che la libreria non utilizzi il nome corretto?
Tu le utilizzi?
Marco / iw2nzm

 dovrebbero essere incluse in io.h?
non esiste DDRA su un ATmega48.
Nelle versioni recenti della libc la funzione "outb" č obsoleta.


 Nelle versioni recenti della libc la funzione "outb" č obsoleta.
Grazie della risposta.
Come scritto nell'altro post (ammesso che sia visibile) il DDRA č stata 
una mia svista, outb č usata nell'esempio e comunque non da errore.
Il problema č che sembra che il codice della libreria non tenga conto 
delle diverse nomenclature che i registri assumono tra micro e micro. 
Come ad esempio l'UDR che č UDR0 nel mega 48.
Ciao!
Marco / iw2nzm

 Come ad esempio l'UDR che è UDR0 nel mega 48.
Mi sembra strano, di solito l'avr-libc è molto precisa su questi punti.
Se sul datasheet del mega48 è definito come UDR0, dovrebbe esserlo anche 
nell'avr-libc.
Ciao

 Marco / iw2nzm
ciao!

 Ciao

 
http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib
Lo so, ma la definizione dei registri di I/O *non* č fornita 
dall'avrlib, bensě dalla libc per avr:
http://www.nongnu.org/avr-libc/
L'avrlib č una collezione di funzioni e driver mentre l'avr-libc č la 
libc standard usata dal compilatore per implementare le funzioni 
standard ANSI.
Nel caso AVR fornisce anche la definizione di costanti e registri per 
l'accesso alle periferiche.
Ciao