Kernel Module: периодическое выполнение (что лучше использовать?)

Взгляд изнутри

Модератор: Модераторы разделов

stigger
Сообщения: 154
ОС: CentOS 5.4

Kernel Module: периодическое выполнение

Сообщение stigger »

читаю linux device drivers и голова кружится от количества возможных способов для отложенного выполнения.. поэтому вопрос: мне необходимо 12000 раз в секунду опрашивать некий датчик. через что это лучше всего реализовать чтобы не грузить систему понапрасну?
Спасибо сказали:
Аватара пользователя
k01
Сообщения: 104
ОС: Archlinux

Re: Kernel Module: периодическое выполнение

Сообщение k01 »

для работы на такой частоте лучше на МК схемку сделать или, если надо просто ждать срабатывания датчика, заюзать прерывания. Можно ещё на звуковуху сигнал от датчика подать...
Рациональное программирование — наш ответ MicroSoft!
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

архитектура - arm. и там ацп.. так что звуковуха тут лесом.

а почему микроконтроллер? неужели производительности не хватит чтобы 12000 раз чего-то делать? это ж мелочь по сути.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

stigger писал(а):
01.05.2007 00:11
архитектура - arm. и там ацп.. так что звуковуха тут лесом.

а почему микроконтроллер? неужели производительности не хватит чтобы 12000 раз чего-то делать? это ж мелочь по сути.

А какое на этой архитектуре значение HZ? (количество срабатываний таймера, устанавливаемое ядром).
Теоретически - это предел программно-управляемого опроса.
Если нужно быстрее, без вмешательства в ядро, то остаются - прерывания.

Сам сейчас решаю ту же проблему:
http://linuxforum.ru/index.php?showtopic=3...st&p=388442
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

HZ там равно 100...
хорошо. а если например постоянно добавлять себя в immediate очередь и самому решать - настало время чего-то делать или нет? это сильно скажется на тормознутости остальной системы?
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

stigger писал(а):
01.05.2007 10:17
HZ там равно 100...
хорошо. а если например постоянно добавлять себя в immediate очередь и самому решать - настало время чего-то делать или нет? это сильно скажется на тормознутости остальной системы?

А когда тебя вытащат из очереди? Через 1/100 секунды? Или нет?
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

из immediate вытаскивают сразу как только возможно
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

stigger писал(а):
01.05.2007 11:27
из immediate вытаскивают сразу как только возможно

Что значит "как только возможно"?
Ядро получает управление (и, при "желании", может сделать что-то "для себя" или своих модулей) - только по вызовам прикладных программ или по прерыванию от железа.
Единственное регулярное событие в системе - прерывание таймера.
Вот его, как я понимаю, ядро и настраивает на частоту HZ.
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

ясно... грустно всё это... казалось бы: такое устройство - компьютер. а такой примитивной вещи сделать не может..
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

stigger писал(а):
01.05.2007 13:35
ясно... грустно всё это... казалось бы: такое устройство - компьютер. а такой примитивной вещи сделать не может..

Он-то может.
Это программисты не программируют :tongue:
Спасибо сказали:
Аватара пользователя
k01
Сообщения: 104
ОС: Archlinux

Re: Kernel Module: периодическое выполнение

Сообщение k01 »

>архитектура - arm. и там ацп.. так что звуковуха тут лесом.

а ты уверен что этот ацп потянет 12кгц?
Рациональное программирование — наш ответ MicroSoft!
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

я не электронщик. мне сказали - нужно пинать ацп 12000 раз в секунду. я и пытаюсь это сделать. не смогу - будем на avr это решать.
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

по теме: http://www.quepublishing.com/articles/arti...Num=14&rl=1
получается, в юзерспейсе так можно. как это реализовано?
Спасибо сказали:
Аватара пользователя
k01
Сообщения: 104
ОС: Archlinux

Re: Kernel Module: периодическое выполнение

Сообщение k01 »

можно, но период между запросами может различаться.
for(;;){
read_from_adc();
usleep(83);
}

=)
Рациональное программирование — наш ответ MicroSoft!
Спасибо сказали:
stigger
Сообщения: 154
ОС: CentOS 5.4

Re: Kernel Module: периодическое выполнение

Сообщение stigger »

обнаружил, что на подопытном процессоре 4 таймера. буду щас их мучать...
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

stigger писал(а):
02.05.2007 15:19
обнаружил, что на подопытном процессоре 4 таймера. буду щас их мучать...

Я копаю в сторону разгона системного таймера:
Кое-что об устройстве ядра
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

Что-то фигею я от компиляции модулей для ядра 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?!)
А раз объявляется - почему тогда счётчики использования модулей не объявляются?
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

Zeus писал(а):
18.05.2007 14:36
Пытаюсь юзать MOD_INC_USE_COUNT и MOD_DEC_USE_COUNT.
При компиляции говорит: MOD_INC_USE_COUNT undeclared (first use in this function)
для х_DEC_х - то же самое.

Написал я сами потроха драйвера, ядро "разогнанное" пашет - всё ОК.
Кроме этих счётчиков использования модуля.
Полез я смотреть что они делают: выполняют атомарные операции над полями структуры module по указателю __this_module.
Однако в исходниках ядра 2.6.15 в структуре module нет таких полей...
И дрова, идущие вместе с ядром, нигде в своём коде не содержат эти макросы.
Мда... а ведь lsmod показывает модули и сколько и кто их использует.
А про моего не показывает.
В принципе, для моей задачи это не так важно: всё-равно это, так скажем, специализированная измерительная установка. Я её собираю, я же и сделаю так, что модуль будет загружаться при запуске компа и выгружаться перед завершением работы. Т.е. в процессе работы всё стабильно.
Но всё-таки хотелось бы по-человечески оформить драйверок.
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Kernel Module: периодическое выполнение

Сообщение BlackStar »

В ядре версии 2.6 эти макросы заменены на

Код: Выделить всё

• try_module_get(THIS_MODULE): Increment the use count.
• try_module_put(THIS_MODULE): Decrement the use count.
LightLang Team
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Kernel Module: периодическое выполнение

Сообщение Zeus »

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
Спасибо сказали: