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

[C]ATmega103 - Zapisanie danych do konkretnej komórki pamięci RAM

svensonie 04 Lut 2014 20:56 1596 8
REKLAMA
  • #1 13262448
    svensonie
    Poziom 11  
    Witam,
    Piszę program na Atmeg103 w języku C. Chciałbym się dowiedzieć czy istnieje możliwość zaimplementowania zapisu/odczytu danych do/z konkretnej komórki pamięci RAM? Chodzi mi o zrobienie tego pisząc program w C, nie korzystając z asemblerowych wstawek w kodzie.

    Z góry dziękuje za pomoc
  • REKLAMA
  • #2 13262617
    tmf
    VIP Zasłużony dla elektroda
    Oczywiście i to nawet prosto. Musisz tylko przedefiniować sekcje danych - można też stworzyć własną sekcję, ale wtedy do zmiennych będziesz musiał dodawać odpowiedni atrybut (tak jak PROGMEM lub EEMEM). Ściągnij sobie przykłądy do mojej książki o AVR, tam znajdziesz projekty realizujące tą ideę.
  • #3 13262930
    michalko12
    Specjalista - Mikrokontrolery
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Przykład:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 13263227
    BlueDraco
    Specjalista - Mikrokontrolery
    Ale po co? Przecież żaden inny program nie będzie pisał ani czytał zmiennych po adresach pamięci.
  • REKLAMA
  • #5 13263806
    Eagle
    Poziom 24  
    BlueDraco napisał:
    Ale po co? Przecież żaden inny program nie będzie pisał ani czytał zmiennych po adresach pamięci.


    Nie wiem czy w tym wypadku, ale dość często gdy na zewnętrznej magistrali adresowej masz podpięte jakieś zewnętrzne układy, jest to jedyny sposób na komunikacje z nimi.
  • #6 13397386
    svensonie
    Poziom 11  
    Dziękuję za odpowiedź, chciałem jeszcze spytać jak wygląda odczyt bo jak robiłem analogicznieczyli: data = *(uint8_t*)(0x1001);
    to niestety nie zadziałało
  • #7 13398602
    BlueDraco
    Specjalista - Mikrokontrolery
    Skąd wiesz. że nie zadziałało?
  • #8 13399156
    svensonie
    Poziom 11  
    bo obserwuje jego pracę w modelsimie (rdzeń mikrokontrolera który programuje jest zaimplementowany w vhdl-u)
  • REKLAMA
  • #9 13399235
    BlueDraco
    Specjalista - Mikrokontrolery
    Jeśli zapis zrealizowany jako:
    *(uint8_t*)(0x1001) = data;

    Nie daje się zweryfikować odczytem
    data = *(uint8_t*)(0x1001);

    - to problem leży po stronie braku symulacji odpowiedniej komórki pamięci, a nie w samym sposobie zapisu obu operacji w C.
REKLAMA