IPC多核入门编程C6657双核启动问题小结

来源:互联网 发布:温州公安网络 编辑:程序博客网 时间:2024/05/16 09:56

首次测试和运用IPC可能会由于不熟悉IPC而出现各种问题,采用IPC进行多核编程,建工程时把IPC模块加入,如下图:


或者直接使用CCS5.5提供的IPC例子来新建工程,如下图利用MessageQ的例子:


        第一次采用双核的IPC通讯时,连单核都启动不起来,问题是DSP启动时阻塞在了Startup.firstFxns和Startup.lastFxns之间的内部初始化函数的调用(初始化顺序参见SYS/BIOS User Guide),这也是在加了IPC模块时才出现的问题。


   通过demo板的调试发现阻塞是发生在一个memory_alloc()函数里面,所以断定应该是堆的问题,结果在.cfg文件里将堆的大小0改为0x4000后就不会出现阻塞现象了。


        单核能启动后,接下来是同时启动双核(C6657),双核同时启动时也会有一个核会出现上述的阻塞状况。但如果先启动一个核,再启动另一个核就可以排除阻塞现象。原因可能是两个核同时启动时(同时reset)在初始化阶段会争用堆栈,导致一个核阻塞掉了,所以改为先启动一个核,再启动另一个核的形式双核就可以顺利启动起来了。

         双核启动后在Ipc_start()函数里面又出现了问题,一个核能过,一个核过不了,通过深入查看IPCIpc_start()源代码,发现里面的模块全局变量应该是私有的,所以应该把IPC全局的数据变量放在LL2里面,这样访问才不会互相干涉,这可以通过修改.cmd文件解决,更快捷的方法是在CCSXDC tool里面修改,步骤如下:

         1、切换到CCSDebug环境

      

       2、在菜单栏里Tools > RTSC Tools> Platform > Edit/View 出现Edit platform窗口,在ipc_XX安装路径里面找到C6657的ipc配置文件,如下,


Next,


将Data Memory 设置为L2SRAM,Stack Memory 设置为L2SRAM。Finish之后在再Rebuild一下工程,注意是Rebuild或先Clean再Build。这时IPC的全局数据变量和栈都是私有的(可以查看工程目录下debug的linker.cmd文件,看是不是都放在L2SRAM了),这样IPC模块的使用就没有问题了。


0 0