公司项目,用EDMA从EMIF外设读取数据,采用GPIO2事件触发。在Windows下用JTAG调试无问题,在Linux下用利用dsplink的loop范例程序改了一个程序,利用Windows上调试好的代码,发现有问题,问题具体表现如下:(用伪代码描述)
情况1--------------------------------------------------------------------------
循环N次:
用malloc函数分配内存
EDMA读取数据到该内存
重复上述循环
结果:每次读到的数据都是正确的,由于内存泄漏,循环几次后结束执行
情况2--------------------------------------------------------------------------
循环N次:
用malloc函数分配内存
EDMA读取数据到该内存
用free函数释放内存
重复上述循环
结果:第一次读到的数据是正确的,后来读到的数据都是0(两次malloc分配到的内存块估计是同一内存块)
情况3--------------------------------------------------------------------------
定义全局数组
循环N次:
EDMA读取数据到全局数组
重复上述循环
结果:第一次读到的数据是正确的,后来读到的数据都是0
似乎是只要对内存有读写操作后,就锁定了该内存以至于无法EDMA。在JTAG模式下无问题,看资料可能是MPU的原因,因为MPU在JTAG模式下无效。第一次读到的数据都是正确的,因为MPU在复位后的初始阶段为配置为全可访问。
不知道我的理解对不对,求高手,如果是MPU的问题,求代码如何解锁该内存块,使得可被EDMA访问。