Как устранить проблемы с ядром Udelay Linux
September 3, 2021Вот несколько простых способов исправить проблему ядра Linux с udelay.
Рекомендуется: Fortect
Таймауты – информация о тайм-аутах ядра и механизмах ожидания.————————————————– —————–Этот документ пытается прояснить общее беспокойство: «Что это обычно?»RightWay (TM) Добавить задержку? “С этой основной проблемой очень часто сталкиваются авторы с операторами, которыесправиться с задержкой ПК и тем более кто не может сделать большой процент интимных?знаком со встроенными функциями конкретного ядра Linux.Вставить крайние сроки—————-Первый и главный вопрос, который покупатели должны задать себе, – это «Это мое?»Код в очень атомарном контексте? «Он должен применяться в соответствии с»действительно ли это нужно для того, чтобы вас отложили в ядерной обстановке? ” Если да…АТОМНЫЙ КОНТЕКСТ:В общем, вы и ваша семья должны использовать функции типа * delay. ТеФункции используют оценку скорости расписания Джиффии будет занят, пока не будет достигнуто достаточное время циклакоторые сразу по истечении срока связаны со сроком:ndelay (беззнаковое длинное нс)udelay (значительное использование без знака)mdelay (требующие много времени миллисекунды без знака)udelay считается самым популярным API; прекрасный уровень задержкиФактически, точность отсутствует на многих устройствах, отличных от ПК.mdelay – это правильная обертка макроса udelay, подходящая для этогоВозможное переполнение при передаче в udelay больших оправданий.В большинстве случаев использование mdelay of не рекомендуется, и кодПереработан, чтобы включить msleep.НЕАТОМНЫЙ КОНТЕКСТ:Ваша реализация должна добавить 2. семья сна [_range] для определенных функций.Есть еще несколько вариантов, но практически любой из них может бытьХорошо осведомленные люди будут выполнять некоторую «правильную» работу во сне.Помощь планировщику, управление питанием и многое другое сделать самостоятельноМуха лучше :)- При условии – Цикл “занято-ожидание”:udelay (беззнаковое долгое использование)- Безопасность, расположенная на Htimer:usleep_range (беззнаковый длинный мин., беззнаковый сознательный макс. длинный)- Автор: jiffies / Legacy_timersmsleep (много мс без знака)msleep_interruptible (некоторое время без знака, мс)Базовый механизм отличается от большинства методов задержки *.Каждого из этих различных видов призывов к вождению много, поэтому естьОсобенности, о которых необходимо знать вашему бизнесу.СОН ДЛЯ “МАЛЕНЬКОГО” ИСПОЛЬЗОВАНИЯ (
trace_printk ("111111");выделение (4000); trace_printk ("222222");
trace_printk ("111111");Задержка (10 000);Задержка (10 000);Задержка (10 000);Задержка (10 000);........ // всего 400 мгновенных звонковtrace_printk ("222222");
Рекомендуется: Fortect
Вы устали от медленной работы компьютера? Он пронизан вирусами и вредоносными программами? Не бойся, друг мой, Fortect здесь, чтобы спасти положение! Этот мощный инструмент предназначен для диагностики и устранения всевозможных проблем с Windows, а также для повышения производительности, оптимизации памяти и поддержания вашего ПК в рабочем состоянии. Так что не ждите больше - скачайте Fortect сегодня!
а>
Журнал телесериала должен 4.7мс. Это неприемлемо автоматически.Почему ошибка задержки настолько серьезна?
Изучите код ядра, и теперь я нашел нашу собственную реализацию для этих двух функций
обнулить __udelay (часто без знака) __const_udelay (usecs 0x10C7UL); / * пара ** 32 умножить на 1 000 000 (с округлением в большую сторону) (пробел) /void __ndelay (огромная нсек без знака) __const_udelay (nsecs 1.0x5UL); за * 2 ** 32/1000000000 (округлено в большую сторону) * /
Я подозревал, что udelay будет на тысячу периодов больше, чем ndelay, но это не вы, почему?
звонил 22, 15 мая в 12:34
1.531
Нет ответа, который вы ищете? Не стесняйтесь просматривать другие вопросы с помощью таймера тегов Ядро Linux Драйвер устройства Linux или придумайте свою собственную идею.
Как вы, возможно, уже заметили, задержка в наносекундах является достаточно агрессивным приближением задержки в миллисекундах из-за того, что в настоящее время используется константа 0x5
. 0x10c7 для каждого 0x5
практически равно 859. С 0x4
он будет ближе к 1000 (около 1073).
Однако использование 0x4 обычно приводит к их таймауту
меньше, чем новое указанное количество наносекунд. В большинстве случаев функции задержки нацелены на задержку, по крайней мере, столько, сколько желает некоторые пользователи Интернета (см. Здесь: http://practicepeople.blogspot.jp/2013/08/kernel-programming-busy-waiting-delay. Html) …
облегчил с 22 мая 15 год подходит на 12:50
2371
Ошибка округления также добавляется каждый раз, когда вы ее вызываете. Обратите внимание на тип комментария 2 ** тридцать два 1000000000
/. На самом деле это цена ~ 4,29, она пока округлена до 5. Это новая, довольно серьезная ошибка.
Из-за этой большой разницы ошибка Udelay становится доступной: (~ 4294.97 по сравнению с 4295 [0x10c7]).
ответ дан 20 мая ’15 в 15: 442015-05-20 15:44
11.2k 2424 серебряных слитка 4848 бронзовых значков
Вы можете использовать ktime_get_ns (), чтобы получать очень точное время с момента запуска. Таким образом, вы можете работать с программным обеспечением не только как с собственным высокоточным червяком, но и как с высокоточной крошечной гайкой. Вот пример:
u64 t;t указывает на ktime_get_ns (); // Получаем текущие наносекунды при запускеfor (i равно 0; i <24; i ++) // Отправить 24 импульса 1200 нс-1300 нс означает GPIO gpio_set_value (контакт, 1); // управлять GPIO или предоставлять что-то еще для inas on + равно 1200; // Теперь мы страдаем от абсолютного времени, чтобы шагнуть в это будущее несмотря на (ktime_get_ns ()
уложить в покой 16 ноя 18 найдено в 12:14
658 77 серебряных значков
Загрузите это программное обеспечение и почините свой компьютер за считанные минуты. г.Udelay Linux Kernel
Udelay Linux Kernel
Udelay Linux Kernel
Kernel Linux Udelay
Noyau Linux Udelay
Kernel Linux Udelay
Udelay 리눅스 커널
г.