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.

Can someone point me into a direction of using IPC on C6657,

Hello,

First of all I must confess that I am new to multicore DSP programming. So I hope my questions aren't to stupid. ;)

For my application I use the c6657, on each core a different application. If core 0 has done some calculations on data, the output has to be 'moved' to core 1. This core 1 then has to be triggered to do some other calculations on the data.

My idea was to use IPC to let core 0 trigger a thread on core 1 to start processing data.

What I found out so far is that I believe MessageQ is the best way to do this. Do you agree?

When using MessageQ I believe that it is possible to use SyncSwi to trigger a thread on the other core. This ISync handle is defined in a parameter of MessageQ_open. Is there somewhere a description of these parameters. Did not yet find my way to find all the information?

Thanks for helping this newcomer in multicore programming..

Ralph

  • Ralph,

    Yes, you should be able to use MessageQ to do what you described.

    The default Sync is a SyncSem for MessageQ.  I don't see why want to use SyncSwi.  I assume you want to process that data in a task on core1?

    MessageQ_open() does not take a ISync handle, it takes a name (input parameter) and a queueid (output parameter).

    If you've already installed the IPC product look in the \docs directory.  We have doxygen and cdoc that describes all the APIs and parameters.
    We also have a MessageQ example that is integrated with CCS.  You can try it out by "Creating a New CCS Project" and choosing the IPC->MessgeQ project template.

    Judah

  • Hey Judah,

    Thanks for your reply.

    Yes I indeed want to process the data on core1. I was thinking about SyncSwi because I want to trigger a thread. Can SyncSem also trigger a thread?

    Thanks Ralph

  • Ralph,

    I think you want to stick with the default of SyncSem for MessageQ  Basically what happens is when you call MessageQ_get(), it will pend on a Semaphore and block until a message is placed in its queue.  When a message is placed into its queue, a Semaphore post will be called and the task will be unblocked and MessageQ_get() will return the message that was placed into the queue.

    SyncSwi would be used in conjuction with the Swi handle but I do not think this is what you want.

    Judah 

     

  • Hey Judah,

    Thanks for your answer.

    One other question. When the task is blocked by the pending semaphore. What does the core do then? Does it fall into Idle so that another task can be performed?

    That was also the reason why I was looking at  SyncSwi. In that case when the SyncSwi thread (triggered by a message) is finished, the core can fall back into idle and perform another task. If a message then arrives again, the thread is triggered again?

    Thanks Ralph