vc++中,在头文件定义了两个全局变量。在定时器函数用到那两个变量,结果总是出错,想请教大牛们
定义的全局变量是:CArray<double,double>XI,YI;提示的错误信息是:MapAllView.obj:errorLNK2005:"classCArray...
定义的全局变量是:CArray<double,double> XI,YI;
提示的错误信息是:
MapAllView.obj : error LNK2005: "class CArray<double,double> XI" (?XI@@3V?$CArray@NN@@A) already defined in MainFrm.obj
MapAllView.obj : error LNK2005: "class CArray<double,double> YI" (?YI@@3V?$CArray@NN@@A) already defined in MainFrm.obj
Debug/MapAll.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
MapAll.exe - 3 error(s), 0 warning(s)
问题解决了 展开
提示的错误信息是:
MapAllView.obj : error LNK2005: "class CArray<double,double> XI" (?XI@@3V?$CArray@NN@@A) already defined in MainFrm.obj
MapAllView.obj : error LNK2005: "class CArray<double,double> YI" (?YI@@3V?$CArray@NN@@A) already defined in MainFrm.obj
Debug/MapAll.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
MapAll.exe - 3 error(s), 0 warning(s)
问题解决了 展开
2个回答
展开全部
1、AT89S52共有3个定时/计数器,分别是定时/计数器0、1、2,比AT89S51多了一个定时/计数器2。
2、头文件应采用REG52.H,即:
#include <reg52.h>
该头文件与REG51.H的主要区别就是增加了有关定时/计数器2的特殊功能寄存器定义。主要包括:
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
3、C中的调用方式,一般有如下几步
A、设定TMOD及T2CON的值,确定其工作方式。比如TMOD |= 0x02;设定定时计数器0为定时方式2,。。。。。,其中T2CON内容决定定时计数器2的工作方式;
B、设定相应的定时计数初值;比如TH0=TL0=253;等
C、如果使用中断处理定时/计数器的溢出,则应设置允许其中断。比如ET0 = 1等。
D、根据需要启动定时器。比如TR0 = 1。
E、如果需要,应编制相应的中断服务函数处理定时中断,如:
void Timer0(void) interrupt 1
{
.......
}
2、头文件应采用REG52.H,即:
#include <reg52.h>
该头文件与REG51.H的主要区别就是增加了有关定时/计数器2的特殊功能寄存器定义。主要包括:
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
3、C中的调用方式,一般有如下几步
A、设定TMOD及T2CON的值,确定其工作方式。比如TMOD |= 0x02;设定定时计数器0为定时方式2,。。。。。,其中T2CON内容决定定时计数器2的工作方式;
B、设定相应的定时计数初值;比如TH0=TL0=253;等
C、如果使用中断处理定时/计数器的溢出,则应设置允许其中断。比如ET0 = 1等。
D、根据需要启动定时器。比如TR0 = 1。
E、如果需要,应编制相应的中断服务函数处理定时中断,如:
void Timer0(void) interrupt 1
{
.......
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询