Part Number:TMS320C6657
描述如下:
bios系统下,两个核共用同一工程。cfg文件共用,内存分配也是共用。把所有段都分配到共享内存和DDR3中。所有的cache都关了。
在main函数中使用DNUM来控制两个核该运行的代码。
问题:
1,在线两个核下载这同个工程,运行会出错。感觉core1跑的程序会影响core0的程序。猜测两个核访问了同一空间。该怎么解决。
2,烧写到办卡,第二个核运行不起来。core 1 的 bootmagic 地址和core0的 bootmagic 一样。
3,带BIOS系统的程序,两个核能共用同一个工程吗?
Nancy Wang:
1.具体什么报错?两个核是处理不同的数据吗?
可以先参考以下帖子的讨论看一下。
https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_DSP_c6678
多核编程手册:
https://www.ti.com.cn/cn/lit/an/sprab27b/sprab27b.pdf
2、建议您去英文论坛咨询一下。
3、可以
,
wapdasta:
您好,经过我一上午测试。
1,必须保留一部分cache,否则core0的task_create + task_sleep ,无法运行。
我认为,需要保留cache空间,这样能减少两个核使用空间冲突的现象发生。
2,core 1 和 core 0不能都创建任务。
如果core0使用了task_create + task_sleep ,则core1就不能使用task_create + task_sleep。如果用了,core0的线程就无法运行。
但如果把core0的task_sleep注释掉,则两个核的线程都能运行。
所以可以判断是两个核使用的clock有冲突,并且也需要把cache开一部分,以供线程task_sleep使用。
,
wapdasta:
最新聚焦的问题就是task_sleep的问题。两个核共用同一个工程,带bios系统。两个核无法区分 task_sleep所依赖的定时器
如果加了,core0程序就跑不起来,会睡死在task_sleep里面。如果不加,线程之间无法切换。低优先级的线程响应不了。
,
Nancy Wang:
timer ID是选择的ANY吗?工程中不要指定TIMER ID试试。
,
wapdasta:
没指定TIMER ID,
两个核共用统一工程,core 0 跑bios系统,core 1不带bios系统。
多次测试后,发现core0线程中添加使用Task_sleep后,有的时候线程是能跑起来的,Task_sleep也能通过(60%)。有时候就会卡在Task_sleep。(40%)
并且现在经常出现一个现象:core0bios系统程序运行一段时间后会不定时的指针停在_cint00空间地址。从target看到的信息为:
_c_int00() at boot.c:91 0x88880000 (the entry point was reached)
不知道DSP指针为什么会跑到这个地址上去。
,
Nancy Wang:
timer的问题移植您发布的另一个帖子中讨论。
https://e2echina.ti.com/support/processors/f/processors-forum/207338/tms320c6678-cfg-clock
core0停在_cint00后手动调试会继续运行吗?单独跑core0是否会出现这样的情况。
,
wapdasta:
您好,core0运行一会就停在_cint00地址也是突然出现的问题。后来经过各种调试改正,换了个工程等等操作暂时先避免了这个现象。后续如果再出现,再来讨论。
Task_sleep线程切换的问题,现在处理方法是先用Task_yield代替了。测试工程中显示不影响网口的使用。后续会持续跟进。
,
Nancy Wang:
感谢分享!