Il formato ERG è un critico quando si utilizza ldrex/strex..
Quando un ldrex è stato rilasciato, in caso di accesso alla memoria nel ERG entro il quale il ldrex leggere succede, lo strex avrà esito negativo.
Non è insolito avere una struttura che contiene un target ldrex/strex e alcuni dati aggiuntivi, in cui si accede ai dati aggiuntivi tra la coppia ldrex/strex (ad esempio, per memorizzare il valore caricato da ldex).
Se il target ldrex/strex ha un riempimento insufficiente nella struttura (vale a dire che la dimensione ERG scelta è troppo piccola) l'accesso ad altri membri della struttura causerà quindi il failover di SEMPRE.
Game over, si spegne.
Per quanto riguarda ldrex/strex, ARM implementa un "monitor locale" e un "monitoraggio globale". Su sistemi con solo un monitor locale, l'unico modo in cui un ldrex/strex può fallire è se due ldrex vengono emessi sullo stesso indirizzo prima che sia stato emesso un strex: solo i sistemi con monitor globali notano effettivamente il traffico del bus di memoria all'interno dell'ERG del obiettivo ldrex/strex.
sistemi ARM variano enormemente e ho il sospetto ci sono sistemi che hanno solo monitor locali e quindi non in realtà in realtà supportare ldrex/strex.
Mentre una domanda corretta, sono un po 'incuriosito dal motivo per cui è necessario conoscere ai fini del debugging? Le dimensioni dell'ERG non dovrebbero avere nient'altro che impatti sulle prestazioni. Potresti spiegare qual è il comportamento che stai vedendo e cosa invece ti aspettavi di vedere? – unixsmurf
Abbiamo riscontrato un errore quando il compilatore ha generato un codice che ha colpito ERG durante la lettura di una variabile ad accesso esclusivo, entrando così in un ciclo infinito poiché STREX ha sempre fallito. Questo errore si è verificato solo sui dispositivi A6X. –
Ok. Ma senza vedere il codice interessato, non sono in grado di commentare se si può essere un bug hardware reale, o se quello che si ha è un (sottile) bug del software che si può aggirare allineando attentamente i blocchi, ma potrebbe tornare indietro di nuovo su altri processori. ERG _does_not_ influisce su software architettonicamente corretto su hardware architettonicamente corretto in qualsiasi altro modo rispetto alle prestazioni. – unixsmurf