打印

MDK奇怪问题!

[复制链接]
2296|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
调试环境:
KEIL UV4
STM32F103
碰到个奇怪问题,程序如下:
void main()
{
   unsigned char temp5[1000];
   unsigned char temp6[1000];
...
}
进入调试,发现b数组是从flash中分配的,所以导致硬件错误。

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

有图有真相:


图中显示temp6从1FFFFEB4开始分配的,所以引起硬件错误。
是keil的bug吗?
沙发
电子乌托邦|  楼主 | 2010-8-4 18:55 | 只看该作者
顺便说一下,单片机内部20K RAM,而且程序很小,其他地方都没有开RAM,不是RAM空间不够造成的。

使用特权

评论回复
板凳
电子乌托邦|  楼主 | 2010-8-5 09:06 | 只看该作者
朋友们,没有遇到这个问题的吗?

使用特权

评论回复
地板
香水城| | 2010-8-5 10:08 | 只看该作者
一般函数的局部变量都是分配到堆栈,你申请这么大的局部数组变量,估计是堆栈溢出了,这种情况一般会在链接时有警告信息,你再仔细看看。

使用特权

评论回复
5
McuPlayer| | 2010-8-5 13:33 | 只看该作者
把这两句拿到main函数的外面来:
unsigned char temp5[1000];
unsigned char temp6[1000];

你再看下分配的地址,是否是符合自己的预测了

使用特权

评论回复
6
电子乌托邦|  楼主 | 2010-8-5 17:33 | 只看该作者
谢谢两位!
果然如此,结贴。

使用特权

评论回复
7
xqscu| | 2010-8-5 17:48 | 只看该作者
加大启动文件里面的sp地址就可以了,应该是栈溢出了。

使用特权

评论回复
8
dafuwong1985| | 2010-8-13 14:34 | 只看该作者
学习

使用特权

评论回复
9
秋天落叶| | 2010-8-13 14:57 | 只看该作者
应该是堆栈溢出了

使用特权

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

本版积分规则

140

主题

633

帖子

2

粉丝