spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Informatica

Rispondi
 
Strumenti discussione Modalit visualizzazioe
  #21  
Vecchio 18-08-2014, 18.14.33
L'avatar di landyandy
landyandy landyandy non è collegato
Robottaro sostenitore
 
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Et: 44
Messaggi: 2,330
Potenza reputazione: 331
landyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da aldofad Visualizza messaggio
Con queste righe di codice si abilitano in Arduino gli operatori "new" e "delete" con cui si comincia a programmare in C++. Con l'uso poi di classi virtuali la frittata del C++ in Arduino completa e perfettamente funzionante.

Codice:
#ifdef MAINFILE
  #define EXTERN
#else
  #define EXTERN extern
 
 
#include <stdlib.h>
 
extern void * operator new(size_t size){return malloc(size);}
 
struct __freelist
{
  size_t sz;
  struct __freelist *nx;
};
 
extern struct __freelist *__flp;
extern uint8_t* __brkval;
 
void fix28135_malloc_bug() {
  for (__freelist *fp = __flp, *lfp = 0; fp; fp = fp->nx)
  {
    if (((uint8_t*)fp + fp->sz + 2) == __brkval)
    {
      __brkval = (uint8_t*)fp;
      if (lfp)
        lfp->nx = 0;
      else
        __flp = 0;
      break;
    }
    lfp = fp;
  }
}
 
void operator delete(void * ptr) {
  free(ptr);
  fix28135_malloc_bug();
}
 
extern "C" void __cxa_pure_virtual() {
    while(1);
}
#endif



EVVIVA CHI HA INVENTATO IL LINGUAGGIO BASIC !!!!!




SALUTI ARABESCHI
landyandy
__________________
------------------------------------------------




-----------------------------------------------
Rispondi citando
  #22  
Vecchio 18-08-2014, 18.18.18
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Robottaro sostenitore
 
Data registrazione: 18-03-2004
Residenza: Roma
Et: 60
Messaggi: 3,377
Potenza reputazione: 350
astrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua famaastrobeed La sua reputazione  oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da landyandy Visualizza messaggio
EVVIVA CHI HA INVENTATO IL LINGUAGGIO BASIC !!!!!
Al rogo dovevano metterlo, ma ti pare questo il modo di scrivere un programma

