eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaprogramowanie i kasowanie dwu kostek flash na jednej magistrali › Re: programowanie i kasowanie dwu kostek flash na jednej magistrali
  • Data: 2017-02-10 17:47:47
    Temat: Re: programowanie i kasowanie dwu kostek flash na jednej magistrali
    Od: Piotr Dmochowski <i...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2017-02-10 o 15:55, Pszemol pisze:
    > Piotr Dmochowski <i...@p...onet.pl> wrote:
    >> W dniu 2017-02-08 o 20:31, Pszemol pisze:
    >>>
    >>> Zerknij proszę jeszcze raz na deklarację wskaźnika pStatus oraz zmiennych
    >>> Status1 i Status2.
    >>> To są obiekty 32-bitowe a więc obie kostki pamięci odpowiedzialne są za ich
    >>> zapis.
    >>>
    >>
    >> while(Status1 = *pStatus, Status2 = *pStatus, (Status1 ^ Status2) & (1
    >> << 2))
    >> Przepraszam że zawracam głowę, ale jaki jest sens robienia XOR na
    >> zmiennych pobierających wartość z tego samego adresu?
    >> Tam (praktycznie) zawsze będzie false, chyba że procesor akurat trafi na
    >> zmianę statusu drugiej kostki między jednym a drugim odczytem *pStatus,
    >> ale z takim szczęściem to lepiej kupony wypełniać niż babrać się w kodzie ;)
    >>
    >
    > Piotrze, świetne pytanie.
    > Bo to jest ciekawy fragment procesu kasowania pamieci flash i zapisu do
    > niej.
    >
    > Taka pamięć ma wewnątrz sterownik ktory kontroluje te procesy niejako z
    > wewnątrz kostki. Obsługujesz go przez wspólną magistralę danych i adresów -
    > scalak pracuje w dwu trybach: odczyt danych (wtedy działa jak klasyczny
    > ROM) oraz kasowanie/zapis: wtedy uzyskujesz dostep do wewnetrznego
    > sterownika umówioną sekwencję bajtôw w roli "sezamie otwórz się!" I wtedy
    > możesz wydawać sterownikowi polecenia kasowania/zapisu konkretnych
    > lokalizacji pamięci... A sterownik informuje Cie o postepie operacji
    > kasowania i o błedach ustawiajac stan bitow szyny danych. Miedzy innymi
    > zmienia on stan bitu D6 gdy operacja jest wciaz w toku. Stad w kodzie dwa
    > kolejne odczyty i stad użycie sugestii "volatile" do kompilatora aby tych
    > dwu odczytów nie "zoptymalizowal" myslac ze są bez sensu, tak jak Ty
    > pomyślałes :-))
    Widziałem deklarację z volatile, więc wiem że powinny być 2 odczyty.
    Zastanawia mnie jaki jest sens odczytania danych z jednego adresu i
    zrobienie na nich XORa. Jeżeli między jednym a drugim odczytem nie
    będzie zmiany to wynik będzie zerowy i program nie wejdzie do pętli -
    takie jest moje rozumowanie. Może w praktyce jakoś to działa, ale
    zastanawiam się jaki jest margines błędu w takim rozwiązaniu.
    Jak najbardziej rozumiem pobranie jednego statusu i sprawdzenie D6, bez
    XOR to nie pójdzie?
    Ja bym dał w pętli odczyt statusu i sprawdzenie D6. Wyjście z pętli
    jeżeli D6 ma odpowiednią wartość lub liczba sprawdzeń przekroczyła np.
    100 (i sygnalizacja błędu przekroczonego czasu trwania operacji).

    Chyba że czegoś nie ogarniam i ten odczyt z pamięci ma jakieś dodatkowe
    skutki i może spowodować zmianę odczytanej wartości, ale bez takiej
    wiedzy nie do końca mi się to składa w całość.

    Tak przy okazji pokazywania kodu - myślę że nawet po jednym zdaniu
    komentarza przed kawałkiem kodu byłoby dobra zachętą do analizowania
    przez grupowiczów, a i koledzy w pracy pewnie tez docenią jak będą
    chcieli coś pozmieniać :)

    --
    Pozdrawiam
    Piotrek

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: