为什么下面这段代码会感觉是没有顺序执行了,导致FPGA的时序不对,数据有误!
temp = * nandWorkMode; while(temp!=0x00660000) { temp = * nandWorkMode; }
* nandStartCmd=START_READ + i;
SetEdma3Src(param_num, (Uint32)NAND_DATA_BASRADDR); SetEdma3Dst(param_num, (Uint32)(nandReadBuf+0x2000*i)); SetEdma3ESR(regin, chan_num); dataIPR=GetEdma3IPR(regin,tcc); while(dataIPR==0) { dataIPR=GetEdma3IPR(regin,tcc); } SetEdma3ICR(regin,tcc);
本来按照我们的设计是应该先执行* nandStartCmd=START_READ + i,然后执行后面有关EDMA的操作;
但是为什么现在感觉是先执行了后面关于EDMA的操作,然后才执行的* nandStartCmd=START_READ + i;
这和我当前使用的编译器有关吗?
noaming:
你好,
nandStartCmd这句 和后面的edma程序是什么关系呢?
star zhang:
回复 noaming:
nandStartCmd这句是用来启动FPGA进行下次的操作,而后面的EDMA程序是完成一个数据搬移操作的。两者应该说没有什么关系的。
noaming:
回复 star zhang:
如果两者没有关系,你感觉是并行运行的话,或许是DMA执行的速度很快。
你可以单步一下,就知道了。
star zhang:
回复 noaming:
原先也好像单步调试过,单步的时候是对的。
noaming:
回复 star zhang:
非多任务时,程序本身就是顺序执行的,不存在并行的道理。只有执行上的速度差异。
star zhang:
回复 noaming:
同时当我把下面这行代码放在最开头的话,代码又应该说是正确的在执行(顺序的执行)。
* nandStartCmd=START_READ + i;
noaming:
回复 star zhang:
是不是因为这样就有了一定的延时?你可以在这句不开头的情况下,在这句后面加一段延时试试看。
star zhang:
回复 noaming:
现在我这设计的是一个多任务的,这里的代码就是处在一个任务里面的,另外我的系统里面还有一些其他的任务。
star zhang:
回复 noaming:
加延时的办法也试过的,有效,但是会对我这个任务所要完成工作的性能有影响!
noaming:
回复 star zhang:
一个任务中的程序,都是顺序执行的。
加延时有效,说明这符合你系统的要求,延时恰当即可不要太长,这对工作性能应该是不存在影响的