Wielkość ERG jest krytyczna pod względem krytycznej wartości przy użyciu ldrex/strex.
Po wydaniu ldrex, jeśli w ERG wystąpi dostęp do pamięci, w którym wystąpił odczyt ldrex, potok zakończy się niepowodzeniem.
Nie jest niczym niezwykłym posiadanie struktury, która zawiera cel docelowy ldrex/strex i dodatkowe dane, gdzie dostęp do dodatkowych danych uzyskuje się między parą ldrex/strex (na przykład, aby zachować wartość załadowaną przez ldex).
Jeżeli cel docelowy ldrex/strex ma niewystarczające wypełnienie w strukturze (tj. Wybrany rozmiar ERG jest zbyt mały), dostęp do innych elementów struktury spowoduje, że strumień ZAWSZE zawodzi.
Gra się kończy, gaśnie.
Jeśli chodzi o ldrex/strex, ARM wdraża "monitor lokalny" i "monitor globalny". W systemach z tylko monitorem lokalnym, jedynym sposobem, w jaki ldrex/strex może zawieść, jest to, że dwa ldrexy są wydawane na ten sam adres przed wydaniem strex - tylko systemy z monitorami globalnymi rzeczywiście zauważają ruch w magistrali pamięci w ramach ERG Cel ldrex/strex.
Systemy ARM różnią się znacznie i podejrzewam, że istnieją systemy, które mają tylko lokalne monitory, a więc w rzeczywistości nie obsługują ldrex/strex.
Podczas gdy prawidłowe pytanie, jestem nieco zaintrygowany, dlaczego powinieneś wiedzieć w celu debugowania? Wielkość ERG powinna mieć wyłącznie wpływ na wyniki. Czy możesz wyjaśnić, czym jest obserwowane zachowanie i czego spodziewałeś się zobaczyć? – unixsmurf
Napotkaliśmy błąd, gdy kompilator wygenerował kod, który uderzył w ERG podczas odczytu zmiennej, do której dostęp uzyskał dostęp - w ten sposób wprowadzając nieskończoną pętlę jako STREX zawsze zawodzi. To niepowodzenie zdarzyło się tylko na urządzeniach A6X. –
Ok. Ale nie widząc kodu, którego dotyczy ten problem, nie jestem w stanie skomentować, czy masz prawdziwy błąd sprzętowy, czy też masz (subtelny) błąd oprogramowania, który możesz obejść, ostrożnie dopasowując zamki, ale może odskoczyć ponownie na innych procesorach. ERG _nie robi_nie_ wpływa na architekturalnie poprawne oprogramowanie na architekturalnie poprawnym sprzęcie w jakikolwiek inny sposób niż wydajność. – unixsmurf