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