Codice:
 10 poke775,191:clr:print chr$(147):poke53280,3:poke53281,3:a1$="Programma by Pastore Carlo"
        20 a2$="(c) 1990":a3$="Premi un tasto":aa=len(a1$):bb=len(a2$):cc=len(a3$)
        30 print"qqq]]] in reverse": for i=1 to aa:for j=1 to 50:next j:print mid$(a1$,i,1);:next
        40 print"q in reverse":for i = 1 to bb : for j = 1 to 50 : next j : print mid$ (a,i,1):next
        45 fori=1to600:next
        50 print"q in reverse":fori=1tocc:forj=1to50:nextj:print mid$(a3$,i,1);:next
        60 poke198,0:wait198,1:print chr$(147):poke646,1:poke53280,0:poke53281,0:poke198,0
        70 print"5 q in reverse 5 ]Men :":print"3 q in reverse 8 ]1- Music editor"
        80 print"2 q in reverse 8 ]2- Piano elettronico"
        90 get d$="": if d$="" then 90
        100 if d$="1" then 1000
        110 if d$="2" then 10000
        120 if d$<>"1" or d$<>"2" then 90
        1000 print chr$(147):poke 646,1
        1010 input"3 q in reverse Quante note vuoi inserire (1-1000)";z
        1020 if z<1 or z>1000 then 1000
        1030 dim x(z),y(z):n=0
        1040 if n=z then 1150
        1041 n=n+1
        1050 input"cuore in reverse Qual' la nota";x$
        1060 if x$="do" then x(n)=33:y(n)=135:goto 1040
        1070 if x$="re" then x(n)=37:y(n)=162:goto 1040
        1080 if x$="mi" then x(n)=42:y(n)=62:goto 1040
        1090 if x$="fa" then x(n)=44:y(n)=193:goto 1040
        1100 if x$="sol" then x(n)=50:y(n)=60:goto 1040
        1110 if x$="la" then x(n)=56:y(n)=99:goto 1040
        1120 if x$="si" then x(n)=63:y(n)=75:goto 1040
        1121 if x$="hd" then x(n)=67:y(n)=15:goto 1040
        1130 if x$<>"do" or x$<>"re" or x$<>"mi" or x$<>"fa" or x$<>"sol" then 1040
        1140 if x$<>"la" or x$<>"si" or x$<>"hd" then 1040
        1150 poke646,7:print chr$(147):print"suono il motivo (s/n) ?"
        1160 get r$:if r$="" then 1160
        1170 if r$="s" then 1190
        1180 clr:print chr$(147):goto 70
        1190 sid=54272:fori=0to24:pokesid+i,0:next
        1191 print chr$(147):input"Volume (0-15)";v
        1192 if v<0 or v>15 then v=15
        1193 input "2 q in reverse Forma d'onda (17-33-65-129)";q
        1200 print chr$(147):pokesid+24,v:pokesid+5,31:pokesid+6,31:pokesid+4,q
        1210 fori=1ton:pokesid+1,x(i):pokesid,y(i):pokesid+4,q:forh=1to180:nexth
        1220 p  okesid+4,q-1:forj=1to20:nextj:nexti:pokesid+24,0:pokesid+4,q-1
        1230 print chr$(147):input"Ancora";s$
        1240 if s$="si" then 1200
        1250 clr:print chr$(147):poke646,1:goto 70
        10000 w1$="Piano elettronico":w2$="Programma by Pastore Carlo (c) 1990"
        10001 xx=len(w1$):yy=len(w2$):print"2 q in reverse";chr$(147)
        10002 fori=1toxx:forj=1to50:nextj:print mid$(w1$,i,1);:next
        10003 print"q in reverse":for i=1toyy:forj=1to50:nextj:print mid$(w2$,i,1);:next
        10010 print"s in reverse 6 q in reverse Q = do - W = re - E = mi - R = fa"
        10020 print"q in reverse T = sol - Y = la - U = si - I = do (alto)"
        10021 print"q in reverse A = do# - S = re# - D = fa# - F = sol#"
        10022 print"q in reverse G = la#":poke198,0
        10030 sid=54272:fori=0to24:pokesid+i,0:next:pokesid+24,15:pokesid+4,17
        10031 pokesid+5,10:pokesid+6,10
        10040 get z$:if z$="" then 10040
        10050 if z$="q" then pokesid+4,17:goto 12000
        10060   if z$="w" then pokesid+4,17:goto 12010
        10070 if z$="e" then pokesid+4,17:goto 12020
        10080 if z$="r" then pokesid+4,17:goto 12030
        10090 if z$="t" then pokesid+4,17:goto 12040
        10100 if z$="y" then pokesid+4,17:goto 12050
        10110 if z$="u" then pokesid+4,17:goto 12060
        10120 if z$="i" then pokesid+4,17:goto 12070
        10130 if z$="a" then pokesid+4,17:goto 12080
        10140 if z$="s" then pokesid+4,17:goto 12090
        10150 if z$="d" then pokesid+4,17:goto 12100
        10160 if z$="f" then pokesid+4,17:goto 12110
        10170 if z$="g" then pokesid+4,17:goto 12120
        10171 if z$="1" then print chr$(147):clr:end
        10180 if z$<>"q" or z$<>"w" or z$<>"e" or z$<>"r" or z$<>"t" then 10040
        10190 if z$<>"y" or z$<>"u" or z$<>"i" or z$<>"a" or z$<>"s" then 10040
        10200 if z$<>"d" or z$<>"f" or z$<>"g" or z$<>"1" then 10040
        12000 pokesid+1,33:pokesid,135:fori=1to180:next:pokesid+4,16:goto 10040
        12010   pokesid+1,37:pokesid,162:fori=1to180:next:pokesid+4,16:goto 10040
        12020 pokesid+1,42:pokesid,62:fori=1to180:next:pokesid+4,16:goto 10040
        12030 pokesid+1,44:pokesid,193:fori=1to180:next:pokesid+4,16:goto 10040
        12040 pokesid+1,50:pokesid,60:fori=1to180:next:pokesid+4,16:goto 10040
        12050 pokesid+1,56:pokesid,99:fori=1to180:next:pokesid+4,16:goto 10040
        12060 pokesid+1,63:pokesid,75:fori=1to180:next:pokesid+4,16:goto 10040
        12070 pokesid+1,67:pokesid,15:fori=1to180:next:pokesid+4,16:goto 10040
        12080   pokesid+1,35:pokesid,134:fori=1to180:next:pokesid+4,16:goto 10040
        12090 pokesid+1,39:pokesid,223:fori=1to180:next:pokesid+4,16:goto 10040
        12100 pokesid+1,47:pokesid,107:fori=1to180:next:pokesid+4,16:goto 10040
        12110 pokesid+1,53:pokesid,57:fori=1to180:next:pokesid+4,16:goto 10040
        12120 pokesid+1,59:pokesid,190:fori=1to180:next:pokesid+4,16:goto 10040
__________________
Bye
Rispondi citando
  #23  
Vecchio 18-08-2014, 18.25.49
L'avatar di landyandy
landyandy landyandy non è collegato
Robottaro sostenitore
 
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Et: 44
Messaggi: 2,330
Potenza reputazione: 331
landyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua fama
Predefinito

