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

首次测试和运用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模块的使用就没有问题了。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值