c8051f040内集成有4KB的外部数据存储器。定义到该存储器内的全局long型变量会在程序运行中由于其他函数的执行发生变化吗?
在一个项目中,对工程使用 KEIL uv2 编译
编译结果data = 13.7 xdata = 3100 code = 45000+
程序运行得正常,我在定义全局变量时都指定了变量定义到哪个区域,通常全局变量我都指定到 xdata数据区域中,在xdata 中我定义了较多的 int型变量,还有约十个左右的 long型变量。但是后来增加了一个函数,其实也是调用以前存在的一些函数后,我在使用设备时发现执行后来增加的函数后,设备数据显示有异常,有变量的值发生改变,我使用设置断点的方法,发现在执行后来增加的函数后,有全局变量发生改变。后来在进一步的试验中又发现还有参数存在异常,也是全局变量发生改变。这两个全局变量均是定义到 xdata数据区域中的 long型变量。后来我把所有定义到xdata区域中的long型变量都拖到watchwindow中观察,发现就这两个发生改变,而且改变是发生在执行添加的这个函数后,而该函数没有对这两个变量进行直接或者间接的操作。由于xdata区域中int型变量较多,我没有一个一个的检查,但是在操作设备的过程中没有发现其它的异常,我姑且认为后加的函数对xdata区域中int型变量没有影响。我后来将被修改的long型变量在定义中由原来定义到xdata区域中改为定义到idata区域中,再执行函数,变量没有再被修改。
我很纳闷,明明定义的全局变量,怎么在执行一个与之毫不相干的函数后,数据就莫名其妙的被修改了呢?是执行函数时哪儿溢出了?我觉得也不大可能啊,毕竟全局变量我是指定在外部数据存取区域中啊?我没想明白,希望得到大家的指点。看看我是哪儿还没有想到的。 |