rtems_message_queue_receive / rtems_event_receive issues

Catalin Demergian demergian at gmail.com
Wed Oct 24 09:10:35 UTC 2018


Hi,
I made a debug patch with some changes
in _Scheduler_priority_Ready_queue_enqueue

  if(tcb->Object.id == 0x0a010005)
  cnt_before = _Chain_Node_count_unprotected(ready_chain);
  _Chain_Append_unprotected( ready_chain, node );
  if(tcb->Object.id == 0x0a010005) {
  cnt_after = _Chain_Node_count_unprotected(ready_chain);
  if(cnt_after != cnt_before + 1)
  append_errs++;
  }
  _Priority_bit_map_Add( bit_map, &ready_queue->Priority_map );

I wanted to know if _Chain_Append_unprotected fails when adding my SCrx
task in the ready queue. Since it's a void
function, I used _Chain_Node_count_unprotected to test if the counter after
the insert is the count before + 1.

The task command shows 2 ready tasks, but ready_queue_100_elems=1
(in ready_queue_100_elems I'm saving what _Chain_Node_count_unprotected
returns for ready_queues[100])
Also, append_errs=1, which means that at some point there was an insert
failure.

[/] # task
  ID       NAME           PRI  STATE MODES   EVENTS    WAITID  WAITARG
NOTES
------------------------------------------------------------------------------
0a010001   UI1              1 Wevnt  P:T:nA    NONE   2002b0a4 0x80000000
0a010002   LOGT            99 Wmsg   P:T:nA    NONE   22010001 0x80000000
0a010003   ntwk           100 Wsysev P:T:nA    NONE   2005e43c 0x80000000
0a010004   SCtx           100 Wsysev P:T:nA    NONE   2005ff6c 0x80000000
0a010005   SCrx           100 READY  P:T:nA  08000000 20060fbc 0x80000000
0a010006   SHLL           100 READY  P:T:nA    NONE   00000001 0x80000000
[/] #
[/] #
[/] #
[/] # i
Instruction count for the last second is 215993000.
CPU load is 99.99%.
intr_cnt=125916
cond1=0
cond2=1
jiffies=62980862
dbg_ready_UI1=288379
dbg_ready_LOGT=374942
dbg_ready_ntwk=62980798317434
dbg_ready_SCtx=62980515317452
dbg_ready_SCrx=8947511142891
dbg_ready_SHLL=62980853317438
dbg_extract_UI1=67129036
dbg_extract_LOGT=67147087
dbg_extract_ntwk=62980798327798
dbg_extract_SCtx=62980515326397
dbg_extract_SCrx=8947511124432
dbg_extract_SHLL=62980852322225
append_errs=1
ready_queue_100_elems=1
[/] #

My theory is that because the SCrx task is in a funny state where
current_state=READY, but it's not in the ready queue because
of the insert failure, it will never be scheduled again because no matter
how many USB interrupts may arrive, unblock will be set to FALSE
in _Event_Surrender because the state is READY
so _Event_Is_blocking_on_event returns FALSE.

Could this theory be valid ?

regards
Catalin


On Tue, Oct 23, 2018 at 1:47 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> On 23/10/2018 10:44, Catalin Demergian wrote:
> > Hi,
> > I'm logging what rtems_clock_get_ticks_since_boot returns to know when
> > I call _Scheduler_priority_Ready_queue_enqueue
> > and _Scheduler_priority_Ready_queue_extract, but I'm getting the same
> > number, I can't tell the order. My question is,
> > do you know if there is something I can call that gives me microsecond
> > precision ?
>
> You can try rtems_clock_get_uptime_nanoseconds().
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber at embedded-brains.de
> PGP     : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20181024/340434f0/attachment-0002.html>


More information about the users mailing list