about send in rtems_timer_service_routine
Joel Sherrill
joel.sherrill at OARcorp.com
Mon Apr 21 17:13:42 UTC 2008
Daron Chabot wrote:
> Not having checked send(2) for blocking behavior, this is just a guess:
>
> The function, rtems_timer_service_routine( ), is called from an
> interrupt context. Code called from an interrupt context *cannot*
> perform operations that may block waiting for resources (i.e. send(2)).
>
> You could use an rtems_timer_server instead: this server runs in a
> thread context which has no restrictions on the methods invoked from it.
>
> (see http://www.rtems.com/onlinedocs/releases/rtemsdocs-4.8.0/share/
> rtems/html/c_user/c_user00116.html)
>
>
I wouldn't say no restrictions. While in the timer server,
dispatching is disabled so blocking is definitely not possible.
So a blocking send() wouldn't block, it would continue executing
like it didn't block causing havoc.
There is another oddity. By default, the task runs at priority 0
which is not possible to set from user applications. So changing
the priority temporarily is impossible -- it can't be restored.
See cpukit/rtems/src/timerserver.c.
_Thread_Disable_dispatch();
_Timer_Server_process_ticks_chain();
_Timer_Server_process_seconds_chain();
Does it seem like the documentation is overstating how safe
this is? If so, then we need to either change the documentation
or change the critical section management here.
--joel
> -- dc
>
> On 20-Apr-08, at 2:16 AM, Ray wrote:
>
>> Dear powerain ,
>> Maybe you should check this website first
>> http://linuxmafia.com/faq/Essays/smart-questions.html
>> here is a mandarin version
>> http://www.linuxforum.net/doc/smartq-grand.html
>>
>> BTW, it seems to me that rtems_timer_service_routine=void if I read
>> code correct
>>
>> Thanks & Best Regards!
>>
>> Ray, rayx.cn at gmail.com
>> 2008-04-20
>>
>>
>> =========================
>> ----- Receiving the following content -----
>> =========================
>> From: powerain
>> Receiver: rtems-users
>> Time: 2008-04-20, 09:25:20
>> Subject: about send in rtems_timer_service_routine
>>
>>
>>
>>
>>
>>> hi everyone,
>>> i send a package in a rtems_timer_service_routine using send
>>> function by a socket.
>>> but is does not work.
>>> who tell me why.
>>> thanks very much.
>>>
>>> 2008-04-20
>>>
>>>
>>> _____________________ next part ______________________
>>>
>>> _______________________________________________
>>> rtems-users mailing list
>>> rtems-users at rtems.com
>>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>>
>>>
>> _______________________________________________
>> rtems-users mailing list
>> rtems-users at rtems.com
>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>
>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list