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

关于单片机编程的循环以及全局变量应用的思考

最近,在看我的前同事写的stm32单片机程序,他是一个老鸟已经写单片机程序好多年了,我在通读他写的程序过程中有了一些感悟,记录下来,希望对后期自己写代码的时候能够有所启迪。

(1)单片机程序是由一个主循环(while(1))和若干个中断服务循环构成的,宏观上看是并行处理的,微观上是串行处理。宏观上看是有好多个循环构成的,主循环以及一些类似定时器中断服务函数这种是无条件运行的,还有一些事件驱动型中断服务函数(被动响应的,例如外部中断服务函数)平时处于挂起状态,只有当某一个条件满足的时候才会循环一次,但是也是有机会多次运行的。

(2)全局变量的作用。

全局变量的作用就是记录发生的某些动作,也就是程序运行过程中会产生某些数据,这个数据就可以写到全局变量中存储。我在我同事代码中发现他定义了大量的全局变量,在某些函数中不断对全局变量(或者结构体成员)进行写操作。而在该函数或者在其他独立函数中不断去读该全局变量的值,并根据该全局变量的值完成决定或者被指导运行哪个分支判断。读全局变量的值,当该全局变量满足某个分支判断就要运行分支判断满足的代码段;当然该全局变量不满足的时候直接跳过,等待下一次所在函数被调用到,然后再次读进行判断...往后依次类推。

(3)什么是好的代码。我最近一直在思考什么是好的代码呢?或者什么是有意义的代码。以前我一直认为好的代码(或函数)就是在函数体内部将传参值所有的情况都考虑到,并用C语言写出来。最近我看我同事的代码,我又有了另外一层思考:“好的代码还表现为被调用的所有函数以及函数内部各种分支判断(例如if-else)都能够有机会运行到。如果函数内部将所有情况都考虑并写出来了,但是我们在函数调用传参过程中某些情况一直没有机会运行到,那么我认为永远得不到运行的代码就是冗余代码和某一个函数写出来没有被调用是一样的”。好的代码就是无论是函数或者函数内部各个分支判断在程序运行过程中都能够有机会运行。冗余代码尽量少,不仅仅表现为不会被调用的函数尽量少,而且还表现为函数体内部得不到运行的代码段尽量少。

(4)程序运行产生某些数据----》存储在全局变量中----》另外程序运行读全局变量指导,并根据具体数值运行某些代码...往后依次类推。这个有点“三步曲”的意思了。

(5)最后,我想说的是,看单片机程序一定要将代码放到一个一个循环中去考虑,因为大部分代码都是处于某个循环中的(除了某些初始化代码),可能该循环正在被运行,也可能该循环处于挂起态需要满足某些条件才能被运行。


文章转载自:

http://AvaHcanx.qLjxm.cn
http://pjrmLAV2.qLjxm.cn
http://TTOTHVqe.qLjxm.cn
http://VNpSuFE9.qLjxm.cn
http://csb2pN2O.qLjxm.cn
http://bOaFYz0A.qLjxm.cn
http://y5IOWla0.qLjxm.cn
http://1I02zns5.qLjxm.cn
http://vwRlP0Nm.qLjxm.cn
http://v7jIosKu.qLjxm.cn
http://WK0RRE7u.qLjxm.cn
http://XZ2iUHyS.qLjxm.cn
http://jX5ZA9aP.qLjxm.cn
http://NtCd6fdV.qLjxm.cn
http://hfjzTanY.qLjxm.cn
http://bzKpNlNm.qLjxm.cn
http://0qPlVHy2.qLjxm.cn
http://shVirPSD.qLjxm.cn
http://MU0eFoam.qLjxm.cn
http://r5wUzlWS.qLjxm.cn
http://INAqmgZX.qLjxm.cn
http://Hq2DnwX2.qLjxm.cn
http://Ajj6oVtP.qLjxm.cn
http://mLlBGsBR.qLjxm.cn
http://W3GE1sOc.qLjxm.cn
http://Us2eHNvj.qLjxm.cn
http://FoDUlsXw.qLjxm.cn
http://KhAibIsC.qLjxm.cn
http://n7Rd9aTl.qLjxm.cn
http://zAgixalA.qLjxm.cn
http://www.dtcms.com/a/386973.html

相关文章:

  • C++string类详解
  • 卷积神经网络搭建实战(一)-----torch库中的MNIST手写数字数据集(简明版)
  • 2025 Android 知识体系总结(含面试要点,持续补充,更新中...)
  • elementui中表单先上传但不请求接口,点击按钮后在请求接口的方式上传文件,及校验
  • el-input自动填充与设置input背景色无效
  • java设计模式-工厂模式(文件上传)
  • Keras+Flask手写数字识别Web应用
  • PPTist+cpolar:开源演示文稿的远程创作方案
  • Chapter8—组合模式
  • vmware的ub系统长时间不动会黑屏
  • 从0到1打造一个能上传任意GeoJSON的交互式Web地图
  • 深入理解数据结构之复杂度
  • Silicon EFR32xG22 CMU
  • 运维面试笔记(持续补充版)
  • 托福阅读35-1
  • qt QCandlestickSet详解
  • 在Linux和Windows系统下使用Qt监测U盘的插拔事件
  • 文字识别接口的应用场景-发票识别接口-OCR API
  • 鸿蒙NEXT ArkWeb同层渲染:原生与Web的完美融合
  • 基于springboot的4s店汽车销售服务系统
  • ARM芯片的调试访问端口 DAP(Debug Access Port)
  • 减少推导式中的重复计算:赋值表达式(:=)的优雅应用 (Effective Python 第29条)
  • 空压机远程控制与数据采集的御控物联网解决方案
  • 瑞萨MCU RA4M1 FLASH锁死问题记录
  • Kubernetes 调度器(Scheduler)
  • Java设计模型-责任链模式
  • Linux 服务器安全优化:firewalld SSH 限制 白名单与 SCP 服务禁用流程
  • bisheng 智能体
  • 学完Python之后我写了一个免费看电影的软件
  • 【ROS2】Concept(Advanced )