Librerie 'Precompilate' (file .lib)

Ciao, scusate la domanda ma abbiate pazienza, non ho neanche ancora la scheda :)

Vorrei sapere se con Arduino è possibile creare librerie precompilate (.lib) da includere nei progetti. Negli esempi che trovo viene sempre distribuito il .h e il .cpp, inoltre nell'ide di Arduino che ho installa non c'è traccia sembrerebbe di alcuna libreria precompilata..

E' possibile includere file .lib? Ed è facile anche realizzarli con l'ide o devo affidarmi a un compilatore standard e successivamente importare nell'ide?

Mi riferisco ovviamente al codice 'on board' in C/C++ che viene caricato sulla scheda e non ai diversi linguaggi con i quali è possibile interfacciarsi tramite seriale!

Grazie in anticipo!

Non puoi per il semplice motivo che l'Atmega non è un computer con un disco ed un sistema operativo che può caricare file a seconda delle necessità.

Fai finta che sia un minicomputer dotato solo di memoria Flash: su di essa devi scrivere tutto il programma in una volta sola ed in formato binario. Ecco perché si parte sempre dai file sorgenti, perché durante la compilazione per creare l'eseguibile finale il compilatore carica tutto quello che serve. Alle volte trovi dei file .hex, che sono i file binari pronti per essere flashati con un programmatore esterno Così però non sai cosa ci metti sopra, il bello dell'opensource è che tu hai pieno accesso al software, così che tu possa vedere come le cose vengono fatte ed intervenire per apportare modifiche.

Il compilatore che usa il IDE é quello ufficiale della Atmel il AVR-GCC. Il IDE lo chiama con i parametri neccesari qualdo compilo lo sketch. Vedi la documentazione della ATMEL

Non vedo la necessitá di librerie precompilate.

Ciao Uwe

Grazie! mi documenterò su questo componente, ovviamente parlando di .lib intendo link statico, non dinamico, inteso come le dll di windows, non mi aspetto tanto e neanche mi interessava questo ;)

Forse più che file ".lib" intendevi i file ".o"... Ciao

Si, è possibile ma devi lanciare il compilatore da linea di comando perchè non c'è supporto nell'IDE di Arduino. L'estensione non è .lib ma .a, l'analogo delle .lib su Linux anche se si utilizza Windows. Puoi trovare i precompilati forniti con l'ide in arduino-0022\hardware\tools\avr\lib. Puoi provare a dare un'occhiata a http://www.visualmicro.com/ per vedere se con tale addin per Visual Studio è possibile "automatizzare" maggiormente la cosa.

Ciao

Ciao lindbergh, se usi un sistema GNU/Linux puoi usare make e un makefile da te editato per ogni progetto.
Le librerie statiche sono archiviate con il comando avr-ar che genera un archivio .a contenente i moduli oggetto compilati dal compilatore.

Se senti la necessità di creare le tue funzioni di libreria puoi sfruttare il sistema offerta dall’ide per creare delle librerie in codice sorgente, molto comode perchè vengono compilate e linkate insieme al codice dello sketch con gli argomenti adatti quali F_CPU e -mmcu=micro_name che l’ide passa al compilatore in modo automatico.

Se la tua necessità è un’altra, ad esempio scrivere delle librerie senza usare quella di arduino allora devi provare ad usare eclipse oppure editare un makefile.
esempio di makefile:

###### Toolchain ######

CC      = avr-gcc
CXX     = avr-g++
AS      = avr-as
LD      = avr-gcc
AR      = avr-ar
SIZE    = avr-size
OBJDUMP = avr-objdump
OBJCOPY = avr-objcopy
RM := rm -rf

###### All flags #######

MAKE_FCPU     = 16000000
MAKE_MCU_FREQ = -DF_CPU=$(MAKE_FCPU)
MAKE_MCU_NAME = atmega328p
MAKE_MCU_FLAG = -mmcu=$(MAKE_MCU_NAME)
DEFINES       = 
INCPATH       = -I../
CFLAGS        = 
CXXFLAGS      = -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions
LDFLAGS       = -Os -Wl,--gc-sections

LIBNAME = inserisci qui il nome del file con cui vuoi si chiami la tua libreria es mylib-04082011.a

####### File List #######

SOURCES += \
mio_sorgente.cpp\
mio_sorgente-1.cpp\
mio_sorgente-2.cpp

OBJECTS += \
mio_sorgente.o\
mio_sorgente-1.o\
mio_sorgente-2.o

DEPENDENCIES += \
mio_sorgente.d\
mio_sorgente-1.d\
mio_sorgente-2.d

####### Pattern Rules #######
%.o: ../%.cpp
	$(CXX) $(INCPATH) $(MAKE_MCU_FLAG) $(MAKE_MCU_FREQ) $(DEFINES) $(CXXFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -c -o"$@" "$<"

%.o: ../%.c
	$(CC) $(INCPATH) $(MAKE_MCU_FLAG) $(MAKE_MCU_FREQ) $(DEFINES) $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -c -o"$@" "$<"

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(DEPENDENCIES)),)
-include $(DEPENDENCIES)
endif
endif

####### All Target #######
all: mio_target

mio_target: $(OBJECTS)
	-$(AR) -r $(LIBNAME) $(OBJECTS)

clean: 
	$(RM) $(OBJECTS) $(DEPENDENCIES)

Questo makefile da per scontato che i sorgenti si trovino nel percorso …/, cioè la directory padre di quella in cui
si trova questo file.

Ciao.

Grazie a tutti per le dritte! volevo sapere se era possibile linkare in qualche modo librerie 'proprietarie' per dispositivi specifici, sarebbe stata una grave pecca se fosse mancata ;)

le librerie in c sono i file .h i file .cpp e .h sono classi, immaginati una libreria che può contenere anche variabili dinamiche.

le librerie base di arduino le trovi nell'ide, cartella libraries, e non ti conviene toccarle finché non sai esattamente cosa fai. nel playground esistono tantissime librerie, anzi di solito classi, per moltissimi componenti.

edit: per capirne di più dai un'occhiata: http://arduino.cc/playground/Italiano/Newbie

edit2: rileggendo meglio mi sono accorto che cerchi compilati. Non vengono forniti probabilmente per un motivo di portabilità e perché è tutto open-source. E direi che i tempi di compilazione sono più che accettabili anche su pc di bassa fascia