[Armadillo:06910] POSIXタイマー割り込みタイミング
email@hidden
2011年 3月 23日 (水) 17:40:30 JST
arnadillo-9にてPOSIXタイマーを100msec設定で動作させてみたところ、割り込み周期が不定な動きをしている様子だったので、ログで確認したところ、
->20msec
->80msec
->0msec
->20msec
->80msec
->0msec
と、3つを1つの周期として定期的に変なタイミングでタイマーイベントが発生していました。
同じモジュールをPC上のdebianで動作させたところ、概ね100msecでイベントが発生していました(一部不定周期が見られますが)。
※ テキスト添付します。
armadillo9にて定周期でイベントを発生させるために、特に設定が必要であれば、助言いただけると大変助かります。
タイマー設定部分のソースは下記のとおりです。
よろしくお願いします。
#define SIGIO_READ SIGRTMIN +1
/* timer create */
memset( &sigact, 0, sizeof sigact ) ;
memset( &sigev, 0, sizeof sigev ) ;
sigact.sa_sigaction = timer_handler ;
sigact.sa_flags = SA_SIGINFO | SA_RESTART ;
sigemptyset(&sigact.sa_mask);
if( sigaction( SIGIO_READ, &sigact, NULL ) < 0 ){
return FALSE ;
}
sigev.sigev_notify = SIGEV_SIGNAL ;
sigev.sigev_signo = SIGIO_READ ;
if( timer_create( CLOCK_REALTIME, &sigev, &timerId ) < 0 ){
return FALSE ;
}
itval.it_interval.tv_sec = 0 ; /* every time up sec */
itval.it_interval.tv_nsec = 100 *1000 *1000;/* 100msec */
itval.it_value.tv_sec = 10 ; /* first time up sec */
itval.it_value.tv_nsec = 0 ; /* 100msec */
if( timer_settime( timerId, 0, &itval, NULL ) < 0 ){
return FALSE ;
}
printf("\n\n complete timer setup\n");
while(1){
} ;
void timer_handler( int signum, siginfo_t *info, void *ctx )
{
if( signum != SIGIO_READ ){
return ;
}
if( info->si_code != SI_TIMER )
return ;
int w_start ;
printf("\n\n timer_handler() \n" ) ;
printf(" signum = %d define = %d \n", signum, SIGIO_READ ) ;
w_start = clock() ;
printf(" time = %d.%03d msec -------------> \n", w_start /1000, w_start %1000 ) ;
}
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: armadillo9.txt
URL: <http://lists.atmark-techno.com/pipermail/armadillo/attachments/20110323/89d87cb1/attachment.txt>
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: debian.txt
URL: <http://lists.atmark-techno.com/pipermail/armadillo/attachments/20110323/89d87cb1/attachment-0001.txt>
armadillo メーリングリストの案内