This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

IPC Support for the C28355 DSP

Other Parts Discussed in Thread: SYSBIOS

CCS 4.2

XDCTools 3.20.05.76

Sys/Bios 6.31.00.18

IPC 1.22.00.19

target F28355 DSP

 

I am new to SYS/BIOS but have used DSP/BIOS on a previous project. Our old code used the QUE_   API to send messages between tasks.   

I assumed that IPC Message Queue would be the logical replacement  for the older DSP/BIOS QUE_   API.

 

When I select a CCS example program for the F28335 DSP, it shows IPC examples available. The IPC example  "MessageQ Single Processor"does not build. I get an error

js: "C:/Program Files/Texas Instruments/ipc_1_22_00_19/packages/ti/sdo/ipc/gates/package.xs", line 82: Error: Library not found: ti.sdo.ipc.gates.anull

 

When requesting support, I was pointed to the IPC release notes where the C28 is NOT listed as a supported platform. 

Closer investigation showed that while the IPC User Guide showed a C28 platform build option, that C28 was not in the actual source file options.

Can you confirm that IPC does not currently support the F28335?

Can you give me advice on how to proceed implementing task communication without IPC Message Queues?

Can you tell me if IPC is expected to be supported on the C28 platforms in the future? 

 

Thanks,

Jan

 

 

 

 

  • Hi Jan,

    The QUE module, as you know, is a simple double-linked list module in BIOS 5.x. In SYSBIOS, we still have this module and it's called ti.sysbios.knl.Queue module. However, we use it as an internal module now, so we don't document it. We reserve the right to change the module in the future since it is not an "officially" supported module.

    In the Ipc package there are two different modules that might interest you: ti.sdo.utils.List and ti.sdo.ipc.MessageQ.

    List
    This is like the QUE module you are used to. I recommend you use this module.

    The differences between List and QUE module are:

    a. List_get returns NULL if the list is empty instead of wrapping and pointing at the object. This makes for a more natural comparision when getting an elem from a linked list. (Similarly, List_prev/List_next returns NULL also instead of wrapping during traversals).

    b. There is no List_head to get the beginning. Instead List_next takes two parameters: the object and an elem. The List_next returns the elem after the passed in elem. To get the first elem, pass in NULL for the second parameter. So instead of List_head, you call List_next(obj, NULL) . We did this for consistency of the APIs (e.g. all the APIs that act on a list take an object as the first parameter).

    c. Some of the deterministic behavior is no longer honored. For example, List_get is still very small and very fast, but it is not guaranteed to always be N cycles. It might be N or N +/- a couple cycles. This allowed us to have the "natural" returns of NULL instead of the having the user check against the object to determine a wrap.

    Please look at the documentation for List. I might have missed some small changes. We ship the 28 libaries for the utils package. I ran a quick List regression on the 283x CPU Cycle Accurate Simulator and everything looked good.

    MessageQ
    The ti.sdo.ipc.MessageQ module is used for single or multicore message passing. For a single core it is basically a linked list (List module) and a notification mechanism (xdc.runtime.knl.ISync). On a single core, when you put a message onto a message queue, the message is place onto a List and the notification mechanism is called (e.g. Swi_post or Semaphore_post). The receiving side can block if the notification mechanism is blocking (e.g. SyncSem calls Semaphore_pend). Some notification mechanisms are non-blocking on the receive (e.g. SyncSwi). So basically, on a single processor, MessageQ is a smart List in that there is notification to the reader when a message is placed onto a queue. note: each message queue supports a single reader and multiple writers.

    The 28x libraries are not supplied (thus your build error) since we have not tested it on 28. We are planning on supporting it in a future release.

    Todd