浚凡小子 发表于 2021-7-24 10:33

关于低功耗问题(用C编写和用汇编有区别吗)

最近我用一国产单片机来驱动三位数码管显示(有用的是阻容降压供电方式),遇到功耗过高的问题。造成数码管显示闪动,整机以上电工作几秒就复位了。(声明一下,相同的硬件,之前用的台系和进口的单片机没有这个问题)。我是用C写的代码跟之前台系和进口的基本一样(除相关寄存器设置不同)。此芯片提供内部16M高频晶振。我降低了相关频率来工作(因为仿真器上面看不出问题,只有一次一次的试整机,结果都一样)。最后没办法,我改用汇编来写,相关的配置跟C一样,结果就没有这个问题了。所以觉得很奇怪,特发一文想跟大家一起讨论一下,C代码 和汇编代码对功耗真有很大区别吗?

资深技术 发表于 2021-7-24 20:56

C代码和汇编代码对功耗没有区别。
但是有个运行效率问题,因为这个问题有可能在扫描显示方式下出现数码管显示时间不同,这会造成功耗增大。因没实际测试,只是猜测供参考。

coody 发表于 2021-7-25 10:00

对于MCU全速运行,C代码和汇编代码对功耗没有区别。
不同厂家的MCU工作电流不同,你测下电流就知道了。
阻容降压,等于是恒流供电,所以电流一定要留点余量。比如工作电流最大是20mA,则恒流值最少为25mA或以上。

chineseboyzxy 发表于 2021-7-25 13:54

一个汇编写的电子钟程序,4位数码管,把显示程序放主程序里循环和放中断里显示,电流差了好几个毫安,在中断里显示电流大。什么原因?难道就因为开了一个定时器就多了几毫安?

henangongda123 发表于 2021-7-25 18:38

chineseboyzxy 发表于 2021-7-25 13:54
一个汇编写的电子钟程序,4位数码管,把显示程序放主程序里循环和放中断里显示,电流差了好几个毫安,在中 ...

差不多,开定时器、开中断,都增加单片机负担

henangongda123 发表于 2021-7-25 18:45

C写和汇编写,区别就只是C用的是软件去汇编,而汇编是用人脑自己去汇编,现在的编译器效率都很高,感觉还没到你说的会引起功耗变化巨大的程度,个人感觉还是你C程序写的有问题。

oufuqiang 发表于 2021-7-25 22:39

你的显示扫描程序的停留时间长短会显著影响整体功耗的。所以你要看看每个数码管被点亮的时间。可以适当缩短一点降低功耗

jyrpxj 发表于 2021-7-28 17:17

测一下输出波形,肯定不一样。

单模先声 发表于 2021-8-10 08:00

电路的漏洞被硬生生地说成了单片机的问题,请问楼主是哪个研究所的所长啊?被世人遗忘的顶级天才?
页: [1]
查看完整版本: 关于低功耗问题(用C编写和用汇编有区别吗)