中档PIC单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。另外,PIC单片机中断程序人口只有一个,在响应中断的请求 时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标 志位将一直保留着),直到这个中断程序退出后才会得到响应。这就要求我们设计中断程序的时候必须尽量短,避免调用子程序,更不要在中断里进行复杂的运算。 == 程序在进入串口中断时容易复位,程序复位。。。。。。怀疑是堆栈溢出了。。。。。。。。 难道重新编写程序? 程序子程序好多。。。。。不知是哪一块出问题。。。。。 --硬件堆栈的单片机子程序嵌套调用绝不超过两层,尽量不传参数(用全局变量)。感觉和汇编差不多。 -–把不是频繁调用的子程序改用宏 === PIC使用是的最多8级的硬件堆栈,如果程序中函数调用的层级超出8级会出现什么状况呢?编译器能够提前发现这种状况吗? -- 把PIC的8级硬件堆栈搞溢出的人, 不合格. ———————————————————————– 正解, 别把单片机的 “C”, 当做PC机的 “C”, 没这么强大 -— 堆栈溢出可以设置产生复位的,参考配置位STVREN。 =====
本文目录
本文目录