发新帖本帖赏金 5.00元(功能说明)我要提问
123下一页
返回列表
[STC单片机]

STC单片机xdata乱码问题有多少遇到过?

[复制链接]
17603|46
手机看帖
扫描二维码
随时随地手机跟帖
henangongda123|  楼主 | 2021-6-7 15:10 | 显示全部楼层 |阅读模式
一直不太喜欢STC,10几年前用的时候就BUG多多,今年被逼无奈,STM8供不了货,用了一下,感觉又碰到坑了!
写了一个幻彩灯带控制程序,因为有各种定制效果,就需要用到大的数组,由于STC8G1K08的内存跟51一样,很小,必须要把数组定义到xdata区,这个操作没问题,可以理解,问题是我在调用数组,展示幻彩效果的时候,总是遇到随机性的乱码导致灯带有闪烁点。。。很无语,怎么调试都不行。
网上查了一下,还不止我一个人遇到这样的问题,不知道大家有没有遇到?
2.png
1.png

使用特权

评论回复

相关帖子

henangongda123|  楼主 | 2021-6-7 15:14 | 显示全部楼层
今天专门找了一片STM8S103移植程序测试,发现STM8S003就没有这个问题,STM8S003的RAM区1K字节,数组定义的时候可以不用管RAM够不够用,而且同样的效果代码,运行起来就没有随机的闪点!
3.png

使用特权

评论回复
ayb_ice| | 2021-6-7 15:47 | 显示全部楼层
多半是程序自身问题,XDATA访问效率低而已,需要更多的指令来完成,在任务与中断等多处修改时要特别注意,容易出错,必要时禁止中断

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 15:48 | 显示全部楼层
STC8G1K08的RAM只有256字节,而且要给全局变量、临时变量使用,数组只能定义到xdata区
4.png

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 15:49 | 显示全部楼层
ayb_ice 发表于 2021-6-7 15:47
多半是程序自身问题,XDATA访问效率低而已,需要更多的指令来完成,在任务与中断等多处修改时要特别 ...

你意思是中断会影响xdata访问?我只有一个定时器中断,几十ms中断一次

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 15:55 | 显示全部楼层
ayb_ice 发表于 2021-6-7 15:47
多半是程序自身问题,XDATA访问效率低而已,需要更多的指令来完成,在任务与中断等多处修改时要特别 ...

厉害了,我关掉所有中断后还真没有这个问题了。。。

使用特权

评论回复
ayb_ice| | 2021-6-7 15:55 | 显示全部楼层
henangongda123 发表于 2021-6-7 15:49
你意思是中断会影响xdata访问?我只有一个定时器中断,几十ms中断一次

中断如果不修改他,当然是没问题的

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 15:57 | 显示全部楼层
ayb_ice 发表于 2021-6-7 15:55
中断如果不修改他,当然是没问题的

中断没有修改它,定时中断检测按键的,跟数组没有关系,但是关掉总中断后还确实没有这个不良问题了!

使用特权

评论回复
ayb_ice| | 2021-6-7 16:01 | 显示全部楼层
henangongda123 发表于 2021-6-7 15:55
厉害了,我关掉所有中断后还真没有这个问题了。。。

XDATA区间访问效率是最低的,也是最容易出错的,其它区间效率较高,出错的概率是最低的,但不表示不会出错,
这就是临界代码的概念,要想各种方法来处理这些临时代码,关中断是常用方法,设标志位也是常用方法

使用特权

评论回复
ayb_ice| | 2021-6-7 16:03 | 显示全部楼层
henangongda123 发表于 2021-6-7 15:57
中断没有修改它,定时中断检测按键的,跟数组没有关系,但是关掉总中断后还确实没有这个不良问题了! ...

可能你的时序要求严,关中断的话,不会被打断,时序符合要求

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 16:09 | 显示全部楼层
ayb_ice 发表于 2021-6-7 16:03
可能你的时序要求严,关中断的话,不会被打断,时序符合要求

只是定义一个数组,不断的修改、调用数组而已,没什么时序要求

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 16:09 | 显示全部楼层
//全局变量
uchar bdata Send_Byte;        //定义可操作位的一字节发送数据
sbit Bit0 = Send_Byte^0;            //被发送的数据各位定义
sbit Bit1 = Send_Byte^1;
sbit Bit2 = Send_Byte^2;
sbit Bit3 = Send_Byte^3;
sbit Bit4 = Send_Byte^4;
sbit Bit5 = Send_Byte^5;
sbit Bit6 = Send_Byte^6;
sbit Bit7 = Send_Byte^7;
uchar R_Data=0;               //定义每个像素点的红光灰度值(0-255)
uchar G_Data=0;               //定义每个像素点的绿光灰度值(0-255)
uchar B_Data=0;               //定义每个像素点的蓝光灰度值(0-255)
uchar LED_Pixel=40;           //定义灯带要控制的像素点数
uchar Flash_Mode=1;           //定义灯带闪烁模式
uchar Flash_Mode_Old=0;       //定义程序运行时闪烁模式变量
uchar Flash_Color=0;          //定义闪烁颜色(红0,蓝1,绿2,琥珀3,紫4,白5)
uchar Flash_Speed=0;          //定义闪烁速度
uint Speed_Time=0;            //定义闪烁间隔时间值
uchar T0_Number1=0;           //定义、保存T0定时器辅助定时计数1(用于按键短按扫描)
uchar T0_Number2=0;           //定义、保存T0定时器辅助定时计数2(用于按键长按扫描)
pdata uchar Display_Data[120];//定义用于存储每个像素点效果数据的数组(LED_Pixel*3)


使用特权

评论回复
评论
一叶倾城wwq 2021-8-6 10:23 回复TA
我的注释也是这样对齐的,嘿嘿 
henangongda123|  楼主 | 2021-6-7 16:11 | 显示全部楼层
我只是定义了一个xdata数组,程序中不断修改数组的内容,实现各种效果,然后定时中断去检测按键,改变效果内容,定时中断居然会影响到xdata访问,奇了

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 16:23 | 显示全部楼层
ayb_ice 发表于 2021-6-7 16:03
可能你的时序要求严,关中断的话,不会被打断,时序符合要求

我特意去开了一下STM8的定时中断,没有这种不良情况

使用特权

评论回复
ayb_ice| | 2021-6-7 16:31 | 显示全部楼层
henangongda123 发表于 2021-6-7 16:23
我特意去开了一下STM8的定时中断,没有这种不良情况

千万不要这么认为,在这里没有问题,就代表程序没有问题,
如果没有中断,一般是可以这么认为的,因为程序不会被打断,但有中断情况就很杂了,这就涉及临界代码了,

同一个临界代码,不同的内核执行,有的需要关中断,有的不需要关中断

使用特权

评论回复

打赏榜单

henangongda123 打赏了 5.00 元 2021-06-08
理由:说的非常好,很有用,帮了大忙!

henangongda123|  楼主 | 2021-6-7 16:38 | 显示全部楼层
ayb_ice 发表于 2021-6-7 16:31
千万不要这么认为,在这里没有问题,就代表程序没有问题,
如果没有中断,一般是可以这么认为的,因为程 ...

归根结底还是STC的xdata有问题,xdata使用的时候不能开中断,这谁能接受得了?没有对比就没有伤害,BOSS决定了,准备花一倍多的价钱用STM8,换掉STC。。。这STC扩展的1K xdata有还毛用!

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 16:53 | 显示全部楼层
ayb_ice 发表于 2021-6-7 16:31
千万不要这么认为,在这里没有问题,就代表程序没有问题,
如果没有中断,一般是可以这么认为的,因为程 ...

貌似不是xdata问题,是时序被中断打乱问题。。。

使用特权

评论回复
ayb_ice| | 2021-6-7 16:54 | 显示全部楼层
henangongda123 发表于 2021-6-7 16:53
貌似不是xdata问题,是时序被中断打乱问题。。。

你不是说没时序吗

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 16:55 | 显示全部楼层
可以结贴了,不是STC xdata问题,是定时中断干扰了时序问题,误会了

使用特权

评论回复
henangongda123|  楼主 | 2021-6-7 17:12 | 显示全部楼层
ayb_ice 发表于 2021-6-7 16:54
你不是说没时序吗

忘记了,单片机端口要把数组内容发送出去,这个过程中如果有中断进来就会干扰出错,大意了,丢人啊

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

2116

帖子

19

粉丝