zly106 发表于 2007-10-21 19:43:27

iccavr中的_StackCheck();堆栈检查如何用?

_StackCheck();
不插入_StackCheck();程序正常工作。但有时会死机。
插入_StackCheck();程序会复位。

请教高手指点

zly106 发表于 2007-10-21 19:45:26

这是检测堆栈是否溢出的方法

zly106 发表于 2007-10-21 19:50:57

只用不多的DATA 25BYE,AVR88,应该数据不会溢出。是中断后检出错误

zly106 发表于 2007-10-21 19:56:45

任意一个程序失败的重要原因是堆栈溢出到其它数据内存的范围 两个堆栈中的任意
一个都可能溢出 并且当一个堆栈溢出时会偶然产生坏的事情 你可以使用堆栈检查函数
检测溢出情况。

zly106 发表于 2007-10-21 20:05:10

解决

zly106 发表于 2007-10-21 20:06:37

硬件堆栈起初是用于存贮函数返回的地址 它代表了许多小的软件堆栈 通常 如果
你的程序没有子程序调用 也不调用象带有%f 格式的 printf()等库函数 那么默认的 16 字
节应该在大多数的例子中能良好工作 在绝大多数程序中 除了很繁重的递归调用程序 再
入式函数 最多 40 个字节的硬件堆栈应该是足够的。

16改为40 OK

zly106 发表于 2007-10-21 20:11:55

我认为_StackCheck();很重要,《任意一个程序失败的重要原因是堆栈溢出》,应该很好的应用

crazydtone 发表于 2013-12-24 10:10:38

谢谢LZ。。。
页: [1]
查看完整版本: iccavr中的_StackCheck();堆栈检查如何用?