Pages: 1 [2]   Go Down
Author Topic: Indicare percorso alternativo di una libreria  (Read 1469 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9168
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I file intermedi è normale, ma in questo caso ci ficca pure i sorgenti del core,

No ci mette solo gli obj, e gli .elf, dei vari sorgenti usati durante la compilazione, ed è normale che sia così, forse ti fai ingannare dal fatto che vedi i nomi scritti come miofile.cpp.o  .

Quote
quello che non si capisce è come fà a compilare indistintamente le librerie esterne sia esse abbiano gli include in formato originale (cosi come rilasciate da arduino) sia con gli include modificati(con percorsi relativi corretti).

Perchè l'IDE fa un override delle impostazioni di defult del compilatore e specifica lui i percorsi da usare.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

L'IDE fa un gran bel casino. Compilando un programma ti ritrovi i sorgenti .cpp tutti copiati nella cartella /build, poi crea una cartella per ogni libreria inclusa, dentro ci mette una cartella /utility e dentro... non ci sono né header né i file cpp della libreria!  smiley-yell
Logged


0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I file intermedi è normale, ma in questo caso ci ficca pure i sorgenti del core,

No ci mette solo gli obj, e gli .elf, dei vari sorgenti usati durante la compilazione, ed è normale che sia così, forse ti fai ingannare dal fatto che vedi i nomi scritti come miofile.cpp.o  .

nono, copia i sorgenti veri e propri in .cpp e .h, li puoi aprire e modificare (tra l'altro se vedi la issue che ho postato vedi che le istruzioni sono proprio di COPIA dei file e preparazione dell'elenco di path da dare al compilatore), in oltre prima di fare questa copia ha già letto l'INO e copia-incollato in un apposito cpp. quindi a quel punto nella cartella temp di build hai i sorgenti pronti, viene chiamato avr-gcc e poi avrdude
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Padova
Offline Offline
Jr. Member
**
Karma: 4
Posts: 87
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nono, copia i sorgenti veri e propri in .cpp e .h, li puoi aprire e modificare

strano, da me su IDE 1.0.2 per Windows (anche nel 1.0.1) nel log di compilazione dice

Code:
avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=102 -ID:\Programmi\Arduino\arduino-1.0.2\hardware\arduino\cores\arduino -ID:\Programmi\Arduino\arduino-1.0.2\hardware\arduino\variants\standard -ID:\Programmi\Arduino\arduino-1.0.2\libraries\Wire -ID:\Dropbox\Progetti\Arduino\Sketchbook\libraries\DS1307new -ID:\Dropbox\Progetti\Arduino\Sketchbook\libraries\LedControl -ID:\Programmi\Arduino\arduino-1.0.2\libraries\Wire\utility D:\Programmi\Arduino\arduino-1.0.2\libraries\Wire\Wire.cpp -o C:\Users\Daniele\AppData\Local\Temp\build5837474537041180748.tmp\Wire\Wire.cpp.o

e così per tutte le lib e per il core, infatti nella cartella temporanea nnon c'è traccia dei sorgenti, apparte quello dello sketch generato dall'ide ovviamente.
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai ragione, non copia i sorgenti delle librerie ma solo i sorgenti contenuti nella cartella dello sketch (tranne l'INO a cui viene aggiunto un #include "Arduino.h" e rinominato in .cpp
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6975
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma l'include della libreria Arduino.h non è già nel main.cpp?
Code:
#include <Arduino.h>

int main(void)
{
init();

#if defined(USBCON)
USBDevice.attach();
#endif

setup();
    
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
        return 0;
}
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come e cosa faccia l'ide non te lo so dire con esattezza.

Io generalmente gli include li metto tutti nel file H, e nel file cpp metto solo l'inclusione al suo header.
Lo trovo più ordinato, ma ho visto che comunque non tutti utilizzano questa convenzione e mi sono ritrovato tanti progetti con gli include sparsi anche per il file cpp.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma l'include della libreria Arduino.h non è già nel main.cpp?
Code:
#include <Arduino.h>

int main(void)
{
init();

#if defined(USBCON)
USBDevice.attach();
#endif

setup();
   
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
        return 0;
}

non ho controllato ben, non mi stupirei se il .cpp che dico io non è altro che il copia-incolla del main.cpp del file .ino, che viene sucessivamente rinominato in .cpp
Dovrei dare un'occhio al codice dell'ide
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Padova
Offline Offline
Jr. Member
**
Karma: 4
Posts: 87
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

da quello che ho visto indagando un po' mi pare che l'IDE unisca tutti i file .ino dello sketch corrente in un unico file cpp chiamato col nome dello sketch.
Per primo copia il file ino "principale", cioè quello col nome dello sketch, poi tutti gli altri in ordine alfabetico.
Eventuali altri file nel progetto (che compaiono nele tab nell'IDE) che non sono file .ino (quindi anche gli header .h) vengono copiati nella cartella finale senza essere uniti.

Poi l'ide aggiunge all'inizio di questo file .cpp l'include di Arduino.h e tutti i prototipi delle funzioni dichiarate al suo interno (cioè tutte quelle all'interno dei vari file .ino)

Infine compila il core, il file cpp appena creato e linka il tutto, usando come include directories quelle delle varie librerie usate e del core.

La funzione main non viene inclusa direttamente nel file creato, ma viene compilata nel core (la si trova in main.cpp mi pare).
Quando alla fine viene linkato tutto insieme verrà usata come entry point.
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, sì, direi che ci siamo, manca solo laconferma dal codice IDE
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 [2]   Go Up
Jump to: