单片机运算问题,同样的程序,同样的芯片,结果不一样
本帖最后由 泡泡鱼lu 于 2024-5-6 20:09 编辑{:lol:} 玩了十几年单片机,第一次见这样怪的问题。芯片型号CX32L003,程序是很简单的乘除法。一样型号的芯片,居然结果不一样。开始是用仿真器充的程序,后面换脱机烧写,还是不一样的结果。 本帖最后由 泡泡鱼lu 于 2024-5-6 20:08 编辑
真的好怪{:cry:} 都益出来,结果不重要吗 楼主来搞笑的,这低级错误,,, gyzzg2030 发表于 2024-5-6 20:15
楼主来搞笑的,这低级错误,,,
(引用自4楼)
{:lol:} 那里有问题,请指教 泡泡鱼lu 发表于 2024-5-6 20:24
那里有问题,请指教
(引用自5楼)
串口波特率偏差较大。。。。 wye11083 发表于 2024-5-6 20:29
串口波特率偏差较大。。。。
(引用自6楼)
板子上有数码管,直接用数码管显示的 {:mad:} u8 换成u16 还是一样 a和b转为u16再计算 泡泡鱼lu 发表于 2024-5-6 20:30
板子上有数码管,直接用数码管显示的
(引用自7楼)
数码管坏了?{:lol:} gyzzg2030 发表于 2024-5-6 20:32
a和b转为u16再计算
(引用自9楼)
{:sweat:} 这个试过啦,不行 gyzzg2030 发表于 2024-5-6 20:32
a和b转为u16再计算
(引用自9楼)
不需要转。32位机总是扩展到32位再做乘除。所以只可能是外设错了{:lol:}
还有一种可能,超频了200%,有时候会出现奇怪的结果。
最后一种可能,芯片乘法器坏了。。 {:lol:}还是说这个芯片比较特殊,内部有什么坏了,导致不一样的结果 display(0)试试,看是不是显示为8{:titter:} pspice 发表于 2024-5-6 20:49
display(0)试试,看是不是显示为8
(引用自14楼)
显示是正常的{:smile:} 本帖最后由 SUPER_CRJ 于 2024-5-6 21:17 编辑
把static去掉试试?看样子确实简单。不应该的 SUPER_CRJ 发表于 2024-5-6 21:15
把static去掉
(引用自16楼)
试过了,优化等级也试过了 {:lol:}不知道视频怎么上传,来几个视频看看大家就知道怪了 本帖最后由 boyiee 于 2024-5-6 21:39 编辑
看看是不是static后被其他程序改了。 或者DISPLAY函数有问题。 计算结果50是正确的。直接给dat赋值50,看看输出结果。 如果有问题的输出58的话,大概率是数码管有问题。如果有问题输出50,那就真是计算有问题。 看一下硬件仿真的data结果是50吧? 若数码管是用74164,74595驱动的吧, display代码贴出来看看有没有没BUG,电路图也可以发上来,看A硬件本身有没有问题。
你用CX32,难怪你算错{:lol:} wanggoals 发表于 2024-5-6 22:03
你用CX32,难怪你算错
(引用自22楼)
大佬,有什么玄机? 回复各位前辈,首先硬件是好的,显示函数也是正常的,这些都已经排除过了 SUPER_CRJ 发表于 2024-5-6 21:15
把static去掉试试?看样子确实简单。不应该的
(引用自16楼)
也试过了,不行 看汇编。 你们大佬把lz高的更加晕菜了
pcb材质和芯片封装材料都要考虑进去了 我敢肯定,楼主那儿用的是核电,我这边用的是水电,就没有出过问题。 每次运行都受宇宙射线影响 一共只有两个板子,楼主又没办法把两个mcu交换,或者把不对的mcu重新换一个是不是还是不对,
你们就在这瞎起哄。。。这是科学精神吗?就像那个一群博士讨论高空滴水下来把人脑袋砸穿一样😁 不要重新编译,直接烧写同一个hex 如果是我,1)把 static 去掉,因为带static 函数不可重入;2)不使用 display 来验证 dat 的值,使用串口输出,或者简单点,如果 dat 值是 50 拉高管脚 A,否则拉高管脚 B ; 哈哈,这种问题最有意思了,坐等结果{:lol:} 1a2b3c 发表于 2024-5-7 09:05
一共只有两个板子,楼主又没办法把两个mcu交换,或者把不对的mcu重新换一个是不是还是不对,
你们就在这瞎 ...
(引用自30楼)
换过啦,有问题的芯片还是有问题 knight_sh 发表于 2024-5-7 09:24
如果是我,1)把 static 去掉,因为带static 函数不可重入;2)不使用 display 来验证 dat 的值,使用串口 ...
(引用自32楼)
想法不错,一会试下 cocal_li 发表于 2024-5-7 09:07
不要重新编译,直接烧写同一个hex
(引用自31楼)
用脱机烧写试过了,不行 泡泡鱼lu 发表于 2024-5-7 09:36
换过啦,有问题的芯片还是有问题
(引用自34楼)
有问题的芯片还是有问题这就是答案了 先把U8 换成 U16然后再把 除255 改成 >>8 有串口吗,或者调试,看两个板子,计算后的dat值分别是多少。 这个代码压根就不用MCU运算,编译器都能优化掉,直接出结果了,所以是display的问题。 问题还是得深究,万一不是个例就惨了,这种坏法还没碰到过 kinoko 发表于 2024-5-7 10:16
这个代码压根就不用MCU运算,编译器都能优化掉,直接出结果了,所以是display的问题。 ...
(引用自40楼)
Display没有问题,已经100%确定芯片问题 泡泡鱼lu 发表于 2024-5-7 09:36
换过啦,有问题的芯片还是有问题
(引用自34楼)
那就扔掉了完事了呗,还拿在手上折腾个啥,这点价格就该这样的芯片良品率呗😏 现在基本确定是芯片的问题了,但是做产品,这样的问题太难发现了,产品也能用,但计算数据会不一样,这种问题找起来好头疼。 1a2b3c 发表于 2024-5-7 10:40
那就扔掉了完事了呗,还拿在手上折腾个啥,这点价格就该这样的芯片良品率呗😏 ...
(引用自43楼)
做产品,已经批量两三年的产品,最近出现这种问题。如果是玩玩的那也无所谓 让人头疼的是芯片要是直接不能用还好,特么也能用,要写个专门测试程序 不可能两片芯片都有问题,不行寄给我,我来试试。 你这个程序单片机根本就不算,编译器直接给算好了,直接就是display(50) SUPER_CRJ 发表于 2024-5-7 11:48
不可能两片芯片都有问题,不行寄给我,我来试试。
(引用自47楼)
给个地址 leafstamen 发表于 2024-5-7 11:59
你这个程序单片机根本就不算,编译器直接给算好了,直接就是display(50)
(引用自48楼)
是我没说明白吗,两个芯片,同样的程序,用脱机器烧写的程序,结果居然不一样,如果直接displaye(50),那应该结果是一样的呀? 泡泡鱼lu 发表于 2024-5-7 12:29
是我没说明白吗,两个芯片,同样的程序,用脱机器烧写的程序,结果居然不一样,如果直接displaye(50),那 ...
(引用自50楼)
所以问题出在display之后的步骤上,比如那个8中间的那个横杠和另一段连了导致被带出来了等等。 leafstamen 发表于 2024-5-7 13:43
所以问题出在display之后的步骤上,比如那个8中间的那个横杠和另一段连了导致被带出来了等等。 ...
(引用自51楼)
{:sweat:} 显示没错的,100%确定就是芯片问题了。if(dat == 50) display(1); else display(2); 已经把程序改成这样了,一个芯片显示是1,另外一个芯片显示是2,所以已经排除display这个问题啦,这个排除方法参考32楼这位前辈 泡泡鱼lu 发表于 2024-5-7 12:28
给个地址
(引用自49楼)
加我微信:TC4300
微信上我发你地址。
收到之后我来研究下。 楼主换了:全局变量测试。
同样的代码换个芯片也可以了。
大概率确实是之前的芯片出问题了。 楼主,我用这个芯片,几天后,会重启100台, 就有那么几台重启
在不关systick 的时候,重启很明显
关了就几台重启.
条件:低功耗产品,会睡眠会唤醒
不知道你遇到过没>
100%是数码管缺画。 sweet_136 发表于 2024-5-7 17:30
楼主,我用这个芯片,几天后,会重启100台, 就有那么几台重启
在不关systick 的时候,重启很明显
(引用自55楼)
没试过,但这个芯片确实是很多坑 看来那芯片有问题啊 这个芯片的adc部分我用了感觉效果不错,比灵动之类的好很多,和stm32差不多
页:
[1]