MSP430, Microcontrollori 16 bit Ultra Low Power

Hello World e la variabile i

  • Cigolino
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
12 Anni 11 Mesi fa #1 da Cigolino
Hello World e la variabile i è stato creato da Cigolino
In attesa di diventare un professionista dell'MSP430 :silly: sto facendo qualche prova con il launchpad. In particolare, sto seguendo passo passo le procedure descritte nel corso del buon Mauro.
Allora: nell'esempio del capitolo V del corso, si parla del posizionamento della variabile 'i' e del fatto che il CCS compili comunque il programma perché il sorgente viene considerato in C++; ebbene, il mio compilatore non è d'accordo con questa affermazione e mi piazza un bell'errore :-) Poco male, mi va bene lavorare in C anziché in C++, mi rimane comunque la curiosità di dove si possano trovare le impostazioni per impostare il tipo di linguaggio...

Ma ora viene il bello! Facendo cut&paste della dichiarazione della variabile, l'ho spostata inavvertitamente prima della dichiarazione della funzione 'Main'; ho compilato il programma, l'ho avviato e i LED hanno cominciato a lampeggiare. Quando mi sono accorto dell'errata posizione della riga di codice, l'ho portata sotto la parentesi graffa di apertura del 'Main' e qui mi sono accorto, una volta ricompilato il programma che i LED lampeggiavano ad una frequenza doppia rispetto al programma precedente!!!
Qualcuno mi sa spiegare cosa succede?

P.S. oggi non ce la faccio, ma domani attacco l'oscilloscopio e misuro le due frequenze...
P.P.S. il micro è un G2553, ma credo che poco importi.

Ciao a tutti :-)

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
12 Anni 11 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Hello World e la variabile i
Ciao,

purtroppo non ho Code Composer Studio sotto mano, per cui non posso verificare l'impostazione per i.
In ogni modo, come detto, usa la sintassi per il C.

Relativamente al lampeggio credo che la storia sia interessante e per scoprire se quello che scrivo sotto e' valido devi controllare il codice assembly.

Nel caso di una variabile i dentro il main hai una variabile locale e probabilmente il compilatore usa un registro della CPU (Rxx) al fine di ottimizzare operazioni sullo stesso. Dal momento che il delay ha tempi piu'o meno grandi in base al tempo che impieghi per incrementare, usare un registro Rxx permette di incrementare i con un solo ciclo di clock).

Nel caso di i fuori il main, crei una variabile globale, e mi aspetto, dal momento che deve essere visibile a tutti, che venga creata in RAM e non con i registri RXX, per cui un suo incremento impiega piu' cicli di clock, dunque vedi il LED lampeggiare piu' lentamente.

Come detto troverai delle differenze nel codice assembly.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Cigolino
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
12 Anni 11 Mesi fa - 12 Anni 11 Mesi fa #3 da Cigolino
Risposta da Cigolino al topic Re: Hello World e la variabile i
OK, ci ho guardato ed è esattamente come dici tu.


Dichiarazione di 'i' fuori dal main:
Code:
24 for (i = 0; i <30000; i++); $C$L1: c0cc: 4382 0200 CLR.W &i c0d0: 90B2 7530 0200 CMP.W #0x7530,&i c0d6: 3406 JGE ($C$DW$L$main$3$E) $C$DW$L$main$2$E, $C$L2: c0d8: 5392 0200 INC.W &i c0dc: 90B2 7530 0200 CMP.W #0x7530,&i c0e2: 3BFA JL ($C$DW$L$main$2$E)




Dichiarazione di 'i' dentro al main:
Code:
24 for (i = 0; i <30000; i++); $C$L1: c06e: 430F CLR.W R15 c070: 903F 7530 CMP.W #0x7530,R15 c074: 3404 JGE ($C$DW$L$main$3$E) $C$DW$L$main$2$E, $C$L2: c076: 531F INC.W R15 c078: 903F 7530 CMP.W #0x7530,R15 c07c: 3BFC JL ($C$DW$L$main$2$E)
Un'altra cosa interessante, è che nel primo caso, non è possibile visualizzare la variabile i nella finestra di debug (almeno, io non ci sono riuscito). Mentre nel secondo caso, si vede chiaramente il registro R15 assegnato alla variabile e il relativo valore che si può consultare step by step...
Ultima Modifica 12 Anni 11 Mesi fa da Cigolino.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Cigolino
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
12 Anni 11 Mesi fa #4 da Cigolino
Risposta da Cigolino al topic Re: Hello World e la variabile i
Ci, sono riuscito: è sufficiente andare nel tab'Expressions', cliccare su 'Add new expressions' e inserire il nome della variabile. Intanto prendo confidenza anche con CCS :-)

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
12 Anni 11 Mesi fa #5 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Hello World e la variabile i
Ottimo!

grazie per aver confermato quanto avevo scritto.
In generale vedere il codice ASM e' una buona pratica per comprendere cosa sta succedendo.
Lo consiglio anche qualora si voglia ottimizzare il codice a sfavore della leggibilità.
Se uno guarda il codice assembly si puo' rendere conto che forse anche tenendo il codice non ottimizzato in C permette, grazie al compilatore "sveglio, di avere un codice assembly ottimizzato.
Nel testo C18 Step by Step riporto diversi esempi di questo tipo.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi