泡泡鱼lu 发表于 2024-5-6 20:04:29

单片机运算问题,同样的程序,同样的芯片,结果不一样

本帖最后由 泡泡鱼lu 于 2024-5-6 20:09 编辑

{:lol:} 玩了十几年单片机,第一次见这样怪的问题。芯片型号CX32L003,程序是很简单的乘除法。一样型号的芯片,居然结果不一样。开始是用仿真器充的程序,后面换脱机烧写,还是不一样的结果。

泡泡鱼lu 发表于 2024-5-6 20:06:21

本帖最后由 泡泡鱼lu 于 2024-5-6 20:08 编辑

真的好怪{:cry:}

smartmeter 发表于 2024-5-6 20:13:55

都益出来,结果不重要吗

gyzzg2030 发表于 2024-5-6 20:15:35

楼主来搞笑的,这低级错误,,,

泡泡鱼lu 发表于 2024-5-6 20:24:10

gyzzg2030 发表于 2024-5-6 20:15
楼主来搞笑的,这低级错误,,,
(引用自4楼)

{:lol:} 那里有问题,请指教

wye11083 发表于 2024-5-6 20:29:14

泡泡鱼lu 发表于 2024-5-6 20:24
那里有问题,请指教
(引用自5楼)

串口波特率偏差较大。。。。

泡泡鱼lu 发表于 2024-5-6 20:30:02

wye11083 发表于 2024-5-6 20:29
串口波特率偏差较大。。。。
(引用自6楼)

板子上有数码管,直接用数码管显示的

泡泡鱼lu 发表于 2024-5-6 20:30:47

{:mad:} u8 换成u16 还是一样

gyzzg2030 发表于 2024-5-6 20:32:15

a和b转为u16再计算

wye11083 发表于 2024-5-6 20:32:52

泡泡鱼lu 发表于 2024-5-6 20:30
板子上有数码管,直接用数码管显示的
(引用自7楼)

数码管坏了?{:lol:}

泡泡鱼lu 发表于 2024-5-6 20:33:32

gyzzg2030 发表于 2024-5-6 20:32
a和b转为u16再计算
(引用自9楼)

{:sweat:} 这个试过啦,不行

wye11083 发表于 2024-5-6 20:34:36

gyzzg2030 发表于 2024-5-6 20:32
a和b转为u16再计算
(引用自9楼)

不需要转。32位机总是扩展到32位再做乘除。所以只可能是外设错了{:lol:}

还有一种可能,超频了200%,有时候会出现奇怪的结果。

最后一种可能,芯片乘法器坏了。。

泡泡鱼lu 发表于 2024-5-6 20:34:38

{:lol:}还是说这个芯片比较特殊,内部有什么坏了,导致不一样的结果

pspice 发表于 2024-5-6 20:49:01

display(0)试试,看是不是显示为8{:titter:}

泡泡鱼lu 发表于 2024-5-6 20:55:37

pspice 发表于 2024-5-6 20:49
display(0)试试,看是不是显示为8
(引用自14楼)

显示是正常的{:smile:}

SUPER_CRJ 发表于 2024-5-6 21:15:16

本帖最后由 SUPER_CRJ 于 2024-5-6 21:17 编辑

把static去掉试试?看样子确实简单。不应该的

泡泡鱼lu 发表于 2024-5-6 21:17:43

SUPER_CRJ 发表于 2024-5-6 21:15
把static去掉
(引用自16楼)

试过了,优化等级也试过了

泡泡鱼lu 发表于 2024-5-6 21:18:15

{:lol:}不知道视频怎么上传,来几个视频看看大家就知道怪了

boyiee 发表于 2024-5-6 21:31:52

本帖最后由 boyiee 于 2024-5-6 21:39 编辑

看看是不是static后被其他程序改了。 或者DISPLAY函数有问题。

dellric 发表于 2024-5-6 21:32:51

计算结果50是正确的。直接给dat赋值50,看看输出结果。 如果有问题的输出58的话,大概率是数码管有问题。如果有问题输出50,那就真是计算有问题。

foxpro2005 发表于 2024-5-6 21:56:18

看一下硬件仿真的data结果是50吧? 若数码管是用74164,74595驱动的吧, display代码贴出来看看有没有没BUG,电路图也可以发上来,看A硬件本身有没有问题。

wanggoals 发表于 2024-5-6 22:03:36

你用CX32,难怪你算错{:lol:}

PPS 发表于 2024-5-6 22:12:49

wanggoals 发表于 2024-5-6 22:03
你用CX32,难怪你算错
(引用自22楼)

大佬,有什么玄机?

泡泡鱼lu 发表于 2024-5-6 22:19:24

回复各位前辈,首先硬件是好的,显示函数也是正常的,这些都已经排除过了

泡泡鱼lu 发表于 2024-5-6 22:20:07

SUPER_CRJ 发表于 2024-5-6 21:15
把static去掉试试?看样子确实简单。不应该的
(引用自16楼)

也试过了,不行

tang_qianfeng 发表于 2024-5-7 07:52:40

看汇编。

lb0857 发表于 2024-5-7 08:14:30

你们大佬把lz高的更加晕菜了
pcb材质和芯片封装材料都要考虑进去了

lyl1070 发表于 2024-5-7 08:38:37

我敢肯定,楼主那儿用的是核电,我这边用的是水电,就没有出过问题。

mypear 发表于 2024-5-7 08:44:10

每次运行都受宇宙射线影响

1a2b3c 发表于 2024-5-7 09:05:22

一共只有两个板子,楼主又没办法把两个mcu交换,或者把不对的mcu重新换一个是不是还是不对,
你们就在这瞎起哄。。。这是科学精神吗?就像那个一群博士讨论高空滴水下来把人脑袋砸穿一样😁

cocal_li 发表于 2024-5-7 09:07:24

不要重新编译,直接烧写同一个hex

knight_sh 发表于 2024-5-7 09:24:39

如果是我,1)把 static 去掉,因为带static 函数不可重入;2)不使用 display 来验证 dat 的值,使用串口输出,或者简单点,如果 dat 值是 50 拉高管脚 A,否则拉高管脚 B ;

fcm32 发表于 2024-5-7 09:35:11

哈哈,这种问题最有意思了,坐等结果{:lol:}

泡泡鱼lu 发表于 2024-5-7 09:36:16

1a2b3c 发表于 2024-5-7 09:05
一共只有两个板子,楼主又没办法把两个mcu交换,或者把不对的mcu重新换一个是不是还是不对,
你们就在这瞎 ...
(引用自30楼)

换过啦,有问题的芯片还是有问题

泡泡鱼lu 发表于 2024-5-7 09:39:54

knight_sh 发表于 2024-5-7 09:24
如果是我,1)把 static 去掉,因为带static 函数不可重入;2)不使用 display 来验证 dat 的值,使用串口 ...
(引用自32楼)

想法不错,一会试下

泡泡鱼lu 发表于 2024-5-7 09:52:15

cocal_li 发表于 2024-5-7 09:07
不要重新编译,直接烧写同一个hex
(引用自31楼)

用脱机烧写试过了,不行

lb0857 发表于 2024-5-7 09:54:02

泡泡鱼lu 发表于 2024-5-7 09:36
换过啦,有问题的芯片还是有问题
(引用自34楼)

有问题的芯片还是有问题这就是答案了

ackyee 发表于 2024-5-7 10:13:46

先把U8 换成 U16然后再把 除255 改成 >>8

yyts 发表于 2024-5-7 10:15:25

有串口吗,或者调试,看两个板子,计算后的dat值分别是多少。

kinoko 发表于 2024-5-7 10:16:29

这个代码压根就不用MCU运算,编译器都能优化掉,直接出结果了,所以是display的问题。

初音之恋 发表于 2024-5-7 10:17:18

问题还是得深究,万一不是个例就惨了,这种坏法还没碰到过

泡泡鱼lu 发表于 2024-5-7 10:39:03

kinoko 发表于 2024-5-7 10:16
这个代码压根就不用MCU运算,编译器都能优化掉,直接出结果了,所以是display的问题。 ...
(引用自40楼)

Display没有问题,已经100%确定芯片问题

1a2b3c 发表于 2024-5-7 10:40:45

泡泡鱼lu 发表于 2024-5-7 09:36
换过啦,有问题的芯片还是有问题
(引用自34楼)

