TI中文支持网
TI专业的中文技术问题搜集分享网站

c6474多核通信

这是我在程序中写的关于多核之间通过messageQ实现核间同步,但是如果想实现数据的调度和读写等操作,不知道要如何添加哪些函数来实现多核对shared memory中的数据进行读写

    if (MultiProc_self() == 0) {
        /* Allocate a message to be ping-ponged around the processors */
        msg = MessageQ_alloc(HEAPID, sizeof(MessageQ_MsgHeader));
        if (msg == NULL) {
           System_abort("MessageQ_alloc failed\n" );
        }
               /*         *  Send the message to the next processor and wait for a message
         *  from the previous processor.
         */
        System_printf("Start the main loop\n");
        while (msgId < NUMLOOPS) {                /* Increment…the remote side will check this */
            msgId++;
            MessageQ_setMsgId(msg, msgId);
                       System_printf("Sending a message #%d to %s\n", msgId, nextQueueName);
                       /* send the message to the remote processor */
            status = MessageQ_put(remoteQueueId, msg);
            if (status < 0) {
               System_abort("MessageQ_put had a failure/error\n");                   }                              /* Get a message */
            status = MessageQ_get(messageQ, &msg, MessageQ_FOREVER);
            if (status < 0) {
               System_abort("This should not happen since timeout is forever\n");
            }
        }
    }
    else {
        /*
         *  Wait for a message from the previous processor and
         *  send it to the next processor
         */
        System_printf("Start the main loop\n");
        while (TRUE) {
            /* Get a message */
            status = MessageQ_get(messageQ, &msg, MessageQ_FOREVER);
            if (status < 0) {
               System_abort("This should not happen since timeout is forever\n");
            }

            System_printf("Sending a message #%d to %s\n", MessageQ_getMsgId(msg),
                nextQueueName);

            /* Get the message id */
            msgId = MessageQ_getMsgId(msg);

            /* send the message to the remote processor */
            status = MessageQ_put(remoteQueueId, msg);
            if (status < 0) {
               System_abort("MessageQ_put had a failure/error\n");
            }
                       /* test done */
            if (msgId >= NUMLOOPS) {
                break;
            }

希望大家能够指导一下如何修改程序实现多核实现对共享存储区的数据读写操作。

 

Andy Yin1:

您好,

IPC软件是基于Bios开发的,如果你的工程不一定要用操作系统的好,可以简单实用共享memory进行核间通信即可,而不需要使用IPC软件。对应IPC使用可以看看IPC安装之后doc中集成中user guide,如遇到问题建议到E2E.ti.com提问,谢谢。

lucky2:

回复 Andy Yin1:

您好

如果不使用bios,如何进行核间通信,有相关例程吗?

不使用BIOS,可以使用messageQ 模块吗?

Andy Yin1:

回复 lucky2:

不适用Bios,不能用MCSDK IPC模块中的messageQ。

此时可以用shared memory,IPC Register等,如果是用的keystone device,还可以用QMSS进行核间通信。

lucky2:

回复 Andy Yin1:

您好

使用shared memory ,IPC寄存器进行多核通信;可以不跑bios系统;有相关的例程代码吗?谢谢

有个工程是shmIpcBenchmark,它是使用shared memory,但是必须使用BIOS系统。

Andy Yin1:

回复 lucky2:

对于C6474我这边没有相应的例程,对于shared memory,你可以写一个很简单的程序,就是定义一个全局变量放在共享memory,多核均可访问,一个core对其写,另一个核去读就可以达到核间通信,这个过程需要注意对共享memory进行cache一致性的维护。

参考多核编程手册:http://www.ti.com/product/tms320c6474  application notes (multicore programming guide)

lucky2:

回复 Andy Yin1:

您好

不好意思。我忘了说明,我使用的是6678.有相关不跑BIOS,进行IPC的例程或文档吗?谢谢

还有我第一个帖子的问题会是什么原因呢?谢谢

best regards

Andy Yin1:

回复 lucky2:

如下链接中有Multicore IPC example

http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/4899.aspx

Multicore program guide:http://www.ti.com/product/tms320c6678   Application Notes

赞(0)
未经允许不得转载:TI中文支持网 » c6474多核通信
分享到: 更多 (0)