fengshen1234 发表于 2023-2-8 14:57:09

关于使用STC51单片机xdata后程序卡死

使用STC51单片机xdata后程序运行一会儿卡死,乱动作!看门狗都不起作用! 请问各位大神怎么处理?

fengshen1234 发表于 2023-2-8 15:20:57

有人遇到过吗

电子DIY小家 发表于 2023-2-8 15:33:56

并没有遇到过,像8h试验箱里后面几个大的案例变量都在xdata里,也没见出问题呀。建议楼主检查下代码哪里冲突了或者没写好,使用XDAT的数据,定义的时候一定要初始化!一定要初始化!一定要初始化!

AI-32位8051 发表于 2023-2-8 15:39:51

我们的开天斧例程包里面的例子,基本上都是设置xdata作为默认数据存储空间。您可以试试看




fengshen1234 发表于 2023-2-8 16:15:46

STCAI-32位8051 发表于 2023-2-8 15:39
我们的开天斧例程包里面的例子,基本上都是设置xdata作为默认数据存储空间。您可以试试看




谢谢

fengshen1234 发表于 2023-2-8 16:16:31

电子DIY小家 发表于 2023-2-8 15:33
并没有遇到过,像8h试验箱里后面几个大的案例变量都在xdata里,也没见出问题呀。建议楼主检查下代码哪里冲 ...

为何一定需要初始化呢 ,这个问题一直不清楚,望赐教!

电子DIY小家 发表于 2023-2-8 16:27:00

fengshen1234 发表于 2023-2-8 16:16
为何一定需要初始化呢 ,这个问题一直不清楚,望赐教!

总的来说就是 u8 xdata parm;这样定义的这个parm变量的初始值不一定为0,这点和data区域的变量有所区别。如果在写一段如下的程序就容易出问题
if( parm ==1 )
{
parm = 0;
执行巴拉巴拉;
}
if( parm == 0 )
{
parm = 1;
执行巴拉巴拉;
}

要是这种情况代码里的parm变量初始值不为0就那啥了~

fengshen1234 发表于 2023-2-8 16:29:47

电子DIY小家 发表于 2023-2-8 16:27
总的来说就是 u8 xdata parm;这样定义的这个parm变量的初始值不一定为0,这点和data区域的变量有所区别 ...

好的非常感谢

神农鼎 发表于 2023-2-8 16:51:24

现在STC都是强烈建议用户使用xdata===容量大啊,   idata/data 留给堆栈用===用户不要用

fengshen1234 发表于 2023-2-8 17:03:55

神农鼎 发表于 2023-2-8 16:51
现在STC都是强烈建议用户使用xdata===容量大啊,   idata/data 留给堆栈用===用户不要用 ...

所有变量存到xdata不会出问题吗,比如给你不正常程序,跑飞啊,我用的STC12C5A60S2
页: [1] 2
查看完整版本: 关于使用STC51单片机xdata后程序卡死