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

[AVR-GCC][ATmega32] Alokacja pamięci

Pajczi 07 Lip 2010 14:42 1306 3
REKLAMA
  • #1 8270281
    Pajczi
    Poziom 14  
    Zastanawiam się czy dostępna pamięć w ATmega32 wystarczy do alokacji tablicy dwuwymiarowej 360x 3 bajty = 1080 bajtów . Chciałbym stworzyć taką tablicę żeby w zależności od zapisanych w niej danych zmieniać wyjścia całych portów. Moje pytanie to - jak najłatwiej to zrobić i czy wystarczy na to pamięci (rozumiem że zmienne są przechowywane w pamięci typu ram ale tu w zasadzie będzie stała zakodowana sekwencja więc można ją przenieść do eepromu ale ten w przypadku Atmegi32 ma 1kB a sramu 2kB). Wykorzystywane porty to A, C i D (co z rezystorami podciągającymi czy w przypadku portu D jako wyjścia muszą być dodatkowe rezystory podciągające ?). Rozwiązanie które mi się nasuwa to zastosowanie struktury, w której będą bajtowe zmienne A,B,C i stworzenie jednowymiarowej tablicy zawierającej 360 elementów tej struktury a następnie iterowanie po tej tablicy i odpowiednie przypisanie zmiennych. Czas iteracji to 0,5 sekundy.
  • REKLAMA
  • #2 8270383
    tmf
    VIP Zasłużony dla elektroda
    No skoro masz 2kB SRAM, a tablica zajmuje 1080 bajtów to się zmieści. Jeśli są to stałe to można też je przenieść do FLASH (zobacz progmem).
    Co do rezystorów podciągających to możesz je włączyć na wszystkich portach. Nie rozumiem o co ci chodzi.
  • REKLAMA
  • #3 8280016
    Pajczi
    Poziom 14  
    Dziękuję za odpowiedź. A jak te dane najłatwiej (szybciej) załadować do pamięci programu (lepszy będzie RAM czy FLASH ? program wiele więcej nie robi więc RAM nie jest strategiczny). Bo wklepywanie tych 1080 bajtów trochę mnie przeraża, mam je teraz zapisane w formie :

    1 - 0xAA 0xCB 0xA3
    2 - 0x54 0xCD 0xFF
    .....
    .....
    360 - 0xDD 0xCC 0x34

    Pierwsza wartość hex odpowiada wartości na porcie D druga C a trzecia A i w pętli program będzie odczytywał daną wartość i wysyłał na port (rozumiem że jeżeli na danym pinie jest jedynka i w kolejnej iteracji też wpisuje tam jedynkę to jest to nie widoczne na zewnątrz i tylko w momencie zmiany z 0 na 1 lub 1 na 0 zmieni się fizycznie wyjście - jest to zrozumiałe ale wolę się upewnić)
  • Pomocny post
    #4 8280094
    gaskoin
    Poziom 38  
    jest jak mówisz, jeżeli na pinie procesora jest stan wysoki, to po "zmianie" tego stanu na stan wysoki nie widać tego z zewnątrz.
REKLAMA