STC单片机的一个怪问题!
typedef struct{
u16Quality;//质量
u8 SetNum;
u8 NowNum;///////无用没有的话会重启---无解
u8 RunNowNum;
u8 Timer;
u8 RunStatus;
u8 Select;
}RunData;
extern RunData xdata My_RunData;
LcdShowNum(56,0,3,Data->Quality,0);
LcdDislayChar(0,2,"设数:",0);
LcdShowNum(40,2,2,Data->SetNum,0);
LcdDislayChar(72,2,"现数:",0);
//LcdShowNum(112,2,2,(u8)Data->NowNum,0);//运行这个会重启
//LcdShowNum(112,2,2,(u8)Data->RunNowNum,0);
先前我用的是STC11的 一下可以运行LcdShowNum(112,2,2,(u8)Data->NowNum,0); 能过这里,也就是上电5-6次 能4次能运行这里不重启!
我还以为单片机坏了 我又换了几块,问题还是一样的!现在我用STC12的。过到这里就会重启!找不到原因是为什么?然后我就在结构里了再
定义一个 u8 RunNowNum; 而不使用NowNum这个数据,就没事!但是不能把NowNum去了!去了还是一样!各位大神有遇到的不?我用的
是keil 2 直接加STC头文件的法子! {:mad:}{:mad:}{:mad:}{:mad:}{:mad:}{:mad:}{:mad:} Data这个变量哪里来的?怀疑是外部ram的问题 或者访问超限了 maxwelllls 发表于 2014-5-17 12:51
Data这个变量哪里来的?怀疑是外部ram的问题 或者访问超限了
结构体指针! 如果单片机没有xdata但是你用了xdata那就有可能出现奇怪的问题。
具体要看单片机手册。 这个可以看看汇编,看看到底走到哪儿产生的复位了,另外你在用SetNum的时候怎么不使用(u8)? 直接指向 结构体中间的变量?这也行么?如果不是那么Data这个变量也是RunData的结构体? lcw_swust 发表于 2014-5-17 17:53
如果单片机没有xdata但是你用了xdata那就有可能出现奇怪的问题。
具体要看单片机手册。 ...
这个是有的! xiaobendan 发表于 2014-5-17 18:06
这个可以看看汇编,看看到底走到哪儿产生的复位了,另外你在用SetNum的时候怎么不使用(u8)? ...
这个没试?因为上面的没有问题?就没有试! jlhgold 发表于 2014-5-17 19:12
直接指向 结构体中间的变量?这也行么?如果不是那么Data这个变量也是RunData的结构体? ...
原形是这样的
void RunWindow(RunData *Data)
{
LcdDislayChar(0,0,"加注量: g",0);
LcdShowNum(56,0,3,Data->Quality,0);
LcdDislayChar(0,2,"设数:",0);
LcdShowNum(40,2,2,Data->SetNum,0);
LcdDislayChar(72,2,"现数:",0);
//LcdShowNum(112,2,2,(u8)Data->NowNum,0);//运行这个会重启
LcdShowNum(112,2,2,(u8)Data->RunNowNum,0); 换个芯片试试,可能是这个芯片的某块RAM损坏了
记得告诉我答案哦 zhugean 发表于 2014-5-19 09:03
换个芯片试试,可能是这个芯片的某块RAM损坏了
记得告诉我答案哦
这个问题!有过!先前几块芯片!有的能过~上一下电能过!有的不行~~以后不敢用了! 是不是看门狗复位了。 STC12C5A60S2我用过很多了,除了有一次新片子就有两个脚是短路的,还有一个晶振改成外部后不能起振的以外,没有发现其他问题。
我的程序的RAM使用:Program Size: data=38.2 xdata=615 code=51091
tigerman520 发表于 2014-5-19 09:28
是不是看门狗复位了。
不会 我都还没放狗!以前做个项目时也出现过! 当这个My_RunData.RunNowNum=0;也会复位!不知为何? 以前与时不用结构体?没出现这么多的事来!难道和这个有关系? 没遇到过,你再多测试一下,屏蔽代码什么的,另外可以引串口到电脑上看打印信息。我用过STC12C5A08AD和STC12LE4052AD,目前出货的比较多,开发过程中还没遇到这个情况。这个STC除了写程不稳定,比较挑电脑和写程器以外,其他貌似还凑合。 RunData xdata My_RunData=
{
100,
20,
0,//////无用
20,
10,
3,
3,
};
这个是结构体的初始化的?现在是只要改了这个初始化的值和现在的不一样,就会复位!重新赋值只要小于现在的值也不行,也会复位!
这是为什么?我这样用法不对还是?
IDATA 0021H 0001H UNIT ?STACK
堆栈也没溢出! 木有遇到过的大神?
把这个选上试试 wenhenshi 发表于 2014-5-26 17:20
把这个选上试试
谢谢 !试试看啊 ! tanguicaicai 发表于 2014-5-27 09:06
谢谢 !试试看啊 !
楼主是做产品开发还是做做实验啊?
要是做产品开发的话还是建议你不要用STC的单片机了,选个能在线调试的,比如STM8,比这个资源多,还便宜。 叶大鹏 发表于 2014-5-27 09:12
楼主是做产品开发还是做做实验啊?
要是做产品开发的话还是建议你不要用STC的单片机了,选个能在线调试的 ...
准备换了!STM8要用外部时钟的话抗干扰也不行? tanguicaicai 发表于 2014-5-27 16:43
准备换了!STM8要用外部时钟的话抗干扰也不行?
不管再这么说ST也是国际大厂,比STC做的肯定要好。其实要是对成本不是十分的敏感可以选择STM32F0系列的。
页:
[1]