Caspita, vero..............


EVVIVA CHI HA INVENTATO IL C.............



Per hai preso un listato di basic che forse veniva usato 30 anni fa.

Addirittura ci sono i numeri di linea a fianco.
oggi molto piu elegante e sopratutto "green" visto che non utilizza tutte quelle parentesi solo per far vedere che figo.



saluti
landyandy
__________________
------------------------------------------------




-----------------------------------------------
Rispondi citando
  #24  
Vecchio 19-08-2014, 08.34.25
L'avatar di guiott
guiott guiott non è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Et: 63
Messaggi: 1,418
Potenza reputazione: 336
guiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Citazione:
Orginalmente inviato da landyandy Visualizza messaggio
Astro non mi hai risposto quando ho scritto che il linguaggio di Arduino un derivato di quello del C.

vera questa cosa?
Programmare con Arduino oppure no piu' facile che programmare in c puro?

Faccio questa domanda perch mi sembrava di aver capico cosi.



saluti
landyandy
Non un derivato, proprio C++
Il C++ un linguaggio ad oggetti che deriva dal C. Puoi quindi anche usarlo come fosse C puro, diciamo quasi ANSI C.

Come tutti i linguaggi poi ha una serie di librerie per realizzare pi rapidamente funzioni ricorrenti senza sbattersi troppo. Sono queste che facilitano lo sviluppo del codice. Ne pi ne meno di come fa il Basic. Il Basic standard, quello che usavo io 30 anni fa, oltre a GOTO e IF...THEN... o FOR non che avesse molto. Le diverse versioni del Basic che trovi non fanno altro che implementare nuove librerie. Il Pulsein o Pulseout, ad esempio, non sono altro che questo, poco hanno a che vedere col Basic.
Il bello del C, contrariamente al Basic, che si possono aggiungere librerie a piacere, anche fatte da altri. Questa la grossa forza di Arduino: la community che sviluppa e crea librerie per tutti gli scopi possibili. Essendo molto usata in robotica e automazione trovi sicuramente la libreria che fa per te. Nel Basic, se una funzione non la implementa il fornitore dell'IDE non ce l'hai e basta.

Veniamo poi al mondo dei microcontrollori. In questo caso bisogna programmare le periferiche studiando pagine e pagine di manuale e settare centinaia di registri solo per abilitare una certa funzione.
Anche in questo caso, quelli di Wiring (l'IDE dietro all'ambiente Arduino), hanno pensato di facilitare la vita ai programmatori. Il numero di MCU disponibili, anche se in aumento, comunque limitato. Quando scegli la tua scheda Arduino non hai fatto altro che caricare un file di configurazione che imposta tutti i registri necessari, in modo che poi le librerie funzionino sempre allo stesso modo, cosa che non esiste nei PIC, dove devi farti tutto a mano.

Quando scrivi un programma in C, di solito, lanci una serie di linee di comando che configurano l'MCU e poi hai un loop infinito:

Codice:
while(1)
{
   tuo programma
}
Anche questo stato standardizzato su Arduino. La struttura base del programma DEVE comprendere le funzioni Setup() e Loop(). Tanto vero che quando apri un nuovo programma, ti riempie subito le righe necessarie:

Codice:
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly: 
  
}
Per far lampeggiare il famoso led, trovi gi un esempio di base

Codice:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}
Ti assicuro che per fare questo con un PIC in XC8/16 ci vuole decisamente di pi.

Alla fine quindi, lavorare con Arduino o con il Basic solo questione di capire che le operazioni sono racchiuse dentro parentesi. Per il resto non cambia molto.
Ci sono i for, while, switch/case (select/case), volendo anche il goto, e tutto quello al quale sei abituato.
Quando poi usi Pulsein, Pulseout, o tutte le altre funzioni comodissime, non stai usando il C ma delle librerie scritte da qualcuno.

Di contro ha tutta una serie di limitazioni dovute alle modalit con la quale stata scritta la libreria. Meno che in Basic ma di pi che nel caso di utilizzo diretto del C.
Un esempio per tutti. Per fare il Wordclock che sto sviluppando, con Arduino avrei fatto decisamente prima, peccato che quando avessi provato a leggere l'RTC in I2C si sarebbe bloccato tutto (sperimentato con mano) fin quando il device esterno non risponde, con conseguente flicker dei LED.

In Arduino hai una specie di gestione degli interrupt, leggermente migliore di quella del Basic, ma non sono vere ISR. C' qualcuno che chiede servizio e, a software non in hardware, l'MCU gli risponde quando pu. Per delle operazioni a velocit "umana" non c' praticamente differenza. Se hai bisogno di risposte nell'ordine dei milli o microsecondi... te lo scordi.

