<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi,<div>I continued debugging. </div><div>It turned out _Thread_Unblock is not called because in _Event_Surrender (called directly by rtems_event_send) boolean var unblock is false.</div><div>to be more exact, in</div><div><div>  if (</div><div>    _Event_Is_blocking_on_event( the_thread, wait_class )</div><div>      && _Event_Is_satisfied( the_thread, pending_events, &seized_events )</div><div>  )</div></div><div>the _Event_Is_blocking_on_event( the_thread, wait_class ) condition fails, hence the else is entered, unblock is set</div><div>to false, _Thread_Unblock not called anymore; and since the call chain was</div><div>_Thread_Unblock->_Thread_Clear_state->_Scheduler_Unblock->_Scheduler_priority_Unblock->_Scheduler_Update_heir-> Context Switch to SCrx<br></div><div>there will be more CS for my task on the CPU.</div><div>This worked for 5401 ping packets, but for 5402th and so on it's not working any more. </div><div>_Event_Surrender is called every second, but it fails in the same way every time.<br></div><div><br></div><div>Now .. why would _Event_Is_blocking_on_event fail ?</div><div>regards,</div><div>Catalin</div><div><br></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 2, 2018 at 9:55 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 02/10/2018 08:48, Catalin Demergian wrote:<br>
> Hi,<br>
> This assert may not be directly related to my issue because I <br>
> reproduced it a few times (with RTEMS_DEBUG enabled in the build)<br>
> without seeing the assert being hit. What I discovered is that after a <br>
> while _Scheduler_priotity_Unblock is not called for my task anymore.<br>
> And since _Scheduler_priotity_Unblock calls _Scheduler_Update_heir, my <br>
> task will not be set as the heir and no context switch will be made <br>
> for it.<br>
><br>
> My question is why would _Scheduler_priority_Unblock not beeing called ?<br>
<br>
The _Scheduler_priority_Unblock() is called by _Thread_Unblock() only if <br>
the thread state changes from not-ready to ready.<br>
<br>
> rtems_event_send called from my USB ISR calls _Event_Surrender and <br>
> that calls _Thread_Unblock<br>
> Is there a conceptual problem calling rtems_event_send from an ISR ?<br>
<br>
Using rtems_event_send() from an ISR is a standard use case.<br>
<br>
> I saw there is a rtems_event_system_send function. should I call this <br>
> one instead ? what is the difference?<br>
<br>
It is a different event set, one for applications and one for the system.<br>
<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Dornierstr. 4, D-82178 Puchheim, Germany<br>
Phone   : +49 89 189 47 41-16<br>
Fax     : +49 89 189 47 41-09<br>
E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a><br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
<br>
</blockquote></div>