Pagina 9 di 10
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: gio gen 25, 2018 17:27
da FraPaola
Ni, il compilatore deve garantirti il risultato.. non l'ordine, esempio semplice.
Codice: Seleziona tutto
int a, b;
void verificaesecuzione(void)
{
a = b + 1;
b = 0;
}
Compila con
esegui un
cat testverifica.s
vedrai questo codice assembly
Codice: Seleziona tutto
mov eax, DWORD PTR b[rip]
mov DWORD PTR b[rip], 0
add eax, 1
mov DWORD PTR a[rip], eax
Se lo ritraduci in c vedrai che
Codice: Seleziona tutto
mov eax, DWORD PTR b[rip] # leggi la variabile b nel registro eax
mov DWORD PTR b[rip], 0 #b = 0
add eax, 1 [b] # aggiunge 1 al registro eax
mov DWORD PTR a[rip], eax # a = b + 1
Il compilatore ha deciso che
b=0;
dovesse avere precedenza rispetto a
a = b + 1;
nonostante noi gli avessimo detto di fare il contrario.!
Questo è un piccolissimo esempio di come il compilatore cambia l'esecuzione delle istruzioni di un codice..
Bada bene, io non stò dicendo che hai torto, sto semplicemente dicendo che nessuno ci dà la certezza di come il compilatore stà codificando il codice! !!
P.S Yrag scusa per L'OT
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: gio gen 25, 2018 21:14
da McMax
FraPaola tu stai compilando con gcc un eseguibile che gira sotto un sistema operativo.
Io sto compilando con ARM su un microcontrollore.... parliamo di due cose diverse. Sui microcontrollori i thread si possono gestire ma con altri sistemi e comunque sai sempre qual'è il codice da assegnare al thread e quello che deve essere eseguito con priorità. Oltre a ciò, anche per il codice in thread, NON viene assolutamente modificato MAI l'ordine di esecuzione.
Quando programmi un microcontrollore devi gestire periferiche a bassissimo livello (timing UART, I2C, PWM, ADC, DAC, DMA....); se il compilatore cambiasse l'ordine di esecuzione come dici tu tutta questa roba non funzionerebbe.
Per dirla tutta, il disassembly del codice che porti come esempio avviene perché oggi i compilatori sono più "smart" e quindi decidono che tu hai fatto un errore inizializzando la variabile "b" successivamente all'operazione e lo correggono.
Ai tempi in cui ho studiato io informatica questa roba non esisteva e, per come la vedo io, non dovrebbe esistere nemmeno adesso. Linguaggi come il visual basic, ad esempio, sono un insulto all'informatica.... la macchina deve fare ciò che dico io, non quello che dice lei. In questo modo possiamo imparare dai nostri errori che è l'unica cosa che (per ora) distingue le macchine dall'uomo.... in pratica, il tuo "ni", per una macchina, non dovrebbe esistere. 0 o 1, "si" o "no".
Ovviamente l'ultimo paragrafo è in onore dello zio....

Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: gio gen 25, 2018 21:19
da yrag
Grazie !

Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: gio gen 25, 2018 21:22
da onorino
Zio ormai sono partiti per la tangente, ignorali

Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: gio gen 25, 2018 21:45
da yrag
Si, prendo le distanze, non vorrei che i mastuggiorgio, nella foga, impacchettassero anche me...

Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: ven gen 26, 2018 00:20
da McMax
o magari, nella sfiga, impacchettano solo te

Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: ven gen 26, 2018 00:21
da yrag
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: ven gen 26, 2018 12:32
da onorino
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 11:26
da FraPaola
dalla documentazione ufficiale dell'stm32
The order of instructions in the program flow does not always guarantee the order of the
corresponding memory transactions. The reason for this is that:
• The processor can reorder some memory accesses to improve efficiency, providing this
does not affect the behavior of the instruction sequence.
• The processor has multiple bus interfaces.
• Memory or devices in the memory map have different wait states.
• Some memory accesses are buffered or speculative.
Cmq, parlando con alcuni colleghi di ST, mi hanno confermato che l'ipotesi di un riordine delle istruzioni così impattante anche se possibile è alquanto remota come ipotesi, quindi in linea teorica avrei ragione, ma in pratica hai ragione tu.. ottimo ho imparato qualcosa, faccio mea culpa:D
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 11:34
da giacomo328
che vuol dire? che in pratica la macchina ha più buon senso di chi l'ha progettata? allora involontariamente subentrano le tre leggi della robotica?
sempre sia benedetto Isaac Asimov
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 14:02
da McMax
FraPaola: "The order of instructions in the program flow does not always guarantee the order of the
corresponding memory transactions. The reason for this is that:"
Qui parla solo di come sono organizzate le istruzioni in memoria, non ha nulla a che vedere con l'instruction pointer, e infatti:
"The processor can reorder some memory accesses to improve efficiency, providing this
does not affect the behavior of the instruction sequence."
Il compilatore non c'entra nulla in questo caso; qui è ST che (giustamente) ti garantisce la giusta sequenza di esecuzione di un codice già caricato in flash. Il problema che hai posto tu compilando con gcc è a livello di compilatore, non di processore.
Più che ipotesi remota diciamo che dovrebbe essere impossibile.... anche perchè risulterebbe in un bug. Non che non ce ne siano, ben intesto, ma se andiamo a considerare i bug allora il discorso è differente.
Un riordino della sequenza di esecuzione da parte del compilatore atto ad ottimizzare il codice non ha senso, soprattutto in un'architettura come ARM.
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 15:07
da giacomo328
PIGI aiuto!!!!
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 15:15
da FraPaola

Ottimo, ho imparato qualcosa!
Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 15:25
da yrag
Lo dico ad Alan, sarà felice di saperlo...

Re: nuovo controller Mc Raban basato su STM32 Nucleo
Inviato: lun gen 29, 2018 15:28
da FraPaola
Chi sarebbe Alan?