打印
[Kinetis]

请教一个关于KL25存储区分配的问题(已解决)

[复制链接]
4716|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icebingbin|  楼主 | 2014-1-10 16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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.把全局变量转为局部变量(不知道能不能解决问题),可是很多文件都需要去引用这个数组,如果定义为了局部变量,由该怎么去解决接下来的问题呢?
暂时只能想到这么多,请各位大神不吝赐教,哪怕是提出点意见也成,我再想办法解决。

相关帖子

沙发
icebingbin|  楼主 | 2014-1-10 16:10 | 只看该作者
如果觉得我没描述清楚的话,可以随时发问,我一直在线等待解答  这个问题快把我弄崩溃了

使用特权

评论回复
板凳
ar_m_cu| | 2014-1-10 19:45 | 只看该作者
KL25没有那么大的内存,IMAGE数组超过KL25的内存空间了

使用特权

评论回复
地板
icebingbin|  楼主 | 2014-1-10 20:19 | 只看该作者
ar_m_cu 发表于 2014-1-10 19:45
KL25没有那么大的内存,IMAGE数组超过KL25的内存空间了

请问如果是那样的话  把存放定义全局变量的空间扩大这条方法还能行得通吗?比如通过外扩展空间?还是避免只能避免定义这么多全局变量了?

使用特权

评论回复
5
ar_m_cu| | 2014-1-10 21:26 | 只看该作者
icebingbin 发表于 2014-1-10 20:19
请问如果是那样的话  把存放定义全局变量的空间扩大这条方法还能行得通吗?比如通过外扩展空间?还是避免 ...

应该是可以通过外接RAM实现的。

使用特权

评论回复
6
icebingbin|  楼主 | 2014-1-10 22:31 | 只看该作者
ar_m_cu 发表于 2014-1-10 21:26
应该是可以通过外接RAM实现的。

有点云里雾里的。。完全不知道应该怎么接o(╯□╰)o

使用特权

评论回复
7
ar_m_cu| | 2014-1-10 22:47 | 只看该作者
icebingbin 发表于 2014-1-10 22:31
有点云里雾里的。。完全不知道应该怎么接o(╯□╰)o

对摄像头不了解,不知道可不可以把它传输数据的速度降下来,请求多少送多少,这样就不会存在需要大片内存的情况了。

使用特权

评论回复
8
FSL_TICS_Fiona| | 2014-1-13 11:15 | 只看该作者

(正解)

本帖最后由 FSL_TICS_A 于 2014-2-6 23:09 编辑

unsigned char ImageBuf[ROW][COL] 需要240*320个字节来存放,而KL25系列内部RAM不超过16KB,无法存下这么大的数组。而且KL25不能外接memory。如果对处理速度要求不高的话,可以将数组存放在flash中,每次运算时,从flash中取出需要的数据,在RAM中运算,处理后的结果再写回到flash中。或者修改算法,避免使用大的全局数组。

使用特权

评论回复
9
icebingbin|  楼主 | 2014-1-13 17:58 | 只看该作者
明白了  谢谢~

使用特权

评论回复
10
wqluck| | 2014-7-4 12:52 | 只看该作者
FSL_TICS_Fiona 发表于 2014-1-13 11:15
unsigned char ImageBuf[ROW][COL] 需要240*320个字节来存放,而KL25系列内部RAM不超过16KB,无法存下这么 ...

你好,你好,请问怎么样将数据存在flash中,我在用MKE02也遇到类似的问题。

使用特权

评论回复
11
FSL_TICS_ZJJ| | 2014-7-4 13:24 | 只看该作者
wqluck 发表于 2014-7-4 12:52
你好,你好,请问怎么样将数据存在flash中,我在用MKE02也遇到类似的问题。 ...

你是想变量存还是constant存?
变量你放EEPROM里好了,从constant我有篇经验分享讲的,是KL25的,但是KE02也是一样的操作方式。
https://bbs.21ic.com/icview-696256-1-1.html
你可以看看,如果还有问题,可以发帖提问。

使用特权

评论回复
12
wqluck| | 2014-7-4 15:18 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-4 13:24
你是想变量存还是constant存?
变量你放EEPROM里好了,从constant我有篇经验分享讲的,是KL25的,但是KE0 ...

我在***上也发了个帖子说我遇到的问题,你可以帮我看看~~

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2014-7-4 15:20 | 只看该作者
wqluck 发表于 2014-7-4 15:18
我在***上也发了个帖子说我遇到的问题,你可以帮我看看~~

***是什么?
你直接在我21ic发帖吧,我这个月管21ic,这样也可以给21ic的网友一个参考。

使用特权

评论回复
14
wqluck| | 2014-7-4 15:40 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-7-4 15:20
***是什么?
你直接在我21ic发帖吧,我这个月管21ic,这样也可以给21ic的网友一个参考。 ...

好吧,看来我太天真,原来这几个坛子还互相屏蔽的呢,是不是得小心我的ID了,囧。

使用特权

评论回复
15
FSL_TICS_ZJJ| | 2014-7-4 17:00 | 只看该作者
wqluck 发表于 2014-7-4 15:40
好吧,看来我太天真,原来这几个坛子还互相屏蔽的呢,是不是得小心我的ID了,囧。 ...

这个是论坛的屏蔽原因,你直接发帖吧亲,我会帮你解答的。

使用特权

评论回复
16
FSL_TICS_ZJJ| | 2014-7-4 17:09 | 只看该作者
wqluck 发表于 2014-7-4 15:40
好吧,看来我太天真,原来这几个坛子还互相屏蔽的呢,是不是得小心我的ID了,囧。 ...

实在不想发,你把另一个的链接给我,我过去答。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

0

粉丝