Pokrewne
menu      Co myslicie ? DS1621<->MAX232<->MAX232<->AVR
menu      Nagrywarka DVD + głośniki/ Nagrywara + graficzna + ram
menu      Pentium Dual++ z 1GB RAM zamiast 2GB i 1 dyskiem 80GB zamiast dwóch
menu      Gama SP 2008 reload: więcej RAM'u i więcej dysków
menu      GPS AVR ATMega128 - pomiar odleglosci pomiedzy dwoma punktami
menu      firmware/projekt AVR JTAG+ISP naraz?
menu      Prosty programator AVR - skad zasilanie w LPT?
menu      Karta RJ-45 na USB i AVR
menu      Pytanko o procesory avr - nóżka reset
menu      Biblioteka GLCD na T6963C do AVR poszukiwana
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • audipoznan.keep.pl
  • avr-gcc zajetosc ram/data - dziwne zachowanie





    BartekK - 13-04-2007 23:45
    avr-gcc zajetosc ram/data - dziwne zachowanie
      Nie wiem, czy ja cos zle robie...
    Mam program (dosc prosty w dzialaniu) ktory operuje w zasadzie na kilku
    zmiennych tylko (razem moze z 30bajtow powinny zajmowac), ktore sa
    definiowane globalnie jako "volatile static", bym mogl do tych samych
    zmiennych dostawac sie z programu glownego, z przerwan i z wewnatrz
    funkcji (ktore sa typu void funkcja(void) a wewnatrz operuja na
    zmiennych globalnych)
    Jedna z nich jest tablica, dokladnie to "volatile static int16_t
    tablica[rozmiar]". Gdy podaje rozmiar np 1 - mam zajetosc data ~200
    bajtow. Gdy definiuje rozmiar 2, zajetosc skacze do ~219bajtow. Przy
    rozmiarze 64 (czyli teoretycznie 128bajtow tablicy) juz mam data >1300
    bajtow, co niestety na atmega16 nie jest zbyt optymistyczne.
    W funkcjach/obslugach przerwan uzywam jeszcze paru zmiennych
    "tymczasowych" definiowanych lokalnie wewnatrz funkcji, ale probowalem
    (poniewaz nie ma grozby ze rownoczesnie 2 funkcje taka zmienna
    zmodyfikuja) przeniesc je jako globalne volatile static i tez nie
    pomoglo...

    Na projekt skladaja sie pliki:
    main.c
    uart.c
    lcd.c
    eprom.c
    oraz pliki naglowkowe:
    main.h (inkludowany w kazdym .c)
    uart.h, lcd.h, eprom.h (inkludowane z odpowiednich .c)

    W pliku main.h definiuje wszystkie zmienne "globalne", bym mial do nich
    dostep np z funkcji zyjacej wewnatrz eprom.c. Probowalem robic tak:
    #ifndef _ZMIENNE_
    #define _ZMIENNE_
    volatile static uint8_t zmienna;
    #else
    extern volatile static uint8_t zmienna;
    #endif
    by wielokrotnie (z okazji wielokrotnego inkludowania main.h) nie
    definiowac tych samych zmiennych, ale nic to nie zmienilo...

    Moze wogole zle do tego podchodze? moze sztuka pisania w c mi nie
    wychodzi ;)

    --

    | Bartlomiej Kuzniewski
    | http://drut.org/
    | http://www.allegro.pl/show_user_auctions.php?uid=338173





    Piotrek Sz. - 14-04-2007 07:45

      BartekK <sibi@NOSPAMdrut.org> napisał(a):

    > Nie wiem, czy ja cos zle robie...
    >...
    Ty chyba nie bardzo rozumiesz , co oznacza static :(
    Zmienne zadeklarowane jako static , są "widziane" tylko w module , w którym
    zostały zadeklarowane.Krótko mówiąc , zmienna volatile static typ x w module
    main.c , nie jest tą samą zmienną volatile static typ x , której używa moduł
    uart.c itd.To sa odrębne zmienne - pomimo takiej samej nazwy i zajmują odrębny
    obszar w RAM-ie.Dlatego też , jeśli zwiększasz rozmiar zmiennej static w pliku
    main.h o np. 1 bajt , to zajętość pamięci operacyjnej zwiększa się o tyle
    bajtów , w ilu modułach tę zmienną zadeklarowałeś.Jeśli chodzi o "extern
    volatile static zmienna" - bezsensowne :(
    Jeśli chcesz , by każdy moduł Twojego projektu miał "dostęp" do zmiennej , a
    kompilator jej nie optymalizował , to zadeklaruj zmienną globalną jako
    volatile jednym module , a w innych używaj jej jako extern.

    Pozdrawiam
    Piotrek

    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/




    BartekK - 14-04-2007 12:45

      Piotrek Sz. napisał(a):
    >> Nie wiem, czy ja cos zle robie...
    > Jeśli chcesz , by każdy moduł Twojego projektu miał "dostęp" do zmiennej , a
    > kompilator jej nie optymalizował , to zadeklaruj zmienną globalną jako
    > volatile jednym module , a w innych używaj jej jako extern.
    Dzieki, tak tez podejrzewalem:)
    Zmienilem miejsce definiowania zmiennych globalnych (poczatek main.c),
    wyrzucilem to static i juz jest ok.

    --
    | Bartlomiej Kuzniewski
    | http://drut.org/
    | http://www.allegro.pl/show_user_auctions.php?uid=338173
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • konstruktor.keep.pl
  • Design by flankerds.com