在软件复位时,有时候会出现程序中某个定义于xdata区的局部静态unsigned char型变量值被改. 该值由控制器在从机开机的时候传入,此后程序中不会改它,即程序中其它地方不会写此变量,并测试表明:出现错误的时候,从控制器接收到的设定值没有错,即该值接收正确,但在运行中被错误的改变. 分析程序,排除该变量被位于其存储位置附近的数组变量越界改变的可能.
我迷糊的是:程序中定义了大量xdata区的局部静态变量,也定义了一些xdata区的局部自动变量.函数运行时,局部变量都在栈中,栈在data区,那么这些"定义在xdata区的局部自动变量"还在栈中吗?当发生中断时,这些"定义在xdata区的局部自动变量"会被压栈吗? 我觉得这些"定义在xdata区的局部自动变量"可能需要定义成静态才能避免被不正当的重复利用.
希望有知道的人指点一下,先谢过. |