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

关于多核程序运行中的先后加载

现在是跑两个核,选择一个0核DEBUG进入到调试界面,再加载另外1核的.out文件 与 选择一个1核DEBUG进入到调试界面,再加载另外0核的.out文件,为什么两个加载的顺序不同,程序执行的结果为什么不同?两个核的程序是放在不同的区域中,只有相互通信的少数变量是放在相同的共享存储空间。感觉是后面加载的文件的程序才有效。

Jane Lu:

建议对比一下两个核对应程序的map文件,看是否有其他重复使用的资源。 举个例子,.cinit段存放了初始化信息,两个out文件中.cinit段使用的memory空间不能重复。

另外,共享变量赋值时不能带初始化信息。

除了代码段和共享变量可以复用,其他段的memory分配都建议分开。

 

wj xz:

回复 Jane Lu:

谢谢您的回答!我的工程存储空间不会重复。你是说我在main函数外定义的共享变量不能赋初值么?我共享变量都是放MSM里的,两边在开始时赋相同值也不可以么,这会有什么影响?现在我一个工程就是简单的while(1),另一个工程是网口。单独跑网口可以收数据,但两个核一起时,网口初始化成功,但收不到数据。请问这是怎么回事

wj xz:

回复 Jane Lu:

另外我的一个工程是网口工程,是在BIOS下的,一个就是裸机不带系统的简单的while(1),请问这会不会有影响

Jane Lu:

回复 wj xz:

赋相同的值是可以的。 另外,共享数据需考虑cache一致性问题。

网口初始化成功, 收不到数据是网口底层寄存器的统计就没有收到包,还是上层业务代码没有收到数据? 最好能具体描述一下现象。

wj xz:

回复 Jane Lu:

现在网口使用的是MAC层,加载的另一个核完全没有内容就是while(1),放在自身的L2中,即使这样还是检测不到网口收数据,网口接收数据对应的中断函数就没有进去。不知道是什么原因。感觉就是先加载网口程序,再加载另一个程序可以,但是先加载另一个程序,再加载网口程序就不行了。

wj xz:

回复 wj xz:

这是我用的两个工程生成的文件,cmd文件中没有重复的地方,核0的工程也完全没有共享空间,也没执行什么内容

Jane Lu:

回复 wj xz:

附件中没有看到以太网程序的具体代码,是直接使用LLD中的PA例子吗? 请提供这个程序的map文件和out文件

如果只加载以太网的例子到core1,core0 不加载任何程序,能运行成功吗?

wj xz:

回复 Jane Lu:

谢谢您的答复,现在觉得可能是换了个核运行网口,导致网口中断映射不对,我的中断映射函数为eventId  =   48;vectId  =   7; EventCombiner_dispatchPlug (eventId, (EventCombiner_FuncPtr)Cpsw_RxISR, (UArg)NULL, TRUE);Hwi_eventMap(vectId, 1);Hwi_enableInterrupt(vectId);请问如果要放在核1跑,是不是要修改eventId  ,应该怎么修改?

wj xz:

回复 Jane Lu:

谢谢你的答复,我也觉得是这个问题,但是我按照http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/63229.aspx中已经修改了设置,还是没有成功,是不是漏了什么设置?

赞(0)
未经允许不得转载:TI中文支持网 » 关于多核程序运行中的先后加载
分享到: 更多 (0)