Nuova libreria advancedFunctions per Arduino DUE

yoshi93:
A questo punto facciamo un port di linux e siamo tutti apposto :grin:

Non è proprio la DUE, però ci stanno lavorando sopra :slight_smile:

http://www.kickstarter.com/projects/435742530/udoo-android-linux-arduino-in-a-tiny-single-board

La UDOO è una scheda biprocessore, una 2-in-1.
All'ARM MX6 monta a fianco un SAM3X per le funzionalità dell'Arduino.

[OT]

A questo punto facciamo un port di linux e siamo tutti apposto

..intanto perchè non farci girare FreeRTOS?

[/OT]

Grandissimo @leo !!!

La gestione della ethernet non dispende solo dal software vero?
Non basta 'attivarla' da software, se in qualche modo si può collegare i pin verso l'esterno?

Beh complimenti per il lavoro e per lo sforzo.

Per la true random number generator ho avuto una sensazione di familiarità col codice presente nel tuo myTrng.cpp, così ho cercato la vecchia discussione (26 ottobre 2012): random number generator (TRNG) API ? - #3 by cmaglie - Arduino Due - Arduino Forum

Stessa identica soluzione proposta nella correzione di cmaglie....sarebbe bastato usare la funzione cerca del forum ]:slight_smile:

Stessa cosa vale per la RTC, ne esisteva già una, ma la tua molto probabilmente è molto più leggera.

C'è anche una discussione che ha l'obiettivo di raccogliere tutte le librerie per la Due, magari postala anche lì: Arduino Forum

Ad ogni modo è un buon lavoro.

Leo, ti sei messo a scopiazzare :fearful:?

Ho interpretato anche io negativamente il messaggio del Vanzati
visto che non ricordo niente di poderoso o interessante proveniente dallo stesso, protesto vivamente al fine di ricevere spiegazioni o rimozione del messaggio precedente.

Io non ho copiato proprio nulla.
L'ho anche specificato nel primo post, che il mio più grosso problema è stato capire come accedere alle funzionalità hardware del chip SAM.
Cercando su Google ho trovato che c'era questo framework chiamato CMSIS e l'ho anche detto che devo ringraziare quella poca documentazione che sono riuscito a trovare in giro:

leo72:
Ovviamente la documentazione è scadente :sweat_smile: e non è facile risalire al modo in cui usare le funzioni del CMSIS (acronimo per Cortex Microcontroller Software Interface Standard). Per ora ho recuperato un pò di info googlando sul forum, su internet e guardando gli header del framework stesso.

Quando ho iniziato il lavoro non sapevo neanche che ci fossero già delle lib pronte: non ho voglia di mettermi a reinventare la ruota, quando questa è già disponibile. Ho trovato in seguito alcune cose quando il lavoro era già in corso d'opera e mi ero impantanato su alcuni problemi, perché io non sono un programmatore professionista ed il C/C++ l'ho studiato da autodidatta in questi 2 anni e mezzo che uso Arduino. E' grazie

Il fatto che ci siano similitudini non lo posso negare ma quello è il "modo di fare le cose". Il datasheet richiede una precisa sequenza di azioni da compiere per portare a termine la programmazione dei registri del chip. Addirittura, ora viene usata una "chiave" di attivazione che va scritta in alcune locazioni del registro, pena la non modifica dello stesso.
Detto questo, non si può non scrivere codice identico a quello di un altro soggetto se l'operazione da fare è la medesima, anche volendo. Non mi pare sia stato accusato di plagio il creatore del core Tiny, nonostante si potrebbe dire che tale core è derivato da quello dell'Arduino.

Mi spiace che la cosa sia stata commentata in questo modo perché:

  1. mi sembra di aver contribuito non poco con un sacco di software (librerie, sketch) e materiale vario (vedi tutti gli articoli che ho scritto sul mio sito) per favorire l'uso di Arduino riempiendo le lacune nella documentazione ufficiale;
  2. ho sempre rilasciato il mio lavoro in forma pubblica, offrendo tutto sotto la GPL3 proprio perché nessuno potesse prendere dei pezzi ed usarli senza ridistribuire eventuali lavori derivati. Facendo così mi sono prodigato affinché le informazioni sull'uso al meglio dell'Arduino rimanessero pubbliche;
  3. quando ho iniziato a lavorare sulla DUE, il mio primo intento è stato quello di completare il supporto alle periferiche integrate nel SAM3X che il core di Arduino non supporta ancora (non lo si può negare) andando quindi a fare un lavoro conto terzi che sarebbe spettato non certo a me.

Vorrà dire che i miei prossimi lavori me li tengo per me, così nessuno verrà a dirmi che copio dagli altri

leo72:
Vorrà dire che i miei prossimi lavori me li tengo per me, così nessuno verrà a dirmi che copio dagli altri

Noooooooo, ti prego non tenerti le cose per te =(. Le tue librerie sono ottime ed il solo fatto che siano gratis giustifica il fatto che in lontananza assomiglino ad altre (per motivi pratici e funzionali non perchè le hai copiate).
Non capisco neanche io il perchè del commento di Vanzati e il mio consiglio è quello di fregarsene altamente 8).

Leo, continua così che alla maggior parte di noi va più che bene ;).

Federico, il tuo è un commento ingiusto, nel mondo del software, e in quello elettronico, è facile realizzare soluzioni molto simili anche se realizzate da diverse persone, questo sia perché certi modi di agire sono imposti dal componente, sia perché non esiste un modo diverso di farlo, alla fine le soluzioni realizzate da persone diverse sono tutte simili, e questo è uno dei motivi per cui non è possibile brevettare il software.
Un esempio banale, ieri mi hanno fatto notare che è stato realizzato un blocco dell'autoreset per la DUE, per 16u2, questa modifica è praticamente identica a quella che io ho proposto, molti mesi fa, per la UNO, eppure non andrò mai a dire che la persona ha copiato la mia perché effettivamente non c'è altro per farlo ed è normale che i due lavori siano quasi identici.

Sembra la diatriba tra Bell e Meucci. :roll_eyes:

Alla fine gli Americani hanno mollato, speriamo succeda anche qui.

Vi riporto l'esperienza che ho avuto 20 anni fa. Dovevo vendere un software, che al tempo era rivoluzionario, e l'azienda interessata all'acquisto lo faceva esclusivamente se veniva brevettato; Mi ricordo le ore passate all'ufficio brevetti a Milano :smiley:
Mi sembra che l'unico software brevettabile sia quello topografico, ma può essere che le cose siano cambiate...

Tornando a noi:
L'apporto che ha dato e sta dando Leo a questa comunità è indiscusso; Non penso serva aggiungere altro.

"Non ti curar di lor, ma guarda e passa"

astrobeed:
Un esempio banale, ieri mi hanno fatto notare che è stato realizzato un blocco dell'autoreset per la DUE, per 16u2, questa modifica è praticamente identica a quella che io ho proposto, molti mesi fa, per la UNO, eppure non andrò mai a dire che la persona ha copiato la mia perché effettivamente non c'è altro per farlo ed è normale che i due lavori siano quasi identici.

azz, gira gira il cetriolo è tornato al suo posto :smiley: :smiley: :smiley:

Voglio fare una precisazione: la mia era ovviamente una battuta, in quanto conosco il valore e l'onestà morale ed intellettuale di Leo, non a caso abbiamo collaborato già diverse volte, con reciproca soddisfazione, ho grande stima del suo operato e dell'apporto che dà al Forum, anche nella sua nuova veste di Moderatore che esercita alla perfezione, voglio augurarmi che ciò alla lunga non gli arrechi danno. Per quanto lo conosco posso garantire che Leo non ha alcuna intenzione di cambiare rotta, il suo è il sacrosanto sfogo di chi non riesce a comprendere il vero motivo (se esiste...) di un intervento che, a quanto pare, ha lasciato tutti perplessi, e qui mi fermo se no finisce che poi sono io ad assumere il ruolo dell'ortolano :sweat_smile:

