本帖最后由 ayb_ice 于 2010-7-9 09:23 编辑
千万不要乱说什么KEIL这BUG,那BUG的
堆栈是可以配置大小的,但KEIL为什么默认只是大小1呢
答案很简单
首先必须有一个大小,才能编译通过,实际上KEIL是把没有被使用的所有IDATA空间都当成了堆栈,定义的堆栈空间实际是是首地址
至于配置在启动文件STARUP.A51中
分析:
假如编译器已经使用了200个字节的IDATA空间,那么从201开始自然就是堆栈空间,堆栈定义成1或56没有任何区别,不影响任何使用
但是如果把堆栈定义成56,那么上面的编译结果变成了编译器使用了256字节的IDATA空间了,这样当然也没有问题<可能有些人觉得有点危险,因为直觉是RAM用完成了,但其实已经确保堆栈不会小于56了>
但是如果此时把堆栈改成57呢,结果可想而知连编译都过不了,但实际99.9%情况下,56字节的堆栈足够了
结论: 堆栈大小定义1个字节是最科学的
看编译结果时要确保有一定的堆栈
据我的经验一般情况64字节堆栈足以应对大部分情况<不使用IDATA重入堆栈,两级中断>
注: KEIL手册中一句话,一个复杂的数**算几乎可以耗掉所有的堆栈<其实在51中几乎不用这些复杂的数运学算,估计是什么LOG一类的>
.... |