гарантированное выполнение 200 раз в секунду,
Только без фанатизма) Даже, когда используется сис. таймер я пропускаю вызовы - жду ближайшего момента, то есть точно 200Гц не будет, будет очень близко, условно, 199,99, а может и грубее. И это нормально.
Btw на i5 и на Celeron233 версии ядра одинаковые?
Нет, уже, исходя из того, что на i5 - x64, а на 233 - x386. Сейчас под рукой нету, чтобы проверить, вроде: на i5 3.17, а на 233 - 2.6.
Возможно, можно как-то хитро пересобрать ядро, чтобы timer работал по-старинке, но это выглядит криво.
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/timer.h>
MODULE_LICENSE("GPL");
static struct timer_list my_timer;
void my_timer_callback( unsigned long data )
{
printk( "my_timer_callback called (%ld).\n", jiffies );
}
int init_module( void )
{
int ret;
printk("Timer module installing\n");
// my_timer.function, my_timer.data
setup_timer( &my_timer, my_timer_callback, 0 );
printk( "Starting timer to fire in 200ms (%ld)\n", jiffies );
ret = mod_timer( &my_timer, jiffies + msecs_to_jiffies(200) );
if (ret) printk("Error in mod_timer\n");
return 0;
}
void cleanup_module( void )
{
int ret;
ret = del_timer( &my_timer );
if (ret) printk("The timer is still in use...\n");
printk("Timer module uninstalling\n");
return;
}
Я не знал, что таймером можно пользоваться внутри модуля, буду пробовать. Спасибо)