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

Funkcja czekaj w C. Czy ma ktoś gotową? Coś na wzór waitus w Bascomie.

dzik84 23 Mar 2006 17:03 3374 14
REKLAMA
  • #1 2448417
    dzik84
    Poziom 17  
    Posty: 444
    Pomógł: 30
    Ocena: 17
    Czy ktos ma jakąś gotową funkcje w C
    coś na styl bascom'owego waitus
  • REKLAMA
  • REKLAMA
  • #3 2765147
    avr_elektronik
    Poziom 14  
    Posty: 171
    Pomógł: 1
    Ocena: 1
    a gdy sa potrzebne opóźnienia w ns ??
  • #4 2765392
    aristot
    Poziom 14  
    Posty: 149
    Pomógł: 10
    Ocena: 4
    Raczej ci się nie uda ;)
  • REKLAMA
  • #5 2765404
    marcinsky
    Poziom 14  
    Posty: 75
    Pomógł: 1
    Ocena: 3
    opóźnienia ns nie mają sensu ? :) wywołanie procedury, lub wstawienie if'a moze zając więcej czasu ;)
  • #6 2765511
    Holy

    Poziom 14  
    Posty: 155
    Pomógł: 5
    Ocena: 6
    asm("nop") - i już masz przy 10MHz zegarze 100ns. :)
    Konto firmowe:
    HOLTECH
    Fabryczna 18 lok. U6, Białystok, 15-483 | Tel.: +48XXXXXXXXX (Pokaż) | Strona WWW: www.holtech.eu
  • #7 2765819
    avr_elektronik
    Poziom 14  
    Posty: 171
    Pomógł: 1
    Ocena: 1
    ok dzieki sprawa sie wyjasnila
    Holy jak dobrze rozumuje to jeden "nop" :) przy zegarze 7.3MHz bedzie dawal 73 ns ?
  • #8 2765830
    Dexter77
    Poziom 28  
    Posty: 889
    Pomógł: 134
    Ocena: 19
    Czestotliwosc to odwrotnosc czasu.Wiec przy 7,3 MHz 1/7300000= 0,00000136s czyli 136ns
    Pozdrawiam
    Dexter
  • #9 2765845
    avr_elektronik
    Poziom 14  
    Posty: 171
    Pomógł: 1
    Ocena: 1
    dzieki Dexter77 nie wiem co mnie tak zacmiło :) moze przez ta temperature :D .czyli podsumowując 136 ns to jest najkrótszy czas jaki da sie wygenerować w procku z rdzeniem AVR 1 takt = 1 cykl .
    pozdrawiam
  • #10 2803113
    mack23
    Poziom 17  
    Posty: 300
    Pomógł: 1
    Ocena: 32
    fajnie używać _delay_ms(x) tylko że kod staje sie dłuższy o jakieś 2 KB.
    w assemblerze zmieściło by sie to samo w 300 bajtach
  • #11 2803944
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    Cytat:
    fajnie używać _delay_ms(x) tylko że kod staje sie dłuższy o jakieś 2 KB.
    w assemblerze zmieściło by sie to samo w 300 bajtach


    Nie przesadzaj...
  • #12 2856949
    majusz
    Poziom 1  
    Posty: 1
    Cytat:
    fajnie używać _delay_ms(x) tylko że kod staje sie dłuższy o jakieś 2 KB.


    Zmien sobie w zakladce Project/Configuration Options/ opcje Optimization na np -O2 i juz zminimalizujesz kod do minimum. Szczegoly. dlaczego tak sie stalo, to masz w helpie AVR Studio (opis tej opcji) i w pdfie, ktory jest w \WinAVR\doc\avr-libc\ Poszukaj tam opisu naglowka delay.h

    Pozdro :)
  • #13 2859946
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    mack23 napisał:
    fajnie używać _delay_ms(x) tylko że kod staje sie dłuższy o jakieś 2 KB.
    w assemblerze zmieściło by sie to samo w 300 bajtach



    Ja stosuje delaye z tej biblioteki i kod ma kilkaset bajtow
  • REKLAMA
  • #14 2860461
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    adamusx napisał:
    ...Ja stosuje delaye z tej biblioteki i kod ma kilkaset bajtow

    Tyle że nadaje sie na krótkie dystanse :(
    Dla F_CPU=11059200 maksymalne opóźnienie to 22 ms, a to czasami za mało.

    Piotrek
  • #15 2861428
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    To dajemy petle w ktorej znajduje sie funkcja delay i w zaleznosci od tego ile razy sie wykona mozemy sobie ustalic czas opoznienia jaki tylko nam sie podoba :)

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji funkcji opóźniającej w języku C, podobnej do waitus z Bascoma, dla mikrokontrolerów AVR. Zaproponowano użycie funkcji z biblioteki , takich jak _delay_ms(x) i _delay_us(x), które realizują opóźnienia w milisekundach i mikrosekundach. Poruszono temat opóźnień w nanosekundach, wskazując, że najkrótszy możliwy czas opóźnienia to pojedynczy cykl zegara procesora (np. 136 ns przy 7,3 MHz), realizowany instrukcją asemblerową asm("nop"). Zwrócono uwagę na rozmiar kodu generowanego przez funkcje delay, który można zminimalizować przez optymalizację kompilatora (np. -O2 w AVR Studio). Wskazano również ograniczenia maksymalnego czasu opóźnienia (np. 22 ms przy F_CPU=11,0592 MHz) i zaproponowano tworzenie pętli wywołującej funkcję delay w celu uzyskania dłuższych opóźnień.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA