推荐一篇关于软件编程写的不错的文章
本片文章亲自操刀所写,绝非网上粘贴复制舆论大众,哗众取宠。以自己大学四年专业学习经历,和工作三年经验,有感而发,目前不能自称高手,只是小有所成,为那些在软件编程道路上迷茫的大学生们和同行业者,写一些个人感悟和想法,希望你们从中有所收获,在软件编程的道路上走的更高更远,有所成就。
我的专业是测控技术与仪器,可能很多人想软件编程应该是计算机专业才学的,我们专业属于跨学科专业,介于计算机,自动化,机械相关性的综合学科,最终的工作岗位是由自己选择的。大学四年自己自学51单片机,从最简单的LED流水灯学起,在软件编程领域一直走了7年,工作后才发现自己大学四年的自学过程是,满怀热情,学习路线错误。我这里所讲的软件编程主要集中是嵌入式领域基于各种微控制器编程。
那么如何写好一段下位机代码?如何驾驭上万行代码进行修改思路不会混乱?如何快速有效的进行软件问题定位?如何与别人写的代码进行可靠有效移植和应用?等等相关性问题,可能这些问题你现在没遇到,但是在工作中这些都是你必须面对和解决的问题,否则你都不好意思在这个行业混了,因为太菜了。
我所接触过的MCU芯片有51单片机,AVR系列,STM32系列,DSP28系列,ARM7,和ARM9。不要小看51单片机,那是入门最好的芯片,把任何一款芯片的资源和运行效率用到极致,你就是高手(高手名言)。工作中使用时间最长的是STM32系列和DSP28系列,通过大量的控制器使用和对比,要明白选择芯片的标准是最适合你项目需求的那一款,而不是最牛逼的那一个。
回答上面的问题答案:1.寄存器 2.数据结构 3.状态流程 4.算法 5.模块化的编程思想。看答案很简单,理解它并且努力的去做好它不容易。我们一个一个分析。
1.寄存器。我不想用百度百科和课本的标准答案告诉你是什么,因为我说了,你看了,还在云里雾里。打开任何一款控制器的芯片手册,你所看到的基本都是对寄存器的详细描述,想要深刻的理解一款芯片怎么使用,必须熟悉它的所有寄存器。当你用到它的某个外设,就去研究它的相关外设寄存器。不需要你去背下来,应为你背不下。工作中还需要一个能力,快速学习,消化理解,加以运用。写到这,总结就一句话,你是否深刻的理解你现在所使用芯片的相关外设寄存器,如果还不够,这是你要做的第一件事情。
2.数据结构。对于测控专业来讲,这是硬伤。应为没有这门课,我没有上过,不知道现在的学弟学妹有没有这门课,没有的话请自学数据结构和软件工程两门课,因为对于写软件来讲很有用。举个例子我们看一下对于串口通信模块的数据结构定义。
CommCtrl.h(头文件相关代码)
CommCtrl.C(C文件相关代码)
这里的内容包含有数据结构定义,初始化赋值,结构体声明。结构体定义的变量都是在通信协议解析过程中会用到的变量。Start表示一包数据的包头,End表示一包数据的包尾。还有包的数据长度,功能码,检索码,数据位(最大12个16Bit数据),标志位内容。我们看通过这样的一个结构体定义,可以把串口通信协议所有内容包含在内,我们可以根据自己的要求定义你所需要的模式。如果我们的操作对象是电机模块,可以把电机的状态,速度,方向,当前位置,加速度等参数以结构体的形式进行定义。这样的一种定义方式可以使我们思路清晰,操作对象明确,具有面向对象的编程思想,和模块化编程的设计理念。
3.状态流程。所谓的状态流程,就是要在自己的脑子里构建出你所要写的项目代码的状态流程图。我们一点一点的来,比如说你要点一个LED,你要想的是第一:系统初始化(系统时钟,相关外设,相关变量),LED的初始化状态,第二:LED亮灭方式,2种状态在时间上的切换,状态标志位的赋值切换。这是一个简单的分析。如果复杂的项目,比如有电机运动模块,串口通信模块,数据采集模块,存储芯片数据存储,蜂鸣器,LED,等等10到20个外设的操作时。如何在头脑清醒的规划出几百个状态之间的切换,尤其对于比较大的项目,解决方法是在你的每一个外设的结构体模块定义时加入Status变量,通过对Status变量赋值,进行任务切换。
4.算法。算法是程序中进行数据处理必不可少的东西,常见的算法有数字滤波算法,二分法查表,排序算法等。最常见的数字滤波算法大量的运用于数据采集,数据处理的设备当中。因为从ADC芯片采集到的原始AD值,可能有跳变值,数据波动幅度较大,在硬件不能优化的情况下就要考虑软件滤波算法,在有些项目中最核心的东西就是算法,建议多去积累学习有用的算法程序。
5.模块化的编程思想,面向对象的设计理念。任何一个新生事物的学习必须要有一套正确方法和思想,在错误方向上努力再多也没有用。计算机学院有一门课,面向对象的程序设计,希望各位看客有时间了可以学习看看,理解其中的编程思想。如何驾驭上万行的代码,必须要有模块化的思想,比如电机就是一个对象,它的属性启动/停止状态,速度,方向,加速度,位置等参数;比如对控温模块,它的属性升温/降温状态,升降温速率,PID等参数。对于不同的模块单独进行数据结构定义划分。这样的处理可以使程序员在编写程序的任何时候都保持思路清晰,按照设计要求和时间进度要求完成任务。
废话就写到这里,任何一门专业学科的学习有其一定的方法,这是我工作三年来的深刻体会。希望各位看客从文章中有所体悟和获得,也不枉我大清早起来花时间和精力写这篇文章,经验的总结可能寥寥几笔,更多的是花时间和精力在正确的道路上不断的去练习和自我总结,OK完毕。
来源于网络,若有侵权,联系站长删除!