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

zmienna globalna i przerywania, atmega16

mrgr 12 Gru 2008 15:21 1029 6
  • #1 5849942
    mrgr
    Poziom 15  
    Witam,
    problemik mam następujący:
    program mierzy sobie napięcie i prąd w przerywaniu timera0, a w przerywaniu timera1 ma go wyświetlać... dodam timer0 chodzi jakieś 8 razy szybciej niż timer1
    
    //deklaracja zmiennej
    unsigned char *bufor;
    float napiecie;
    //wykorzystanie tej zmiennej w przerywaniu
    SIGNAL (SIG_OVERFLOW1)
    {
    write_text("napiecie=");
    dtostrf(napiecie, 0, 1, bufor);
    write_text(bufor); //wyrzuca na lcd
    write_text("prad=");
    dtostrf(prad, 0, 1, bufor);
    write_text(bufor); //wyrzuca na lcd
    }
    


    na lcd dostaje jedynie "napiecie= prad= "

    pytanie jak to obejść??

    Pozdrawiam,
    mgrg
  • #2 5849981
    don diego
    Poziom 32  
    mrgr napisał:
    na lcd dostaje jedynie "napiecie= prad= "

    pytanie jak to obejść??

    Pozdrawiam,
    mgrg

    1. Pokazać cały kod.
    2. W wolnej chwili sprawdzić czym się różni przerwanie od przerywania :D
  • #3 5850039
    mrgr
    Poziom 15  
    cały kod zajmuje straszenie dużo...
    jak dam deklarację *bufor wewnątrz przerywania to program działa (wniosek -> jak zmienna jest globalna to ma problem z dostępem do niej)... stąd moje pytanie co z tym fantem zrobić...
    wiem że deklaracja w stylu:
    volatile unsigned char *bufor;
    

    odpada
  • Pomocny post
    #4 5850069
    Freddie Chopin
    Specjalista - Mikrokontrolery
    a ten bufor na ktory wskazujesz to ma jakis rozmiar? <: to ze ci to dziala to tylko przypadek [;

    ciekawi mnie tez, dlaczego deklaracja w jakims tam stylu od razu odpada...

    4\/3!!
  • Pomocny post
    #5 5850107
    pawci0
    Poziom 13  
    kolega Freddie zasugerował jedno z możliwych rozwiązań, mianowicie:
    zamiast deklarować jakiś wskaźnik do bufora, spróbuj zadeklarować tablicę, np:
    unsigned char bufor[10];
    nie jestem pewien co z tą funkcją dtostrf(), może to ona nie działa...
  • #6 5850135
    mrgr
    Poziom 15  
    bufor ten ma taki rozmiar jaki przypisze mu funkcja dtostrf() przy konwersji na typ znakowy

    a czemu odpada.... :) cóż kompilator mi tak mówi a ja jak głupi powtarzam ;)

    po prostu zastanawiam się czemu to nie działa...

    Dodano po 3 [minuty]:

    zadeklarowałem jako stały rozmiar i śmiga... tylko tak do końca nie jest to odpowiedź dlaczego nie radził sobie program z *bufor
  • #7 5850267
    szelus
    Poziom 34  
    A może poczytaj, jak działa funkcja, której używasz (dtostrf) i czy alokuje jakiś bufor?
REKLAMA