MDK奇怪问题!

bobo_cuckoo   2010-8-4 18:46 楼主
调试环境:
KEIL UV4
STM32F103
碰到个奇怪问题,程序如下:
void main()
{
   unsigned char temp5[1000];
   unsigned char temp6[1000];
...
}
进入调试,发现b数组是从flash中分配的,所以导致硬件错误。

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

有图有真相:


图中显示temp6从1FFFFEB4开始分配的,所以引起硬件错误。
是keil的bug吗?

回复评论 (8)

                                 顺便说一下,单片机内部20K RAM,而且程序很小,其他地方都没有开RAM,不是RAM空间不够造成的。
点赞  2010-8-4 18:55
                                 朋友们,没有遇到这个问题的吗?
点赞  2010-8-5 09:06
                                 一般函数的局部变量都是分配到堆栈,你申请这么大的局部数组变量,估计是堆栈溢出了,这种情况一般会在链接时有警告信息,你再仔细看看。
点赞  2010-8-5 10:08
把这两句拿到main函数的外面来:
unsigned char temp5[1000];
unsigned char temp6[1000];

你再看下分配的地址,是否是符合自己的预测了
点赞  2010-8-5 13:33
谢谢两位!
果然如此,结贴。
点赞  2010-8-5 17:33
                                 加大启动文件里面的sp地址就可以了,应该是栈溢出了。
点赞  2010-8-5 17:48
                                 学习
点赞  2010-8-13 14:34
                                 应该是堆栈溢出了
点赞  2010-8-13 14:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复