那就扔掉了完事了呗,还拿在手上折腾个啥,这点价格就该这样的芯片良品率呗😏

泡泡鱼lu 发表于 2024-5-7 10:42:26

现在基本确定是芯片的问题了,但是做产品,这样的问题太难发现了,产品也能用,但计算数据会不一样,这种问题找起来好头疼。

泡泡鱼lu 发表于 2024-5-7 10:43:16

1a2b3c 发表于 2024-5-7 10:40
那就扔掉了完事了呗,还拿在手上折腾个啥,这点价格就该这样的芯片良品率呗😏 ...
(引用自43楼)

做产品,已经批量两三年的产品,最近出现这种问题。如果是玩玩的那也无所谓

泡泡鱼lu 发表于 2024-5-7 10:45:23

让人头疼的是芯片要是直接不能用还好,特么也能用,要写个专门测试程序

SUPER_CRJ 发表于 2024-5-7 11:48:47

不可能两片芯片都有问题,不行寄给我,我来试试。

leafstamen 发表于 2024-5-7 11:59:47

你这个程序单片机根本就不算,编译器直接给算好了,直接就是display(50)

泡泡鱼lu 发表于 2024-5-7 12:28:18

SUPER_CRJ 发表于 2024-5-7 11:48
不可能两片芯片都有问题,不行寄给我,我来试试。
(引用自47楼)

给个地址

泡泡鱼lu 发表于 2024-5-7 12:29:56

leafstamen 发表于 2024-5-7 11:59
你这个程序单片机根本就不算,编译器直接给算好了,直接就是display(50)
(引用自48楼)

是我没说明白吗,两个芯片,同样的程序,用脱机器烧写的程序,结果居然不一样,如果直接displaye(50),那应该结果是一样的呀?

leafstamen 发表于 2024-5-7 13:43:26

泡泡鱼lu 发表于 2024-5-7 12:29
是我没说明白吗,两个芯片,同样的程序,用脱机器烧写的程序,结果居然不一样,如果直接displaye(50),那 ...
(引用自50楼)

所以问题出在display之后的步骤上,比如那个8中间的那个横杠和另一段连了导致被带出来了等等。

泡泡鱼lu 发表于 2024-5-7 14:11:22

leafstamen 发表于 2024-5-7 13:43
所以问题出在display之后的步骤上,比如那个8中间的那个横杠和另一段连了导致被带出来了等等。 ...
(引用自51楼)

{:sweat:} 显示没错的,100%确定就是芯片问题了。if(dat == 50) display(1); else display(2);   已经把程序改成这样了,一个芯片显示是1,另外一个芯片显示是2,所以已经排除display这个问题啦,这个排除方法参考32楼这位前辈

SUPER_CRJ 发表于 2024-5-7 14:14:22

泡泡鱼lu 发表于 2024-5-7 12:28
给个地址
(引用自49楼)

加我微信:TC4300
微信上我发你地址。
收到之后我来研究下。

SUPER_CRJ 发表于 2024-5-7 15:00:32

楼主换了:全局变量测试。
同样的代码换个芯片也可以了。
大概率确实是之前的芯片出问题了。

sweet_136 发表于 2024-5-7 17:30:29

楼主,我用这个芯片,几天后,会重启100台, 就有那么几台重启

在不关systick 的时候,重启很明显
关了就几台重启.

条件:低功耗产品,会睡眠会唤醒

不知道你遇到过没>

newkey 发表于 2024-5-7 17:33:35

100%是数码管缺画。

泡泡鱼lu 发表于 2024-5-7 19:19:23

sweet_136 发表于 2024-5-7 17:30
楼主,我用这个芯片,几天后,会重启100台, 就有那么几台重启

在不关systick 的时候,重启很明显

(引用自55楼)

没试过,但这个芯片确实是很多坑

tang_qianfeng 发表于 2024-5-7 20:51:34

看来那芯片有问题啊

xml2028 发表于 2024-5-8 08:44:23

这个芯片的adc部分我用了感觉效果不错,比灵动之类的好很多,和stm32差不多
页: [1]
查看完整版本: 单片机运算问题,同样的程序,同样的芯片,结果不一样