MDK奇怪问题!

[复制链接]
 楼主| 电子乌托邦 发表于 2010-8-4 18:46 | 显示全部楼层 |阅读模式
调试环境:
KEIL UV4
STM32F103
碰到个奇怪问题,程序如下:
void main()
{
   unsigned char temp5[1000];
   unsigned char temp6[1000];
...
}
进入调试,发现b数组是从flash中分配的,所以导致硬件错误。

经过好几次测试,发现连续开辟两个大数组,keil就会给我把数组分配到flash中。不知哪位碰到过类似问题?

有图有真相:
a.JPG
b.JPG
图中显示temp6从1FFFFEB4开始分配的,所以引起硬件错误。
是keil的bug吗?
 楼主| 电子乌托邦 发表于 2010-8-4 18:55 | 显示全部楼层
顺便说一下,单片机内部20K RAM,而且程序很小,其他地方都没有开RAM,不是RAM空间不够造成的。
 楼主| 电子乌托邦 发表于 2010-8-5 09:06 | 显示全部楼层
朋友们,没有遇到这个问题的吗?
香水城 发表于 2010-8-5 10:08 | 显示全部楼层
一般函数的局部变量都是分配到堆栈,你申请这么大的局部数组变量,估计是堆栈溢出了,这种情况一般会在链接时有警告信息,你再仔细看看。
McuPlayer 发表于 2010-8-5 13:33 | 显示全部楼层
把这两句拿到main函数的外面来:
unsigned char temp5[1000];
unsigned char temp6[1000];

你再看下分配的地址,是否是符合自己的预测了
 楼主| 电子乌托邦 发表于 2010-8-5 17:33 | 显示全部楼层
谢谢两位!
果然如此,结贴。
xqscu 发表于 2010-8-5 17:48 | 显示全部楼层
加大启动文件里面的sp地址就可以了,应该是栈溢出了。
dafuwong1985 发表于 2010-8-13 14:34 | 显示全部楼层
学习
秋天落叶 发表于 2010-8-13 14:57 | 显示全部楼层
应该是堆栈溢出了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

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