当前位置: 首页 > news >正文

8位单片机尽量不要使用%mod取模

结论:因为会耗费大量时间除几十次
也少用int 16位变量,能用就用char 8位

今天在调板子的时候,发现定时器卡住了,特别慢,排查后是我用了这一行常用代码来把125us定时器计时1秒

i=(i+1)%8000;

每次暂停都在这个函数,定时器的时序也乱了

原因:

原因是因为大部分8位单片机没有硬件除法器
取模mod只能靠二进制恢复除法,多次除法长除法实现
一次需要50-100条指令,相当于几十us,在定时器里是灾难级的

解决方法:

  1. if (i > 8000) i = 0;代替,规避了多次除法的操作,只需要对比一下
  2. i = i % 8,2的次方倍,编译器能直接优化成移位操作

以及少用int,多用char
因为8位单片机一次处理数据一般8位,意味着16位的运算要拆成2次,3次的预算

性能对比:

(AI估算,实际会快一点)

操作数据类型典型周期数时间@16MHz相对耗时
i % 8(2的幂)char 8位10.25μs🟢 极快
i % 3char 8位28671.5μs🔴 极慢
j % 8(2的幂)int 16位30.75μs🟢 极快
j % 3int 16位28671.5μs🔴 极慢
j % 8000int 16位571142.75μs🔴 极慢
if(++j>=8000)j=0int 16位51.25μs🟢 极快

算法源码:

这是单片机官方的底层mod源码,可以学习参考一下

unsignedint__lwmod(unsignedintdivisor,unsignedintdividend){unsignedcharcounter;if(divisor!=0){counter=1;while((divisor&0x8000)==0){divisor<<=1;counter++;}do{if(divisor<=dividend)dividend-=divisor;divisor>>=1;}while(--counter!=0);}returndividend;}
http://www.cnnetsun.cn/news/2789510.html

相关文章:

  • 嵌入式系统启动:OneNand驱动与x-loader引导加载器深度解析
  • 从三星W799看国产手机技术整合与供应链差距
  • SMD封装尺寸全解析:从公制英制编码到PCB设计实战避坑指南
  • VMware解锁工具:在Windows/Linux上运行macOS虚拟机的完整解决方案
  • 告别手动复制粘贴!百度网盘批量转存工具让你的效率提升10倍
  • ARM SWI软件中断:从指令到系统调用的底层实现与调试
  • 30分钟快速1:1 复刻企业级 DevOps 架构实战(一)环境搭建
  • 芯片设计里的“堵车”与“磨损”:聊聊IR压降和电迁移(EM)那些事儿
  • 【CSDN AI数字营销服务深度解密】:站内广告投放是否包含?3大隐藏能力92%运营人尚未激活
  • Amphenol ICC 17-100674线束组件解析:工业设备连接可靠性的关键环节
  • GPT-5.5 对比 Gemini 3.5 Flash:五个维度实测,谁更适合你的场景
  • 2026年海外市场退出危机的懂法律公关处理
  • Windows界面定制完全攻略:ExplorerPatcher深度解析与实战应用
  • 暗黑破坏神2终极现代化补丁:D2DX让你的经典游戏焕然新生
  • ABAP CDS Annotations 参考指南,从数据模型到 Fiori Elements 的工程化用法
  • Windows内存优化终极指南:3个简单步骤使用Mem Reduct提升系统性能
  • 5分钟搞定!Markdown Viewer浏览器插件:让技术文档阅读体验飙升的终极解决方案
  • HarmonyOS 6学习:NFC服务中IsoDep连接失败的排查与解决——从参数匹配到多SDK协同的完整指南
  • 数据平台押注:为什么金融人工智能项目停滞,以及赢家如何扩展
  • 如何彻底清理Windows系统:5步高效卸载Microsoft Edge的完整指南
  • 开源项目测试策略与质量保障:构建可靠的软件交付体系
  • VideoDownloadHelper:3分钟掌握Chrome视频下载助手终极指南
  • 移动开发跨平台方案之RN/Flutter/KMP/CMP
  • Kubernetes(K8s)重要知识点复习与记录
  • 视频去水印软件推荐:2026免费安全工具盘点|电脑手机端怎么选?
  • 落地蓉城蓄力飞天:星际开发落户成都
  • 用 myKG 构建 LLM Wiki
  • Markn:重新定义你的Markdown创作工作流,让预览与编辑无缝融合
  • xss-labs-master通关记录(1-10)
  • PCB元件库与封装库规范设计:从原理到实践