Hi all,
I am chasing some timing issues on my system that uses SYSLINK on linux.
I have a custom board with the OMAPL138. The ARM core is running linux (kernel 3.0.23)
I am using: syslink_2_21_01_05 on the linux side.
(bios_6_35_01_29, ipc_1_25_02_12, TI_CGT_C6000_7.4.2, xdctools_3_25_00_48 on the DSP side).
I have a Linux Real Time thread (at high priority) on the ARM sending a small message to the DSP every few milliseconds.
Normally sending the message (basically MessageQ_alloc followed by MessageQ_put) takes a few hundred microseconds on the ARM.
But sometimes I can see that my high priority thread gets stuck either in MessageQ_alloc or MessageQ_put for up to almost a second.
I am trying to understand if this could be due to some interference with a different Linux low priority task that receives messages from the DSP (at very low frequency, in the order of one every few seconds).
So I'd like to understand exactly how interrupts and messages incoming to the ARM are handled.
I can see that I have two threads created in my system by Syslink.
One is a kernel thread created by the driver when I call Ipc_control(Ipc_CONTROLCMD_STARTCALLBACK)
and another one is a user space thread created when I open the Notify driver.
Looking at the SYSLINK code I seem to understand that the kernel thread is the "bottom half" of the interrupt handling, While I'm not suer what the user space thread does.
So my first question is:
1) When an interrupt is received, I guess the kernel thread is activated to do the real work for the interrupt handling. Does it wakes up the user space thread to perform the work.
2) does this happen only for Notify events or also for MessageQ messages?
thanks