TI专家你们好,有一个问题,困扰很久了。就下面的一个简单核间通信模式:
core0完成如下功能:
tsk(){
while(1){
//****处理任务****// //任务耗时100ms
notify_send(core2);//最后一个参数是FALSE;
sem_pend(core2); //由与core2通信的notify回调函数post;
}
}
core2完成如下功能:
tsk(){
while(1){
sem_pend(core0); //由与core0通信的notify回调函数post;
notify_send(core0);//最后一个参数是FALSE;
//****处理任务****// //任务耗时20ms
}
}
按理来说,是一个很简单的通信模式,两个core都不做其他任务,事件注册的肯定都没问题,检查很多遍了。但现在就是core2执行过程,耗时总是一次20多ms、下一次100多ms这样子徘徊.(测的都整个循环的时间)
这就是我想解决的问题,core2执行时间不应该一直是100ms左右吗?
为什么会出现现在这种情况?有哪些可能因素会导致这样的问题嘛???
急求解答!
非常感谢!
Adam Yao94020:
应该还是信号量的逻辑存在问题,需要注意一点两个核并不是在同步的运行的,所以两个核开始各自任务的时间是不一样的。
你可以通过在任务的开始,特别是pend到自己的信号量前后加一些时间打印,通过时间打印来分析问题出在哪里。