Kernel Module: периодическое выполнение (что лучше использовать?)
Модератор: Модераторы разделов
-
- Сообщения: 154
- ОС: CentOS 5.4
Kernel Module: периодическое выполнение
читаю linux device drivers и голова кружится от количества возможных способов для отложенного выполнения.. поэтому вопрос: мне необходимо 12000 раз в секунду опрашивать некий датчик. через что это лучше всего реализовать чтобы не грузить систему понапрасну?
-
- Сообщения: 104
- ОС: Archlinux
Re: Kernel Module: периодическое выполнение
для работы на такой частоте лучше на МК схемку сделать или, если надо просто ждать срабатывания датчика, заюзать прерывания. Можно ещё на звуковуху сигнал от датчика подать...
Рациональное программирование — наш ответ MicroSoft!
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
архитектура - arm. и там ацп.. так что звуковуха тут лесом.
а почему микроконтроллер? неужели производительности не хватит чтобы 12000 раз чего-то делать? это ж мелочь по сути.
а почему микроконтроллер? неужели производительности не хватит чтобы 12000 раз чего-то делать? это ж мелочь по сути.
-
- Сообщения: 694
Re: Kernel Module: периодическое выполнение
А какое на этой архитектуре значение HZ? (количество срабатываний таймера, устанавливаемое ядром).
Теоретически - это предел программно-управляемого опроса.
Если нужно быстрее, без вмешательства в ядро, то остаются - прерывания.
Сам сейчас решаю ту же проблему:
http://linuxforum.ru/index.php?showtopic=3...st&p=388442
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
HZ там равно 100...
хорошо. а если например постоянно добавлять себя в immediate очередь и самому решать - настало время чего-то делать или нет? это сильно скажется на тормознутости остальной системы?
хорошо. а если например постоянно добавлять себя в immediate очередь и самому решать - настало время чего-то делать или нет? это сильно скажется на тормознутости остальной системы?
-
- Сообщения: 694
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
из immediate вытаскивают сразу как только возможно
-
- Сообщения: 694
Re: Kernel Module: периодическое выполнение
Что значит "как только возможно"?
Ядро получает управление (и, при "желании", может сделать что-то "для себя" или своих модулей) - только по вызовам прикладных программ или по прерыванию от железа.
Единственное регулярное событие в системе - прерывание таймера.
Вот его, как я понимаю, ядро и настраивает на частоту HZ.
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
ясно... грустно всё это... казалось бы: такое устройство - компьютер. а такой примитивной вещи сделать не может..
-
- Сообщения: 694
-
- Сообщения: 104
- ОС: Archlinux
Re: Kernel Module: периодическое выполнение
>архитектура - arm. и там ацп.. так что звуковуха тут лесом.
а ты уверен что этот ацп потянет 12кгц?
а ты уверен что этот ацп потянет 12кгц?
Рациональное программирование — наш ответ MicroSoft!
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
я не электронщик. мне сказали - нужно пинать ацп 12000 раз в секунду. я и пытаюсь это сделать. не смогу - будем на avr это решать.
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
по теме: http://www.quepublishing.com/articles/arti...Num=14&rl=1
получается, в юзерспейсе так можно. как это реализовано?
получается, в юзерспейсе так можно. как это реализовано?
-
- Сообщения: 104
- ОС: Archlinux
Re: Kernel Module: периодическое выполнение
можно, но период между запросами может различаться.
for(;;){
read_from_adc();
usleep(83);
}
=)
for(;;){
read_from_adc();
usleep(83);
}
=)
Рациональное программирование — наш ответ MicroSoft!
-
- Сообщения: 154
- ОС: CentOS 5.4
Re: Kernel Module: периодическое выполнение
обнаружил, что на подопытном процессоре 4 таймера. буду щас их мучать...
-
- Сообщения: 694
Re: Kernel Module: периодическое выполнение
-
- Сообщения: 694
Re: Kernel Module: периодическое выполнение
Что-то фигею я от компиляции модулей для ядра 2.6....
Пытаюсь юзать MOD_INC_USE_COUNT и MOD_DEC_USE_COUNT.
При компиляции говорит: MOD_INC_USE_COUNT undeclared (first use in this function)
для х_DEC_х - то же самое.
В linux/modules.h эти макросы есть, но объявляются только если объявлен макрос MODULE.
Раньше его объявляли в makefile при компиляции модуля (-DMODULE).
А сейчас makefile как-то и на makefile-то не похож.
Попробовал вставить #define MODULE в начало файла.
Говорит: повторное объявление MODULE.
Т.е. он где-то неявно объявляется (и нафига придумали такую уродскую схему компиляции модулей для 2.6?!)
А раз объявляется - почему тогда счётчики использования модулей не объявляются?
Пытаюсь юзать MOD_INC_USE_COUNT и MOD_DEC_USE_COUNT.
При компиляции говорит: MOD_INC_USE_COUNT undeclared (first use in this function)
для х_DEC_х - то же самое.
В linux/modules.h эти макросы есть, но объявляются только если объявлен макрос MODULE.
Раньше его объявляли в makefile при компиляции модуля (-DMODULE).
А сейчас makefile как-то и на makefile-то не похож.
Попробовал вставить #define MODULE в начало файла.
Говорит: повторное объявление MODULE.
Т.е. он где-то неявно объявляется (и нафига придумали такую уродскую схему компиляции модулей для 2.6?!)
А раз объявляется - почему тогда счётчики использования модулей не объявляются?
-
- Сообщения: 694
Re: Kernel Module: периодическое выполнение
Написал я сами потроха драйвера, ядро "разогнанное" пашет - всё ОК.
Кроме этих счётчиков использования модуля.
Полез я смотреть что они делают: выполняют атомарные операции над полями структуры module по указателю __this_module.
Однако в исходниках ядра 2.6.15 в структуре module нет таких полей...
И дрова, идущие вместе с ядром, нигде в своём коде не содержат эти макросы.
Мда... а ведь lsmod показывает модули и сколько и кто их использует.
А про моего не показывает.
В принципе, для моей задачи это не так важно: всё-равно это, так скажем, специализированная измерительная установка. Я её собираю, я же и сделаю так, что модуль будет загружаться при запуске компа и выгружаться перед завершением работы. Т.е. в процессе работы всё стабильно.
Но всё-таки хотелось бы по-человечески оформить драйверок.
-
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: Kernel Module: периодическое выполнение
В ядре версии 2.6 эти макросы заменены на
Код: Выделить всё
• try_module_get(THIS_MODULE): Increment the use count.
• try_module_put(THIS_MODULE): Decrement the use count.
LightLang Team
-
- Сообщения: 694
Re: Kernel Module: периодическое выполнение
BlackStar писал(а): ↑24.05.2007 11:11В ядре версии 2.6 эти макросы заменены на
Код: Выделить всё
• try_module_get(THIS_MODULE): Increment the use count. • try_module_put(THIS_MODULE): Decrement the use count.
Ага-а... спасибо. Щас посмотрю-заюзаю!
Получилось.
Только не try_module_put, а module_put