xdata中的局部变量中断时会压栈吗?静态变量在运行中被意外

[复制链接]
4501|4
 楼主| alphal 发表于 2009-2-19 17:20 | 显示全部楼层 |阅读模式
在软件复位时,有时候会出现程序中某个定义于xdata区的局部静态unsigned char型变量值被改.
该值由控制器在从机开机的时候传入,此后程序中不会改它,即程序中其它地方不会写此变量,并测试表明:出现错误的时候,从控制器接收到的设定值没有错,即该值接收正确,但在运行中被错误的改变.
分析程序,排除该变量被位于其存储位置附近的数组变量越界改变的可能.

我迷糊的是:程序中定义了大量xdata区的局部静态变量,也定义了一些xdata区的局部自动变量.函数运行时,局部变量都在栈中,栈在data区,那么这些"定义在xdata区的局部自动变量"还在栈中吗?当发生中断时,这些"定义在xdata区的局部自动变量"会被压栈吗?
我觉得这些"定义在xdata区的局部自动变量"可能需要定义成静态才能避免被不正当的重复利用.

希望有知道的人指点一下,先谢过.
xwj 发表于 2009-2-19 17:31 | 显示全部楼层

吃多了? 干嘛把中断里的局部变量定义到xdata中?

你知不知道中断中只要用到xdata,就要多保存DPH、DPL等,又要多用掉很多时间?


如果你的中断程序没有影响到xdata,也没有定义xdata,xdata的数据当然也就不会受影响了

反正,不管你是定义到哪里,又或者怎么定义的局部变量,编译器都会自动做覆盖分析,根本就不会出错的(但会影响执行效率),你完全不用担心。



最后,不知道你弄明白变量的作用域和生存期没有?
不明白的话就先去看书吧...
huangqi412 发表于 2009-2-19 18:20 | 显示全部楼层

老x说话好严厉的说...

冷漠 发表于 2009-2-19 19:26 | 显示全部楼层

建议,试一下。

在软件复位时,有时候会出现程序中某个定义于xdata区的局部静态unsigned char型变量值被改.
******************************************************

也许要定义为volatile?

(成不成都告咱一声,成功当然好,)
ayb_ice 发表于 2009-2-19 20:04 | 显示全部楼层

先定义成全局变量试试

您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

473

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部