本帖最后由 FSL_TICS_A 于 2014-2-6 23:08 编辑
请教各位大神:
最近在用KL25做智能车,用CW软件编程,需要用到OV7620数字摄像头,目前在编写摄像头采集的程序,包括DMA等。
进行分频后,现在的目标是采集到320*240的图像,用DMA采集每行320个点,剩下的由单片机的中断完成。
然后很自然的就联想到把这幅320*240的图像存到Image[ROW][COL]这样一个二维数组里,ROW为240,COL为320。
然后编写程序,定义了一个全局变量unsigned char ImageBuf[ROW][COL](采集回的为灰度,也就是0~255)。
之后问题就来了,在编译的时候出现了这样的话:
d:/freescale/cw mcu v10.4/cross_tools/arm-none-eabi-gcc-4_7_3/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld.exe: kl25prg.elf section `.bss' will not fit in region `m_data'
d:/freescale/cw mcu v10.4/cross_tools/arm-none-eabi-gcc-4_7_3/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld.exe: region `m_data' overflowed by 66592 bytes
collect2.exe: error: ld returned 1 exit status
mingw32-make: *** [kl25prg.elf] Error 1
经过验证,正是这个全局变量导致的问题,比如如果把COL的320改为319时,上面的溢出就会变为`m_data' overflowed by 66352 bytes,变小了。如果把行和列都定义为1,编译直接可以通过。
这样就得出一个结论,貌似是全局变量定义的过多导致溢出,请问各位大神我这么想对吗?
如果对的话,我想到了几个解决的方法:
1.把存放定义全局变量的空间扩大(由于刚接触不长时间,现在还是新手,不知道可不可行,也不知道怎么操作)。
2.把全局变量转为局部变量(不知道能不能解决问题),可是很多文件都需要去引用这个数组,如果定义为了局部变量,由该怎么去解决接下来的问题呢?
暂时只能想到这么多,请各位大神不吝赐教,哪怕是提出点意见也成,我再想办法解决。 |