Nuovi sviluppi IDE 1.8.x

Se si sta parlando di AVR libc l'implementazione C++ è parziale Frequently Asked Questions 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 avr-libc: Memory Areas and Using malloc() non capisco che bug possa aver fissato Arduino essendo parte della libc

astrobeed:

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.

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

Il New adesso presenta anche le sintassi New[] e Delete[] che nella 1.0.3 e precedenti non c'era.

PaoloP:

astrobeed:

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

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

PaoloP:
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.

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

toxman:
...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.

Ma perchè sotto ubuntu il repo di arduino è fermo ancora alla 1.0.1?

perchè nessuno lo mantiene, evidentemente :slight_smile:

astrobeed:

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.

quindi esiste la possibilità che quei firmware della WiFi siano compilati con una malloc() buggata?

che poi vorrei ben capire cos'è questo "bug"

lesto:
perchè nessuno lo mantiene, evidentemente :slight_smile:

bellissimo...

comunque, giusto per la cronaca, ho aggiornato il bootloader della mia 2560, a fine processo di uploading mi da errori.

però compila e carica senza problemi sketch... boh

con usbasp:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: verification error, first mismatch at byte 0x1e000
         0xff != 0x0d
avrdude: verification error; content mismatch

AnTrea:

lesto:
perchè nessuno lo mantiene, evidentemente :slight_smile:

bellissimo...

Sono pacchetti di secondaria importanza e per essi generalmente nei repo Ubuntu mettono una versione stabile e poi la lasciano lì. Scaricati l'IDE dal sito e risolvi.
Oppure compila dai sorgenti.
Oppure ancora passa ad una distro che aggiorna molto più velocemente i pacchetti (come ad esempio Arch Linux).

AnTrea:
comunque, giusto per la cronaca, ho aggiornato il bootloader della mia 2560, a fine processo di uploading mi da errori.

però compila e carica senza problemi sketch... boh

con usbasp:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.

avrdude: verification error, first mismatch at byte 0x1e000
        0xff != 0x0d
avrdude: verification error; content mismatch

Secondo me non hai aggiornato un bel nulla. apri il file boards.txt e sostituisci nella board che hai usato il valore efuse (attuale ff) con "0d", quindi riprova a fare l'upload, che ovviamente stai facendo mediante collegamento ISP, spero....

lesto:
uhmm in teoria la begin la dovresti chiamare una volta, e poi il resto sono server.available()..

In teoria si ma se si configura tramite DHCP nella pratica no.
Il primo begin all'avvio è ok, ma se poi durante l'esecuzione la rete va giù (per qualsiasi problema, anche semplicemente se riavviano il router) Arduino deve effettuare un nuovo begin per ottenere un nuovo indirizzo. Il suddetto problema (ora risolto!) a lungo andare portava Arduino ad un crash perchè saturava la RAM.

leo72:

AnTrea:

lesto:
perchè nessuno lo mantiene, evidentemente :slight_smile:

bellissimo...

Sono pacchetti di secondaria importanza e per essi generalmente nei repo Ubuntu mettono una versione stabile e poi la lasciano lì. Scaricati l'IDE dal sito e risolvi.
Oppure compila dai sorgenti.
Oppure ancora passa ad una distro che aggiorna molto più velocemente i pacchetti (come ad esempio Arch Linux).

Sto imparando (in modo serio) ad usare linux "solo" adesso...
Avrei pure scaricato la versione dal sito, però vorrei quelle cose a tipo bimbominkia: l'iconcina e la cartella di arduino nella cartella di sistema giusta (che non so dove dovrei mettere)
Se magari mi dai un suggerimento.... :wink:

Prof, ho scritto che ho usato la usbasp, quindi.... :slight_smile:
Ora provo a fare l'upload modificando il fuse. Grazie

No. Basta fare ogni tanto il maintain(). :wink:
Non c'è bisogno di un nuovo begin.

int EthernetClass::maintain(){
  int rc = DHCP_CHECK_NONE;
  if(_dhcp != NULL){
    //we have a pointer to dhcp, use it
    rc = _dhcp->checkLease();
    switch ( rc ){
      case DHCP_CHECK_NONE:
        //nothing done
        break;
      case DHCP_CHECK_RENEW_OK:
      case DHCP_CHECK_REBIND_OK:
        //we might have got a new IP.
        W5100.setIPAddress(_dhcp->getLocalIp().raw_address());
        W5100.setGatewayIp(_dhcp->getGatewayIp().raw_address());
        W5100.setSubnetMask(_dhcp->getSubnetMask().raw_address());
        _dnsServerAddress = _dhcp->getDnsServerIp();
        break;
      default:
        //this is actually a error, it will retry though
        break;
    }
  }
  return rc;
}

AnTrea:

[quote author=Michele Menniti link=topic=153592.msg1153481#msg1153481 date=1363105438]
Secondo me non hai aggiornato un bel nulla. apri il file boards.txt e sostituisci nella board che hai usato il valore efuse (attuale ff) con "0d", quindi riprova a fare l'upload, che ovviamente stai facendo mediante collegamento ISP, spero....

Prof, ho scritto che ho usato la usbasp, quindi.... :slight_smile:
Ora provo a fare l'upload modificando il fuse. Grazie
[/quote]

Quant'è brutto quando non trovo le cose al posto loro:

l'estended fuse è settato a 0xFD, siamo sicuri che settandolo a 0d risolvo la questione? XD

mega2560.name=Arduino Mega 2560 or Mega ADK

mega2560.upload.protocol=wiring
mega2560.upload.maximum_size=258048
mega2560.upload.speed=115200

mega2560.bootloader.low_fuses=0xFF
mega2560.bootloader.high_fuses=0xD8
mega2560.bootloader.extended_fuses=0xFD
mega2560.bootloader.path=stk500v2
mega2560.bootloader.file=stk500boot_v2_mega2560.hex
mega2560.bootloader.unlock_bits=0x3F
mega2560.bootloader.lock_bits=0x0F

mega2560.build.mcu=atmega2560
mega2560.build.f_cpu=16000000L
mega2560.build.core=arduino
mega2560.build.variant=mega