Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[MSP430] Wyznaczenie czasu trwania opóźnienia na podstawie wybranego zegara

Galkio 28 Gru 2011 20:34 1902 7
  • #1 28 Gru 2011 20:34
    Galkio
    Poziom 7  

    Witajcie! Napotkałem na pewne problemy, gdyż potrzebuje napisać program, który będzie wykonywał pewne operacje co dokładne odstępu czasu w mikrosekundach.

    Moja funkcja "opóźniająca" wygląda następująco:

    Code:
    void delay(int skundy)
    
    {
      int s;
      for (s=0; s<skundy; s++);
    }


    Wiem, że każde wykonanie pętli posiada swój stały czas, czyli u mnie będzie to: sekundy*czas_pelnego_cyklu_petli. Początkowe wywołanie działania pętli także zajmuje pewien okres czas, który jest liczony jako 1*czas_na_wywolanie. Czyli łączny koszt czasy wykonania się pętli wyniesie: sekundy*czas_pelnego_cyklu_petli+czas_na_wywolanie. A wynik końcowy jest zależny od wybranego zegara....

    Generalnie (jeżeli łaska :D ) to chciałbym abyście pomogli mi w rozwaleniu tego mechanizmu zależności, czyli jak obliczyć ile czasu kosztuje wywołanie pętli i każdy jej cykl dla konkretnego zegara.

    Jak to wyliczyć dla przykładowo zegara DCOCLK ustawionego na 1MHz ?

    Pozdrawiam :D

    0 7
  • Arrow Multisolution Day
  • Arrow Multisolution Day
  • #3 28 Gru 2011 21:13
    Galkio
    Poziom 7  

    dondu napisał:
    Jaki mikrokontroler?
    Czemu nie timer?


    MSP430


    Timer nie wchodzi w grę w tym przypadku, bo potrzebuję w jednym bloku kodu wykonać kilka odpowiednich opóźnień.

    0
  • #4 28 Gru 2011 21:18
    dondu
    Moderator Mikrokontrolery Projektowanie

    Galkio napisał:
    Timer nie wchodzi w grę w tym przypadku, bo potrzebuję w jednym bloku kodu wykonać kilka odpowiednich opóźnień.

    Po to właśnie jest timer i przerwanie, by nich korzystać, a kod dostosować.
    Poza tym, nic nie stoi na przeszkodzie by jednym timerem sterować wieloma opóźnieniami - kwestia napisania odpowiednio funkcji przerwania, która odlicza poszczególne opóźnienia.

    Nie znam tego mikrokontrolera (umieść nazwę na początku tytułu pierwszego postu) więc więcej niestety nie pomogę.

    0
  • #5 28 Gru 2011 21:26
    Galkio
    Poziom 7  

    dondu napisał:
    Galkio napisał:
    Timer nie wchodzi w grę w tym przypadku, bo potrzebuję w jednym bloku kodu wykonać kilka odpowiednich opóźnień.

    Po to właśnie jest timer i przerwanie, by nich korzystać, a kod dostosować.
    Poza tym, nic nie stoi na przeszkodzie by jednym timerem sterować wieloma opóźnieniami - kwestia napisania odpowiednio funkcji przerwania, która odlicza poszczególne opóźnienia.

    Nie znam tego mikrokontrolera (umieść nazwę na początku tytułu pierwszego postu) więc więcej niestety nie pomogę.


    Nadal będę się upierał przy pętli :P

    Dzięki za chęci pomocy :D

    0
  • #6 28 Gru 2011 21:42
    janbernat
    Poziom 38  

    Uważaj na optymalizację.
    Taki kawałek kodu gcc wytnie- bo on nic nie robi.
    Twój kompilator- nie wiem.
    Powinien chyba znać atrybut volatile.

    0
  • #7 28 Gru 2011 23:51
    Galkio
    Poziom 7  

    janbernat napisał:
    Uważaj na optymalizację.
    Taki kawałek kodu gcc wytnie- bo on nic nie robi.
    Twój kompilator- nie wiem.
    Powinien chyba znać atrybut volatile.


    Czy to na pewno jest odpowiedź do mojego tematu ? ;) Nie wiem jak ustosunkować to co napisałeś do mojego problemu...

    0
  • #8 28 Gru 2011 23:56
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jankowi chodziło o to, że tak nic nierobiąca pętla może zostać różnie potraktowana przez kompilator, w zależności od optymalizacji jaką masz włączoną. W skrajnych przypadkach całość może zostać pominięta jako zbędny fragment programu.

    Zapewne masz w swoim kompilatorze (bibliotekach) zdefiniowane funkcje opóźnień, które możesz stosować, jeśli nadal chcesz się upierać przy pętli zamiast timerów :)

    0