HI
我使用的是6678开发板,在使用的过程中,存在这样的一个问题:
在程序运行的过程中,有的时候会出现各种问题,但是如果在程序中加入几个printf语句,就不会有问题。
请问这是什么情况?需要怎么解决呢?
有遇到相同问题的么?
谢谢~
kooking:
能不能发几段代码看看,print会耗费一些系统资源,也有点sleep的效果
wumengtiankuo zhou:
回复 kooking:
谢谢kooking
例如在使用MessageQ时:
if(DNUM == 2 || DNUM == 1) printf("before get msg, messageQ=0x%x…\n"); if(MessageQ_get(messageQ, &msg, MessageQ_FOREVER)<0) { printf("This should not happen since timeout is forever\n"); }
如果没有那两句打印,就会出问题,但是每个核get消息是独立的,怎么会需要sleep呢??
谢谢~
King Wang1:
回复 wumengtiankuo zhou:
程序带printf之后会自动编译进去很多函数(从编译库中获取的),因此包括你的代码整体结构会有变化,你可以从这方面去查下。
不过先确定下,你说的出问题是什么问题?
wumengtiankuo zhou:
回复 King Wang1:
谢谢King Wang1
例如,针对MessageQ中MessageQ_put和MessageQ_get的使用,如果没有加打印信息,有时会出现invalid queueId,这应该是在put的时候出现的断言错误。
如果加上printf语句,可能就不会出现这个问题。
但是如果0核向多核put消息,应该不会相互影响的,但是为什么还会出现invalid queueId的错误呢??
而且有的时候是第一次向多核put消息时没有问题,但是第二次可能就会报上述错误?这又是什么原因呢?
谢谢~