×
MSP430, Microcontrollori 16 bit Ultra Low Power
Hello World e la variabile i
12 Anni 5 Mesi fa #1
da Cigolino
Hello World e la variabile i è stato creato da Cigolino
In attesa di diventare un professionista dell'MSP430 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
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 Accedi o Crea un account a partecipare alla conversazione.
- Cigolino
- Autore della discussione
- Junior Member
Riduci
Di più
12 Anni 5 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
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 Accedi o Crea un account a partecipare alla conversazione.
12 Anni 5 Mesi fa - 12 Anni 5 Mesi fa #3
da Cigolino
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Risposta da Cigolino al topic Re: Hello World e la variabile i
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 5 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 Accedi o Crea un account a partecipare alla conversazione.
12 Anni 5 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
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 Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024