Un'altra differenza di Arduino rispetto al Basic che, alla fine, hai sempre sotto una MCU e un C. Se vuoi quindi andare a modificare registri od agire direttamente sull'hardware lo puoi fare. Anche se, personalmente, in quel caso preferisco di gran lunga usare i PIC.

Insomma per cose che non richiedono requisiti stringenti, Arduino va alla grande diminuendo molto i tempi di sviluppo. In questa applicazione mi ha facilitato molto la vita. Se vuoi fare cose che devono rispondere esattamente nei tempi stabiliti, e questi tempi sono nell'ordine del millisecondo, come questa o questa, ci vuole un PIC o altre MCU controllate direttamente.
__________________
Guido
------
www.guiott.com
Rispondi citando
  #25  
Vecchio 19-08-2014, 08.35.21
L'avatar di guiott
guiott guiott non è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Et: 63
Messaggi: 1,418
Potenza reputazione: 336
guiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua famaguiott La sua reputazione  oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Citazione:
Orginalmente inviato da landyandy Visualizza messaggio
... visto che non utilizza tutte quelle parentesi solo per far vedere che figo.
Quando hai cominciato ad usarle ti rendi conto di quanto sono comode
__________________
Guido
------
www.guiott.com
Rispondi citando
  #26  
Vecchio 19-08-2014, 12.18.25
L'avatar di landyandy
landyandy landyandy non è collegato
Robottaro sostenitore
 
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Et: 44
Messaggi: 2,330
Potenza reputazione: 331
landyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua famalandyandy La sua reputazione  oltre la sua fama
Predefinito

Grande Guido e grazie della bella spiegazione.

...anche rincuorante direi perch in effetti, come spiegavo sopra, avendo iniziato il mio percorso Robottaro in et antecedente ad Arduino, per forza di cose mi sono buttato dove veniva pi facile mettere mano alla programmazione e se devo dirla tutta, anche adesso con tutto questo "fracasso" che ha generato Arduino, voglio comunque tenermene fuori.

Forse sar invidia ma 10 anni fa (credo che ancora Arduino non c'era), l'elettronica aveva PER ME, un fascino completamente diverso.

A livello amatoriale era difficile trovare informazioni riguardo qualsiasi cosa e l'unica fonte certa era ovviamente il dataS della casa madre che in base a chi costruiva il componente ti dava la sua versione delle specifiche.

In alcuni c'erano i famosi App note, in altri alcune scritte erano fatte a mano, in altri i grafici erano illeggibili mentre in altri (piu' precisi), facevano dei pdf formattati alla perfezione.

Oggi, qualsiasi prodotto in vendita trova tra le sue fila di documentazione scaricabile, il suo bel sorgentino gia fatto e OVVIAMENTE solo per Arduino.
Nulla da dire sull'invenzione di Massimo Banzi (ha avuto un'idea perfetta), ma personalmente questa corsa alla standardizzazione mi ha un po' fatto perdere il gusto di essere un obbista.

Il mercato dell'elettronica di consumo ripartita (non parlo di telefonini o prodotti gia pronti), anche grazie a questo giochetto dell'avere il chip ultra tecnologico gia pronto ad essere connesso con il suo strip pin "standard" gia piazzato e il programma gia pronto a funzionare.
Poi, ......vedere questi "nuovi geni" che su youtube pubblicizzano oggetti, fino a ieri sconosciuti, come giroscopi, accelerometri, IMU ecc come se stessero presentando un vestito alla moda o una bibita rinfrescante mi d quasi il volta stomaco.

Vabb, non voglio infierire ulteriormente, mi basta sapere che per fortuna esiste ancora la possibilit di non uniformarmi a livello di meccanica e ancora ho la possibilit di "decidere" la forma da dare all'oggetto finale senza rientrare in uno "standard".
Del resto, con l'elettronica abbiamo gia tutto a disposizione.

Il tutto OVVIAMENTE IMHO


saluti estivi
landyandy
__________________
------------------------------------------------




-----------------------------------------------
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalit visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code Attivato
Le smilies sono Attivato
[IMG] Attivato
Il codice HTML Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
basic atom 28 simoneddu Mercatino 0 26-03-2012 19.30.32
BASIC su Mac s_e_b_a Robozak 4 19-02-2012 16.01.21
Pic basic deusexmachina P. in Basic per micro 0 01-11-2004 14.14.47
Pic Basic Pro MarkNitro Forum generale 6 29-01-2003 16.36.00
PIC in basic MarkNitro Forum generale 1 26-01-2003 14.37.00


Tutti gli orari sono GMT. Adesso sono le: 15.31.07.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB