[应用相关] 数组长度

[复制链接]
893|24
 楼主| huanghuac 发表于 2020-5-10 11:22 | 显示全部楼层 |阅读模式
ST, IO, TE, TI, se
最近在用STM32做一个东西(MDK)),需要用到3个很长的数组。 结果发现编译不过去,应该还是设置的问题
#define  lenth  4800
unsigned int ss1[lenth];


.\Obj\test plc.axf: Error: L6406E: No space in execution regions with .ANY selector matching stm32f10x_vector.o(STACK).
.\Obj\test plc.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.data).
.\Obj\test plc.axf: Error: L6407E: Sections of aggregate size 0x478 bytes could not fit into .ANY selector(s).

   请教大家需要修改那里
gongche 发表于 2020-5-10 11:25 | 显示全部楼层
这个是局部变量吗?
jlyuan 发表于 2020-5-10 11:28 | 显示全部楼层

如果是局部变量,在启动文件里修改下Stack的大小,栈容量分配小了
gongche 发表于 2020-5-10 11:32 | 显示全部楼层

你用的哪个型号?
int[4800]可就有19200字节了,如果3个数组就接近57k的RAM,超出部分型号的RAM上限了,你当单片机是电脑啊,这么挥霍
chenho 发表于 2020-5-10 11:36 | 显示全部楼层

嵌入式设备拥有的资源往往有限,如果一个程序编译、链接之后的可执行文件大小略大于存储大小时,则不能生成可执行文件进行调试或固化到Flash中。
dingy 发表于 2020-5-10 11:38 | 显示全部楼层
在这种情况下我们一般不去从硬件上调整存储空间的大小(有些存储空间在片内,实在无法调整),而是去修改程序,试图将程序简化、将缓存减小、减少全局变量、少用大数组多用指针等等人工方法,有些时候这些方法很有效。
 楼主| huanghuac 发表于 2020-5-10 11:41 | 显示全部楼层
多谢二位的回复,我用的是STM32F103RBT6,现在的问题是我只定义了一个4800的unsigned int 数组就编译不过去了
happy_10 发表于 2020-5-10 11:43 | 显示全部楼层

RB也就20K RAM,20K = 20480,减去 19200 等于 1280,还有堆还有栈,你让编译器给你放哪去??最基本的数学题啊
zhaoxqi 发表于 2020-5-10 11:46 | 显示全部楼层
一个网络包才1.5K  你为何需要3个4800...
happy_10 发表于 2020-5-10 11:50 | 显示全部楼层

容量超出了
zhuww 发表于 2020-5-10 11:54 | 显示全部楼层
简化程序、减小缓存、减少全局变量
chuxh 发表于 2020-5-10 12:06 | 显示全部楼层
太长了 可以考虑二维数组
yufe 发表于 2020-5-10 12:09 | 显示全部楼层
看你定义在哪里了
pangb 发表于 2020-5-10 12:12 | 显示全部楼层
感觉 太大了 数据!
ousj 发表于 2020-5-10 12:19 | 显示全部楼层
或者外部加SDRAM 就可以完美解决这个问题了!
houcs 发表于 2020-5-10 12:22 | 显示全部楼层
外扩内存!
zhuww 发表于 2020-5-10 12:24 | 显示全部楼层
确实太长了,没有规划好空间。
wangzsa 发表于 2020-5-10 12:28 | 显示全部楼层
可以算下容量,单片机容量有限啊
chenho 发表于 2020-5-10 12:36 | 显示全部楼层
修改堆栈也可以,对于满足条件的可以的
 楼主| huanghuac 发表于 2020-5-10 12:40 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

772

主题

8473

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部