Go Down

Topic: Dove iniziare per programmare SAM3U (Read 6 times) previous topic - next topic

Janos

Mmmmmm, ero sicuro che l'operatore << fosse solo un'istruzione per il precompilatore...
Sarebbe da controllare il compilato cosa fa perché ci sta che il precompilatore, riconoscendo che 1 << 5 è un'operazione eseguibile a tempo di compilazione la esegua lui. Per tagliare la testa al toro lo sostituirò con 0b00010000...  ;)

leo72

Se tu fai 1<<5 è un conto, se tu fai a<<5 è un altro.
Nel primo caso hai 2 costanti numeriche, e quindi il compilatore potrebbe (ma non è detto: tu a scuola hai studiato gcc, immagino, ma qui usiamo avr-gcc, che potrebbe anche ragionare in maniera diversa) sostituire il valore già calcolato. Ma nel secondo caso il compilatore non sa che valore assumerà a per cui come può eseguire in anticipo l'operazione?

Janos

Si si, nel secondo caso è indubbio che non può essere calcolato a tempo di compilazione, ma nel primo caso sarebbe da controllare.
Non ho studiato gcc, ho fatto elettronica, non informatica, ma ho avuto un esame praticamente quasi sull'atmega, oltre che un po' di pld. Io ho il ricordo che il prof. ci avesse detto che 1 << 5 il precompilatore lo sostituisse in 0b00010000 però effettivamente mi hai fatto venire il dubbio. Magari mi ricordo male.

astrobeed


ci avesse detto che 1 << 5 il precompilatore lo sostituisse in 0b00010000 però effettivamente mi hai fatto venire il dubbio. Magari mi ricordo male.


Tutti i compilatori degni di questo nome, e gcc lo è, risolvono i calcoli su costanti durante il processo di compilazione sostituendo direttamente il valore calcolato.
Esempio pratico se scrivo "byte A; A = 3x2;" il compilatore assegna ad A direttamente il valore 6 senza inserire il calcolo nel programma, ovvero la riga diventa "A = 6;".

MauroTec

Vero ha ragione astro. Il preprocessore processa macro e non fa calcoli, ma il precompilatore a cui si riferisce janos anche se la documentazione non ne parla lo potremo anche chiamare così. Tutte le operazioni che coivolgono operandi il cui valore è conosciuto a tempo di compilazione vengono risolte. Se il valore di un'operando non è conosciuto a tempo di compilazione il calcolo verra effettuato a run-time.

Però nessuno mi ha fatto i complimenti per il codice delle ISR ridotto all'osso grazie all'or exclusivo. Si vabbe che non è farina del mio sacco in quanto ho scoperto quel codice all'interno di una libreria, ma si tratta comunque di buon codice che merita.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Go Up