打印

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

[复制链接]
3590|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?

(成不成都告咱一声,成功当然好,)

使用特权

评论回复
5
ayb_ice| | 2009-2-19 20:04 | 只看该作者

先定义成全局变量试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

473

帖子

1

粉丝