logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Problem z odczytem/zapisem danych z tablicy w pamięci Flash

slaweks861 07 Lut 2010 21:58 2327 7
REKLAMA
  • #1 7660103
    slaweks861
    Poziom 10  
    Witam. Zadeklarowałem dwie tablice w pamięci Flash. Obie przechowują wartości typu unsigned long.

    1. Jak mogę odczytać z nich wartości, zapisać do zmiennej, coś tam z nimi zrobić i z powrotem zapisać do tej tablicy?

    2. Tak w ogóle to da się zapisać do tablicy, która jest zapisana w pamięci programu (Flash)?

    Proszę o pomoc...
  • REKLAMA
  • #2 7660227
    mirekk36
    Poziom 42  
    slaweks861 napisał:

    1. Jak mogę odczytać z nich wartości, zapisać do zmiennej, coś tam z nimi zrobić i z powrotem zapisać do tej tablicy?

    2. Tak w ogóle to da się zapisać do tablicy, która jest zapisana w pamięci programu (Flash)?


    1. poczytaj o makrach typu pgm_read
    2. nie da się zapisać do takiej tablicy nic z poziomu programu
  • REKLAMA
  • Pomocny post
    #3 7660285
    grysek
    Poziom 19  
    Da się zapisywać do pamięci programu dane z poziomu wykonującego się programu. W assemblerze AVR występuje instrukcja SPM która zapisuje słowo z pary rejestrów R0:R1 do pamięci programu pod adres określony rejestrem Z :P Nie próbowałem tego nigdy ale faktem jest że coś takiego jest i wystarczy zajrzeć do datasheet'u :P
  • REKLAMA
  • #4 7660338
    tmf
    VIP Zasłużony dla elektroda
    Tak, da sie tak zrobic, z tym, ze zapis do FLASH nie jest az tak prosty. SPM musi wykonywac sie z pamieci NRWW, a zapis musi dotyczyc calej strony pamieci, co wiaze sie z koniecznoscia jej wczesniejszego odczytu. No i mamy limit zapisow do ok. 10k.
  • REKLAMA
  • #5 7660370
    mirekk36
    Poziom 42  
    grysek napisał:
    Da się zapisywać do pamięci programu dane z poziomu wykonującego się programu. W assemblerze AVR występuje instrukcja SPM która zapisuje słowo z pary rejestrów R0:R1 do pamięci programu pod adres określony rejestrem Z :P Nie próbowałem tego nigdy ale faktem jest że coś takiego jest i wystarczy zajrzeć do datasheet'u :P


    No właśnie, da się ;) .... ale dlaczego nie próbowałeś? bo spróbować można..... i na tym się zwykle kończy. To nie jest droga do tego, żeby działać sobie na tablicach we flashu jak na tablicach w RAM'ie. Tak więc komuś kto zaczyna naukę C na tych prockach na pewno nie chodzi o taką właśnie możliwość zapisu dlatego uważam że nie warto w takim przypadku nawet tym sobie głowy zawracać.
  • #6 7660431
    grysek
    Poziom 19  
    mirekk36 napisał:
    To nie jest droga do tego, żeby działać sobie na tablicach we flashu jak na tablicach w RAM'ie.


    Właśnie dlatego nie próbowałem, bo było mi to nie potrzebne jak narazie. Jest to dosyć skomplikowane i dla danych które mam często zmieniać zawsze korzystam z pamieci RAM. Może lepiej skorzystać z jakiejś zewnętrznej pamięci?
  • #7 7660584
    slaweks861
    Poziom 10  
    Może i jestem początkujący, ale zostałem rzucony na głęboką wodę... Dzięki za info, że takie coś da się zrobić, ale w assemblerze to na chwilę obecną odpada. Musi być w C. A te tablice są bardzo potrzebne i pomyślałem że zapis do nich będę przeprowadzał z poziomu komputera PC a następnie wgrywał już gotowe przetworzone tablice do flasha i na nich operował (odczytywał). Thx za pomoc
  • #8 7660660
    iryseee
    Poziom 14  
    Witam w bascomie to wygląda tak:
    Dim Rejestr_1 As Long At &H500
    Dim C1 As Byte At &H500 Overlay '0
    Dim C2 As Byte At &H501 Overlay '1
    Dim C3 As Byte At &H502 Overlay '2
    Dim C4 As Byte At &H503 Overlay '4
    nie wiem jak w c mam nadzieje że ci to coś pomoże.
    potem robisz zapis w eepromie i odczyt
REKLAMA