Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1

Как создать задержку в 1 секунду в драйвере

02.03.2016, 08:58. Показов 2699. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу простейший драйвер под электронную плату. Нужно сделать так, чтобы при нажатии кнопки получились "бегущие" леды. То есть нужно сделать задержку в одну секунду или пол-секунды между тем, как погаснет один лед и загорится следующий.

Функция ядра
Bash
1
ssleep(1)
для этого не годится - эта функция "усыпляет" процесс, а не создает задержку. Делать пустой цикл тоже не годится - за...бался высчитывать вручную коэффициент, чтобы создать видимую глазу задержку. Убил весь день на то, чтобы выяснить, что для этого проца это число больше 4,000,000,000 и меньше 5,000,000,000.

Может есть готовая функция, создающая такую задержку ?

Добавлено через 9 часов 18 минут
Если что, речь идет о kernel, обычные функции из user-mode здесь не годятся...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2016, 08:58
Ответы с готовыми решениями:

Как создать временную задержку
#include<iostream> using namespace std; int main () { setlocale(LC_CTYPE,"Russian"); ???

Как создать задержку между переходами по страницам в WebBrowser
как заставить компонент webbrowser ждать несколько секунд перед тем как перейти на другую страницу? webBrowser1.Navigate(url1); ...

Рассчитать задержку распространения сигнала и задержку передачи данных
Здравствуйте. Рассчитайте задержку распространения сигнала и задержку передачи данных для случая передачи пакета согласно исходных...

10
курлык-курлык
 Аватар для Max Patsy
87 / 96 / 8
Регистрация: 26.11.2009
Сообщений: 396
Записей в блоге: 1
02.03.2016, 17:11
Лучший ответ Сообщение было отмечено max_sk как решение

Решение

В книге Linux Device Drivers в этой главе http://www.xml.com/ldd/chapter/book/ch06.html#t3 есть пункт Delaying Execution. Там описаны пару методик и функций ядра для достижения задержек. Сам до этого я еще не дочитал :black_eye.: но вспомнил что такая глава есть.
С уважением
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
02.03.2016, 17:41  [ТС]
Спасибо, завтра посмотрю... :-)
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
02.03.2016, 17:54
max_sk, используй таймер .

Добавлено через 1 минуту
Есть usleep для маленьких интервалов (она не суспендит поток).

Добавлено через 1 минуту
Цитата Сообщение от max_sk Посмотреть сообщение
эта функция "усыпляет" процесс
И что в этом плохого?
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
02.03.2016, 18:08  [ТС]
shmkv, выводит какую то ошибку. Процесс пробуждается в неподходящее время. Буду разбираться.

Попробую использовать функцию mdelay () из приведенной книги...
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
02.03.2016, 18:14
Цитата Сообщение от max_sk Посмотреть сообщение
shmkv, выводит какую то ошибку.
Вы, наверное, где-то в неподходящем месте вызываете. А вообще ну если уже так непреодолимо хочется погреть процессор пустым циклом секунду, то можно прочитать текущее значение таймера и ожидать в цикле, когда пройдет нужное количество тиков.
0
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
02.03.2016, 18:38  [ТС]
Функция , где я делаю задержку простая. Нужно зажечь лед, подождать полсекунды или секунду, погасить лед. Повторить со следующим. Если я отправляю процесс "спать" вместо того, чтобы занять его пустым циклом, то все горит, сверкает и матерится.

Добавлено через 47 секунд
Вернее это не просто функция, а тасклет.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
02.03.2016, 18:52
Цитата Сообщение от max_sk Посмотреть сообщение
Вернее это не просто функция, а тасклет.
Из них убийственно вызвать функции задержки. Задержки можно делать только в полноценных потоках ядра.
0
курлык-курлык
 Аватар для Max Patsy
87 / 96 / 8
Регистрация: 26.11.2009
Сообщений: 396
Записей в блоге: 1
03.03.2016, 00:59
Цитата Сообщение от shmkv Посмотреть сообщение
Есть usleep для маленьких интервалов (она не суспендит поток).
The usleep() function suspends execution of the calling thread for (at least) usec microseconds. The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
03.03.2016, 02:02
Max Patsy, я где-о читал заметку, что до 1мс она не суспеднит поток.

Добавлено через 8 минут
Сам не проверял если что.
1
92 / 19 / 4
Регистрация: 11.04.2015
Сообщений: 1,019
Записей в блоге: 1
04.03.2016, 16:40  [ТС]
Короче, сделал. Спасибо, Max Patsy, функция mdelay () работает. Никакого крэша или memory dumped не вызывает.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2016, 16:40
Помогаю со студенческими работами здесь

Создать задержку КР580
Программно реализовать задержку, 10,1 сек. для микропроцессора КР580, вообще не могу ничего придумать, помогите.

Создать задержку по времени в цикле средствами Qt
Методом штудирования книги макса шлее нашел единственный способ сделать задержку кода - в QTime есть статический метод вызывающий заданный...

Создать программную временную задержку в MPLAB IDE
Создать программную временную задержку на 430 мкс в MPLAB IDE

Создать задержку при выводе строки в консоль
У меня Д/3 по С#. Надо сделать, что-то типа бегущих строчек из фильма Матрица. Вот что получилось: static void Main(string args) ...

Создать задержку времени в строке кода: Thread. sleep не рассматриваю
Всем привет. Как можно создать временную задержку в строке кода?? К примеру есть событие Event (срабатывает ежесекундно), в нем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru