Skocz do zawartości

Pamięć odporna na zaniki zasilania, czyli jak to jest z tym FRAM?


Pomocna odpowiedź

Napisano

Mam sobie takie urządzonko, które często-gęsto zapisuje sobie coś do pamięci. A jak gęsto to wiadomo - jest duże prawdopodobieństwo że zasilanie się wyłączy akurat w najmniej odpowiednim momencie...

Zależy mi na tym, żeby albo ostatni, albo przedostatni zapis mógł być wczytany

No więc wymyśliłem sobie coś takiego:

Zakładając N pozycji i m bajtów w pozycji mam w FRAM trzy tablice:

  • N x 1 bajt (0 albo 1) (tablica Adr)
  • N x m bajtów (tablica T0)
  • N x m bajtów (tablica T1)

Chcąc coś odczytać z pozycji P:

  • odczytuję Adr[P]
  • Odczytuję dane z tablicy T1[P] jeśli Adr[P] był zerem lub T0[P] w przeciwnym razie.

A teraz chcąc zapisać coś na pozycji P:

  • odczytuję Adr[P]
  • Zapisuję coś w tablicy T1[P] jeśli Adr[P] był zerem lub T0[P] w przeciwnym razie.
  • Do tablicy Adr[P] wpisuję przeciwną wartość.

Czy takie coś ma prawo zadziałać w każdych warunkach? A jeśli nie to dlaczego?

 

2 godziny temu, ethanak napisał:

Czy takie coś ma prawo zadziałać w każdych warunkach?

Teoretycznie... FRAM jest pamięcią magnetyczną, więc silne pola magnetyczne jak cewki mogą wpłynąć na jej działanie... Tak więc z dala od przetwornic 😉 

 

  • Lubię! 2
4 minuty temu, ethanak napisał:

będę kombinować

Tak jeszcze jedno: skoro zamierzasz odczytywać z tablicy A albo z tablicy B na podstawie indeksowania to polecam zrobić unię i przepleść tablice w pamięci na bazie A0, T1, T2, [opcj. RESERVED dla lepszego ułożenia, o ile pamięć wspiera odczyt po 4 bajty]. To powinno nieźle przyspieszyć odczyt, gdyż nie będziesz musiał przestawiać adresu w pamięci, a wystarczy wysłać odczyt i odrzucić X wartości (idnk. czy działa dla Twojego FRAM, przy DRAM bardzo się przydaje).

I wbrew pozorom te różnice potrafią być drastyczne przy dużej ilości operacji (rekord jaki osiągnąłem to ok. 6x większa wydajność).

Akurat tak strasznie na szybkości mi nie zależy (mogę sobie pozwolić nawet na parę milisekund) - chodzi mi raczej o to, aby miejsca do których coś wpisuję były jak najdalej od siebie. A zapis jest do jednej konkretnej pozycji P przez dłuższy czas co kilka sekund. Jeśli po chamskim wyłączeniu dostanę wartość poprzednią to pewnie nawet tego nie zauważę 🙂 Ale którąś dostać muszę...

 

@ethanak Przed zmianą kopii, czyli zapisem do Adr[P] proponowałbym jeszcze odczytanie zawartości Tx[P]. Może się tak zdarzyć, że podczas zapisu nastąpił błąd i wtedy algorytm nie będzie działał poprawnie.

  • Lubię! 1
  • Pomogłeś! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...