Go Down

Topic: Nuovi sviluppi IDE 1.5.x (Read 35 times) previous topic - next topic

astrobeed


ma se non erro la malloc viene usata molto spesso nelle librerie arduino, in primis la String, che usiamo praticamente tutti.


Direi proprio di no, il core di Arduino non usa la malloc() e nemmeno la String che è solo un tipo dato del C++, la definizione è allocata nello stack, i dati nel heap, idem per le varie funzioni della avrlibc.


lesto

in arduino-1.0.4/hardware/arduino/cores/arduino/ c'è la classe WSrtring.hpèerò mi son sbagliato perchè usa solo la realloc() e non la malloc(), però per intenderci la malloc viene usata e spesso, tanto che anche l'operatore "new" la usa (che poi anche l'uso della new sia deprecabile è un'altra storia)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


però per intenderci la malloc viene usata e spesso, tanto che anche l'operatore "new" la usa (che poi anche l'uso della new sia deprecabile è un'altra storia)


Ok, fammi vedere il codice sorgente dove viene usata la malloc, io dico che non lo trovi.



lesto

trovata in:
libraries/Firmata/Firmata.cpp
libraries/SD/File.cpp

(e nel firmware della wifiShield ma non credo che lì venga usata la malloc() "di arduino")
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


ma non credo che lì venga usata la malloc() "di arduino"


Non esiste la malloc() di Arduino, è una funzione del C ben definita e fa parte dello standard del linguaggio, poi tocca vedere come viene implementata dai vari compilatori.

flz47655

Se si sta parlando di AVR libc l'implementazione C++ è parziale http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus le funzioni new e delete non sono implementate anche se con poche righe è possibile sopperire, mi sembra comunque un segno chiaro che sono da evitare

Sulla funzione malloc c'è qualche info su http://www.nongnu.org/avr-libc/user-manual/malloc.html non capisco che bug possa aver fissato Arduino essendo parte della libc

PaoloP

#21
Mar 12, 2013, 09:31 am Last Edit: Mar 12, 2013, 09:33 am by PaoloP Reason: 1


ma non credo che lì venga usata la malloc() "di arduino"


Non esiste la malloc() di Arduino, è una funzione del C ben definita e fa parte dello standard del linguaggio, poi tocca vedere come viene implementata dai vari compilatori.



Si, nella 1.0.4 hanno creato una funzione che si chiama malloc() che quindi va a sovrascrivere quella definita dalle librerie standard.
Il file è il nuovo malloc.c all'interno del core di Arduino.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

flz47655

Mumble, il malloc() l'hanno preso dalla libc con piccolissime modifiche, ho notato anche che il "new" è implementato nel core di arduino nel file new.h

PaoloP

Il New adesso presenta anche le sintassi New[] e Delete[] che nella 1.0.3 e precedenti non c'era.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

lesto




ma non credo che lì venga usata la malloc() "di arduino"


Non esiste la malloc() di Arduino, è una funzione del C ben definita e fa parte dello standard del linguaggio, poi tocca vedere come viene implementata dai vari compilatori.



Si, nella 1.0.4 hanno creato una funzione che si chiama malloc() che quindi va a sovrascrivere quella definita dalle librerie standard.
Il file è il nuovo malloc.c all'interno del core di Arduino.


mi sa che era implementata da prima della 1.0.4, ma non so il motivo
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

PaoloP

Nelle versioni precedenti alla 1.0.4 non c'è il file malloc.c quindi presumo che venisse utilizzata quella della libc stamdard.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

astrobeed


Nelle versioni precedenti alla 1.0.4 non c'è il file malloc.c quindi presumo che venisse utilizzata quella della libc stamdard.


Esatto, infatti questo file è apparso adesso con la 1.0.4, come scritto nel suo commento è lo stesso presente nelle avrlibc con alcune piccole modifiche.

toxman

...sul mio pc la compilazione e il trasferimento sono lentissimi ... Speriamo che migliori qualcosa con questo nuovo ide ...
https://www.facebook.com/pages/TonyMake/160740054064026

(mezzi a disposizione)*(intelligenza)= K (costante)

astrobeed


...sul mio pc la compilazione e il trasferimento sono lentissimi ... Speriamo che migliori qualcosa con questo nuovo ide ...


Prima di tutto bisogno vedere cosa intendi esattamente con lentissimi, magari se ci dai dei tempi in secondi con riferimento ad uno degli sketch di esempio è meglio, e comunque non possono cambiare con una nuova versione del IDE perché sia il compilatore (avr gcc) che il software gestore del caricamento (avrdude) sono sempre gli stessi.
Se realmente hai una eccessiva lentezza, da verificare, questo può dipendere solo da problemi legati al tuo pc e/o sistema operativo.

AnTrea

Ma perchè sotto ubuntu il repo di arduino è fermo ancora alla 1.0.1?
Arduino, MODs e DIY: blackstufflabs.com

Go Up