Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Kasowanie wartości zmiennej (w przerwaniu)

waski78 28 Nov 2006 15:19 1257 2
  • #1
    waski78
    Level 17  
    Chcę zrobić urządzenie, które zlicza serie impulsów, przy czym po każdej serii musi być zerowane ( tak by wynik następnej serii nie był dodawany do wyniku z poprzedniej).Impulsy doprowadzane są do wejścia INT0. Mam jednak probelm - gdy licznik zliczy np w pierwszej seriii 1000 impulsów i wyświetla mi poprawny wynik to gdy przychodzi druga seria np też 1000 impulsów to wyświetlany jest wynik 2000 a nie 1000. Pytanko jak wyzerować wartość zmiennej która znajduje się w przerwaniu ??

    Programik wygląda mniej więcej tak:

    SIGNAL(siganal_interrupt0)
    {
    imp++ // tą wartośc chcę wyzerować po pierwszej serii
    }

    main()
    {

    if(coś tam)
    {
    imp=0 // tak chciałem to zrobić ale zmienna imp mimo to nie zeruje się
    }

    }

    Czy jest jakiś sposób na to ???
  • Helpful post
    #2
    bis
    Level 21  
    Oba procesy trzeba zsynchronizować. w pełny sposób to do kazdej zmiennej która jest używana (zarówno zapis ja i odczyt) trzeba by było dostawić indywidualna flagę (mutex). Moze w twoim wypadku wystarczy prościej (ale zerowanie wystąpi dopiero jeżeli wystąpi następne zdarzenie).

    Code:


    int fClearCounter;
    unsigned imp;

    SIGNAL(siganal_interrupt0)
    {
      if( 1 == fClearCounter )
     {
        fClearCounter = 0;// skasowanie flagi
        imp = 0;               // zerowanie licznika
      }

       imp++; // to zawsze bo prezcież nastąpiło zliczane zdarzenie
    }

    main()
    {
    fClearCounter = 0;// to na początek;
     enable_interrupts();// tu dopiero włączenie tych przerwań

    if(coś tam)
    {
    fClearCounter =1;// zaznaczasz że chcesz wyzerować
    }

    }



    bis
  • #3
    waski78
    Level 17  
    OK, dzięki. Pomogło. Trochę zwolniło to działanie programu, ale wystarczy.