全局变量值 莫名其妙的变了

[复制链接]
5825|13
 楼主| eein 发表于 2007-3-30 14:15 | 显示全部楼层 |阅读模式
全局变量值 莫名其妙的变了没有对全局变量值 再赋值 却在函数调用的时候,发现其值已经改变.

这是为什么呢?

使用C18 3.06和MPLAB
我把全局定义在文件A.h 和A.c

这样在其他文件中使用include调用

入定义变量

A.h中

extern unsigned char B[60];

extern unsigned char C[6];

extern unsigned char D[10];

A.c中

#pragma udata Var

unsigned char B[60];

unsigned char C[6];

unsigned char D[10];

#pragma udata

问题就存在

但是在A.c中如下定义,问题就OK了.

#pragma udata Var1

unsigned char B[60];

#pragma udata

#pragma udata Var2

unsigned char C[6];

#pragma udata

#pragma udata Var3

unsigned char D[10];

#pragma udata

其中Var1~3为再lkr中配置的DATABANK

这是为什么呢?

high 发表于 2007-3-30 17:39 | 显示全部楼层

re

A.h中

extern unsigned char B[];

extern unsigned char C[];

extern unsigned char D[];
 楼主| eein 发表于 2007-4-2 10:04 | 显示全部楼层

还是不大理解,能详细点吗?

那假如是变量呢?
比如:double DD; 呢?
谢谢!
平常人 发表于 2007-4-2 22:04 | 显示全部楼层

定义没问题,你的程序有问题,改定义不解决问题,危机四

这种事情肯定是程序中有越界访问的问题,还是好好查查程序吧。改了定义只是暂时回避了问题,没有根本解决,后患无穷!
 楼主| eein 发表于 2007-4-3 08:20 | 显示全部楼层

越界访问的问题

越界访问的问题怎么处理呢?
谢谢!
 楼主| eein 发表于 2007-4-3 15:33 | 显示全部楼层

UP

UP
没有人遇到过吗?
ayb_ice 发表于 2007-4-3 15:39 | 显示全部楼层

随便说说

  指针有没有乱指...
 楼主| eein 发表于 2007-4-5 10:27 | 显示全部楼层

没有人遇到过吗?

我定义的文件代码:
*.C

#pragma udata Var1 
<Defined Variable list1 less than 256B.> 
#pragma udata 
#pragma udata Var2 
<Defined Variable list2 less than 256B.> 
#pragma udata 

*.lkr文件为:

DATABANK   NAME=gpr0       START=0x60           END=0x7FF 
DATABANK   NAME=gpr1       START=0x800          END=0x8FF PROTECTED        
DATABANK   NAME=gpr2       START=0x900          END=0x9FF PROTECTED    
DATABANK   NAME=gpr3       START=0xA00          END=0xCFF PROTECTED 
  
SECTION    NAME=CONFIG     ROM=config 
SECTION    NAME=Var1   RAM=gpr1 
SECTION    NAME=Var2   RAM=gpr2 
STACK SIZE=0x300 RAM=gpr3

gpr0用于其他数据
ayb_ice 发表于 2007-4-5 10:41 | 显示全部楼层

随便说说

变量不能乱声明externr的,这点和函数声明不一样
建议如下:

A.h中
#ifdef _A_C

unsigned char B[60];
unsigned char C[6];
unsigned char D[10];

#else

extern unsigned char B[60];
extern unsigned char C[6];
extern unsigned char D[10];

#endif

然后在A.C中定义
#define _A_C
 楼主| eein 发表于 2007-4-5 15:24 | 显示全部楼层

UP

这样行吗?
ayb_ice 发表于 2007-4-5 15:28 | 显示全部楼层

随便说说

  你的例子在同一文件中又定义又声明...
 楼主| eein 发表于 2007-4-6 08:39 | 显示全部楼层

问题依然存在

问题依然存在
有时候 修改多了连续对 系统的全局变量 进行多次操作 还会引起系统复位!
可是我没有开狗啊!
帮帮我啊!
谢谢了!
ayb_ice 发表于 2007-4-6 08:46 | 显示全部楼层

不知你是什么MCU

不知你是什么MCU,编译器...
#pragma udata Var2什么意思...
 楼主| eein 发表于 2007-4-9 09:45 | 显示全部楼层

使用的是PIC18F4685

使用的是PIC18F4685
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

19

帖子

0

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