pighixxx:
...
L'apporto che ha dato e sta dando Leo a questa comunità è indiscusso; Non penso serva aggiungere altro.

+1 ... senza alcun dubbio !!!

Guglielmo

Nuova versione 0.3.0 della libreria con aggiunta del modulo WDT per gestire il watchdog del SAM3X.

Si hanno 3 metodi:

wdt.enable(intervallo);

Imposta il timer del WatchDog con l'intervallo in millisecondi specificato da intervallo. Questo può andare da 1 a 16000 ms (16 secondi).

wdt.restart();

Riavvia il contatore del WDT in modo che questo non resetti il micro. Deve essere l'ultima istruzione del blocco di codice che si vuole controllare non si blocchi. Generalmente è in fondo al loop().

wdt.disable();

Disabilita il WDT.

PS:
siccome non sono a casa, ho scritto questo modulo senza provarlo materialmente. Se qualcosa va storto.... pulsante ERASE sulla schedina per piallare completamente la Flash :wink:

Guarda che io non ho accusato proprio nessuno di aver copiato! Semmai lo avrà pensato chi è corso sulle difensive.

Ti devo dire che appena ho visto il titolo "Nuova libreria advancedFunctions per Arduino DUE" e che eri tu l'autore ho subito pensato a qualcosa di interessante e aperto la discussione.
Purtoppo però, per me, di nuovo (come reciti nel titolo) non c'era nulla: True Random Number Generator e RTC interno, sono argomenti che sono stati trattati dalla community appena è uscita la Due.
E mi sono chiesto come mai, anzichè partecipare allo sviluppo condiviso, vero motore dell'open source, tu avessi deciso di lavorare da solo.
Sarebbe un insulto alla mia e alla tua intelligenza pensare che tu non abbia pensato almeno una volta di fare una ricerca sul forum in merito a questi due temi. Quindi, l'unica mia critica era rivolta al fatto che un personaggio come te, che crede nell'open source, abbia deciso di cimentarsi e portare avanti da solo del lavoro sapendo che altra gente precedentemente aveva già iniziato a lavorare alle stesse cose.

Poi, dando peso a quello che dice Astro, so benissimo che trattandosi di periferiche hardware che, funzionano in un solo modo, è facile arrivare alla stessa soluzione di altri quindi, ancora una volta: perchè duplicare? Nota che non mi sarei mai permesso di criticare se non avessi conosciuto almeno un po' quello che stavo criticando.

Se avessi voluto essere più pignolo e malpensante sulla true random generator mi sarei espresso dicendo che è singolare che anche tu abbia deciso di resettare l'interrupt del TRNG mettendo a 1 tutti i 32 bit del registro (TRNG->TRNG_IDR = 0xFFFFFFFF;) e non usando l'apposita macro che setta solo quello giusto (TRNG->TRNG_IDR = TRNG_IDR_DATRDY;) e di usare il "trucco" della variabile statica per fare la configuazione una sola volta.

Chiaro che ognuno è libero di fare ciò che vuole, quindi tu di accorpare tutto in una singola libreria mettendoci le modifiche che vuoi, ma io sarò libero di criticare e dire la mia. La mia voleva essere una critica costruttiva, tant'è che ti ho proposto di inserire la tua libreria nella discussione che ha lo scopo di raccogliere tutte le librerie compatibili con la Due.

Per il watchdog, anch'io oggi non ho la possibilità di provare, ma ho dei dubbi che possa funzionare perchè il Watchdog Mode Register (WDT_MR) si può configurare una volta ogni reset del processore e di default il watchdog viene disabilitato nella funzione init(), di fatto precludendoti la possibilità di riabilitarlo nello sketch.
Per farlo funzionare bisognerebbe almeno commentare la funzione che lo disabilita nel file variant.cpp della Due.
Questa discussione è un buon punto di partenza: Arduino Forum

