MECCANICA e DINTORNI
http://meccanicaedintorni.morpel.it/phpbb/

nuovo controller Mc Raban basato su STM32 Nucleo
http://meccanicaedintorni.morpel.it/phpbb/viewtopic.php?f=76&t=17646
Pagina 9 di 10

Autore:  FraPaola [ gio gen 25, 2018 17:27 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

Ni, il compilatore deve garantirti il risultato.. non l'ordine, esempio semplice.
Codice:

int a, b;
void verificaesecuzione(void)
{
   a = b + 1;
   b = 0;
}


Compila con
Codice:
gcc  -S -masm=intel testverifica.c -O2


esegui un
Cita:
cat testverifica.s


vedrai questo codice assembly
Codice:
  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:
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

Autore:  McMax [ gio gen 25, 2018 21:14 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

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.... :b24:

Autore:  yrag [ gio gen 25, 2018 21:19 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

Grazie ! :mrgreen:

Autore:  onorino [ gio gen 25, 2018 21:22 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

Zio ormai sono partiti per la tangente, ignorali :risatina:

Autore:  yrag [ gio gen 25, 2018 21:45 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

Si, prendo le distanze, non vorrei che i mastuggiorgio, nella foga, impacchettassero anche me... :mrgreen:

Autore:  McMax [ ven gen 26, 2018 00:20 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

o magari, nella sfiga, impacchettano solo te :mrgreen:

Autore:  yrag [ ven gen 26, 2018 00:21 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

:shock: :frusta: :frusta:

Autore:  onorino [ ven gen 26, 2018 12:32 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

:risatina:

Autore:  FraPaola [ lun gen 29, 2018 11:26 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

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

Autore:  giacomo328 [ lun gen 29, 2018 11:34 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

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

Autore:  McMax [ lun gen 29, 2018 14:02 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

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.

Autore:  giacomo328 [ lun gen 29, 2018 15:07 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

PIGI aiuto!!!!

Autore:  FraPaola [ lun gen 29, 2018 15:15 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

:rotfl:
Ottimo, ho imparato qualcosa!

Autore:  yrag [ lun gen 29, 2018 15:25 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

Lo dico ad Alan, sarà felice di saperlo... :mrgreen:

Autore:  FraPaola [ lun gen 29, 2018 15:28 ]
Oggetto del messaggio:  Re: nuovo controller Mc Raban basato su STM32 Nucleo

Chi sarebbe Alan?

Pagina 9 di 10 Tutti gli orari sono UTC +1 ora
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/