MCU是TM4C123GXL launchpad, 由于速度不够, 采集数据时, 先采集下来存到 img 二维数组里, 然后暂停中断开始上报数据, 再开中断。
但是每次发送到img[25][47]就会出错, 每次都在同一个地方。 SRAM大小应该也是够的。
下面是串口部分。
uint16_t i, j;
while(print){ //数据采集结束print就置位
MAP_GPIOIntDisable(GPIO_PORTC_BASE, Pin_PCLK|Pin_HREF|Pin_VSYN);//暂停 interrupt
UARTCharPut(UART0_BASE, 0xff);//数据头
for(i=0; i<240; i+=2){
for(j=0; j<640; j+=4){
if(img[j] == 0xff){
img[j] = 0xfe;//防止误判为数据头
}
if((i%2==0)&&(j%4==0)){
MAP_UARTCharPut(UART0_BASE, img[i/2][j/4]);//img大小是[120][160],隔2行隔4列存储
SysCtlDelay(3);//怕是传太快导致的, 加个延时
}
}
//UARTCharPut(UART0_BASE, 0xff);
SysCtlDelay(3);//打个断点, 看哪里出错了
}
print = 0;//标志位 打印结束 中断继续
Delay_us(1);
MAP_GPIOIntEnable(GPIO_PORTC_BASE, Pin_PCLK|Pin_HREF|Pin_VSYN);//开中断
break;
}
现在错误定位在i=50 j=148的地方, 即img[25][47], 每次输出到这里就进入faultISR。
我试过在DEBUG的时候, 把i的值设置为51或者52甚至100, 立刻出错。
请问可能是什么原因导致的呢, 为什么每次都在 [25][47] 这里错误?
Michael Sun:
img[25][47]这个数组是局部变量还是全局变量?
看起来很像是堆栈溢出了。楼主把堆栈设大点试试看。
Zhengguan Duan:
回复 Michael Sun:
123gh6pm的SRAM只有32k, 不敢设置太大。 img 是全局变量, 第一次声明在中断处理文件int.c中, 在main.c有 extern img[123][163], 本来只需要120*160, 就是担心越界多申请了一点, 声明时是123*163
Michael Sun:
回复 Zhengguan Duan:
现在用了多少RAM啊,改一下堆栈大小试试,故障现象是否有改变,
yujie liang:
我最近在用tm4c驱动ov7725摄像头,采集的数据是有的,但是用液晶屏显示不对。原先我是用的stm32驱动它可以正常显示,现在只是把代码移植到ccs改用tm4c驱动,就不对了,不知道问题出在哪,所以也不知道如何去解决。
jiahao he:
回复 yujie liang:
试试上位机显示,M4的速度跟不上
yujie liang:
回复 jiahao he:
试过了,乱的。发表
yujie liang:
回复 yujie liang:
我是利用fifo作为缓存器采集的图像