Il fatto che tutti quelli che sono intervenuti hanno interpretato il tuo messaggio come una critica ed un'accusa a Leo deve farti almeno mettere in conto che forse lo hai scritto male, invece non leggo nulla nella tua controrisposta su questo punto.

Questo e' un tuo parere contestabile senza problemi, leo mette a disposizione di tutti il suo lavoro e non desina spiegazioni se gli vengono chieste, credo che lui faccia parte di quelli che credono e portano avanti l'open source.
Anche io, che invece non ti farei mai vedere un mio progetto, credo fermamente nell'opensource. Ogn'uno ci crede a modo suo.
L'arduino Team non ha mai fatto nulla per appoggiare o incoraggiare la contribuzione alle librerie ufficiali.

Federico, se non sono stato il solo ad aver male interpretato il tuo intervento, ci sono stati anche altri utenti che lo hanno fatto, forse la colpa non è tutta mia. :wink:

A parte questo, io credo nell'open-source ma, come vedrai, frequento principalmente questa sezione. Ho provato alle volte a scrivere anche sul forum internazionale ma il mio inglese è.... scolastico. Se iniziano a scrivere con modi di dire o quant'altro come si fa noi con l'italiano, non capisco più nulla e non riesco a capire cosa voglia dire la gente. Per cui visto che comunque avevo un "lavoro" da fare qui, ho iniziato a seguire solo questa sezione. La critica che faccio tutto di testa mia è quindi fondata, contribuisco con un sacco di materiale ma tendo a lavorare per proprio conto. E mi capita spesso di replicare ciò che è stato fatto da altri perché spesso non guardo sul forum internazionale. Ad esempio il leOS è uno scheduler veramente minimale e di RTOS veri ne sono stati fatti diversi ma io l'ho voluto realizzare comunque perché mi piaceva.

Tornando alle librerie tutto quello che ho scritto è disponibile sia sul mio sito che su github:

Mi spiace di essermi preso con te e mi scuso in pubblico come in pubblico ti avevo criticato

Testato:
L'arduino Team non ha mai fatto nulla per appoggiare o incoraggiare la contribuzione alle librerie ufficiali.

Scherzi? Se vuoi contribuire puoi:

  • aprire una issue su github (prima su google code) se vuoi segnalare un problema, altrimenti se vuoi sottomettere una patch puoi fare direttamente una pull request.
  • partecipare alla mailing list dei Developers
  • Usare le sezioni appropriate del forum
  • e perchè no, anche la mail support@arduino.cc

Testato:
Il fatto che tutti quelli che sono intervenuti hanno interpretato il tuo messaggio come una critica ed un'accusa a Leo deve farti almeno mettere in conto che forse lo hai scritto male, invece non leggo nulla nella tua controrisposta su questo punto.

leo72:
Federico, se non sono stato il solo ad aver male interpretato il tuo intervento, ci sono stati anche altri utenti che lo hanno fatto, forse la colpa non è tutta mia. smiley-wink

Posso anche metterla in conto, anche se, e non credo di essere presuntuoso nel dirlo, nel mio primo post ci vedo solo una critica e nessuna accusa o attacco.
Se sono stato frainteso posso anche scusarmi per aver dato adito a fraintendimento. Mi sembra che ora i malintesi si siano chiariti però.

@leo:
continuerò a leggere la discussione per vedere gli sviluppi sul watchdog.

Ho notato 2 piccole imprecisioni:

  • nel myWdt.h hai "ereditato" un commento dal trng:
//class to get random numbers from the internal TRNG
class myWdt {
...
  • nella libreria myTrng usi i metodi getLong() e getInt(), questi due nomi potrebbero generare confusione sulla dimensione dei tipi, visto che sugli ARM gli int sono a 32-bit, come i long.