setitimer, getitimer() in rtems?
Gene Smith
gds at chartertn.net
Fri Sep 5 17:25:36 UTC 2008
Joel Sherrill wrote:
> Gene Smith wrote:
>> Joel Sherrill wrote:
>>
>>> Gene Smith wrote:
>>>
>>>> Porting in some code that runs on linux, my last undefined link items
>>>> are setitimer and getitimer. I can't seem to find them in rtems (4.8.0)
>>>> except in the sys/time.h include file so it compiles. Saw some reference
>>>> to them in old mailing list threads that implied (or said?) that you
>>>> have to implement them using rtems native timer calls. Is this right?
>>>>
>>>>
>>>>
>>> Since they use POSIX signals, you would implement them
>>> in the POSIX API (cpukit/posix) and implement them in terms
>>> of SuperCore timers.
>>>
>>> Why do you need these? And which of the three types
>>> (ITIMER_REAL, ITIMER_VIRTUAL, or ITIMER_PROF) do
>>> you want/need?
>>>
>> Why: The function is in some existing 3rd party code I need to use for
>> the project.
>> Which: Actually, the code only calls setitimer with parameter ITIMER_REAL.
>>
>>
> Good. That's what I expected. :-D
>> Right now I am using rtems_timer_fire_after() with a callback function
>> to do a similar thing.
>>
>>
>>
> It's certainly the more direct thing to do in RTEMS. The main
> difference is that their method is being called in an ISR rather
> than as a signal handler.
FYI, in their code, the "CallBack" fn seems to become a SIGALRM handler.
Is this what you expect?:
stritimerval.it_interval.tv_sec = 0 ;
stritimerval.it_interval.tv_usec = dwTimerBase ;
stritimerval.it_value.tv_sec = 0 ;
stritimerval.it_value.tv_usec = dwTimerBase ;
gdwCurrentTimerBase = dwTimerBase;
signal(SIGALRM,CallBack);
if (setitimer(ITIMER_REAL, &stritimerval, &stritimeroval) == 0)
{
return TRUE;
}
else
{
signal(SIGALRM,SIG_IGN);
gdwCurrentTimerBase = 0;
return FALSE;
}
>
> If you want these implemented, I can put together an estimate
> for you.
Thanks, I'll write to you off-list.
More information about the users
mailing list