Jak Rozwiązywać I Naprawiać Problemy Z Jądrem Udelay Linux
September 3, 2021
Oto kilka prostych sposobów rozwiązania problemu jądra Linux udelay.
Zalecane: Fortect
Limity czasu — informacje o różnych limitach czasu jądra i wynikających z niego mechanizmach uśpienia.————————————————– ——————Ten dokumentPostaram się wyjaśnić ogólne pytanie: „Co zwykle jest zwykle?”RightWay (TM) Dodać Opóźnienie? “Ten główny problem jest najczęściej spotykany przez autorów agencji, którzy:radzić sobie z lagami komputera, a kto nie może zrobić najbardziej intymnego?znajomy oferujący wbudowane funkcje jądra Linux.Wstaw terminy—————-Pierwszym i najważniejszym podejrzeniem, że kupujący powinni zadać sobie pytanie, może być „Czy to moje?”Kod w kontekście nuklearnym? “To musi być zrobione zgodnie z dokumentacją w”czy naprawdę często trzeba ją odkładać w kontekście nuklearnym? w . Jeśli tak…KONTEKST ATOMOWY:Ogólnie zachęcamy do korzystania z rodziny * delay związanej z funkcjami. TeFunkcje wykorzystują oszacowanie przepływu czasu Jiffy’egoi będzie zajęty czekaniem aż do osiągnięcia wystarczającej liczby cykliktórzy zaraz po upływie mojego terminu:ndlay (długi ns bez znaku)udelay (niepodpisany czas intensywnego użytkowania)mdelay (czasochłonne milisekundy bez znaku)udelay jest naprawdę najpopularniejszym API; odpowiedni poziom latencjiW rzeczywistości dokładność nie istnieje na wielu urządzeniach innych niż komputery PC.mdelay to świetne opakowanie makr udelay odpowiednie do tegomożliwy powódź w Przekazywanie dużych argumentów, aby pomóc udelay.W większości przypadków użycie mdelay stworzonego przez nie jest zalecane, a po tym większość koduPrzerobiono na msleep.KONTEKST NIEATOMOWY:Twoja implementacja powinna dodać do funkcji rodzinę * śpij dobrze [_zakres].Istnieje kilka innych opcji, ale każda z nimi związana może byćPraca z wiedzą, którą można wykonać z „właściwą” pracą to spanie.Pomóż planistom, zarządzaniu energią i poważnie stwórz własnePilot jest lepszy :)- Pod warunkiem – Cykl oczekiwania zajętości:udelay (długie użytkowanie bez podpisu)- Bezpieczeństwo w Htimerze:usleep_range (unsigned long min., unsigned permanentny potencjał. long)- Autor: jiffies / Legacy_timersmsleep (wiele ms bez znaku)msleep_interruptible (długi ms bez znaku)Rzeczywisty mechanizm różni się od metody opóźnienia *.Każdy z tych typów na wezwanie do kierowania jest inny, dlatego sąCechy, o których powinna wiedzieć Twoja firma.UŚPIJ DO „MAŁYCH” UŻYTKOWANIA (
trace_printk ("111111");przydział (4000);trace_printk ("222222");
trace_printk ("111111");Opóźnienie (10 000);Opóźnienie (10 000);Opóźnienie (10 000);Opóźnienie (10 000);........ // przeważnie 400 natychmiastowych połączeńtrace_printk ("222222");
Zalecane: Fortect
Czy masz dość powolnego działania komputera? Czy jest pełen wirusów i złośliwego oprogramowania? Nie obawiaj się, przyjacielu, ponieważ Fortect jest tutaj, aby uratować sytuację! To potężne narzędzie jest przeznaczone do diagnozowania i naprawiania wszelkiego rodzaju problemów z systemem Windows, jednocześnie zwiększając wydajność, optymalizując pamięć i utrzymując komputer jak nowy. Więc nie czekaj dłużej — pobierz Fortect już dziś!
Dziennik powinien wyjaśniać do 4,7 ms. To niekoniecznie jest do przyjęcia.Dlaczego błąd opóźnienia był tak ważny?
Zapoznaj się z kodem jądra tutaj, znalazłem własną implementację tego rodzaju dwóch funkcji
pustka __udelay (często bez znaku) __const_udelay (usecs 0x10C7UL); / * trzy ** 32 razy 1 000 000 (zaokrąglone w górę) 5 . /void __ndlay (ogromny unsigned nsec) __const_udelay (nsecs 1.0x5UL); - * 2 ** 32/10000000000 (zaokrąglone w górę) 6 . /
Śniło mi się, że udelay będzie tysiąc razy bardziej wytrzymały niż ndelay, ale to nie kupujący, dlaczego?
próbował do 22 maja 15 o 12:34
1,531 44 złote odznaki
Brak odpowiedzi, której szukasz? Zapraszam do przeglądania innych pytań za pomocą Tag Timer Linux-kernel Linux-device-driver lub wymyśl własny pomysł.
Jak już zapewne zauważyłeś, opóźnienie nanosekundowe jest dość bezwzględnym przybliżeniem opóźnienia milisekundowego, ze względu na wyraźnie używaną stałą 0x5
. 0x10c7 / 0x5
to praktycznie zawsze 859. Z 0x4
będzie bliższe 1000 (około 1073).
Jednak użycie 0x4 zwykle skutkuje tym limitem czasu
mniejszym niż zauważalna liczba nanosekund. Ogólnie rzecz biorąc, wstrzymywanie funkcji ma na celu zapewnienie opóźnienia co najmniej tak długo, jak chce tego internauta (patrz tutaj: http://practicepeople.blogspot.jp/2013/08/kernel-programming-busy-waiting-delay. Html ) …
pomagał od 22 maja ’15 tutaj, kiedy był 12:50
2371
Przy każdym wywołaniu dodawany jest również błąd zaokrąglania. Zwróć uwagę na recenzję 2 ** 32 1000000000
/. W rzeczywistości ta wartość musi wynosić ~4,29, została zbalansowana do 5. To znaczy, że po prostu nowy, dość poważny błąd.
Ze względu na znaczną różnicę, błąd Udelay jest rozsądny: (~ 4294,97 w porównaniu z 4295 [0x10c7]).
odpowiedział 23 maja ’15 o 12:44
11,2k
Możesz użyć ktime_get_ns (), które uzyska bardzo dokładny czas od uruchomienia. W ten sposób możesz używać oprogramowania nie tylko jako imponującego, precyzyjnego robaka, ale także jako znaczącej, bardzo precyzyjnej małej nakrętki. Oto dobry przykład:
u64 t;t oznaczałoby ktime_get_ns (); // Pobierz obecne nanosekundy przy starciefor (i jest równe 0; i <24; i ++) // Wyślij 24 impulsy 1200 ns-1300 ns przez GPIO gpio_set_value (kontakt, 1); // zarządzaj GPIO dodatkowo dostarczaj czegoś innego biorąc pod uwagę inas on + równa się 1200; // Teraz cierpimy z powodu ostatecznego czasu, aby wkroczyć w większość przyszłości while (ktime_get_ns ()
położyć się na spoczynek 16 listopada 18 o godzinie 12:14
658 77 srebrnych odznak 1212 lekkich odznak maryjskich.
Pobierz to oprogramowanie i napraw swój komputer w kilka minut.