看文档|代码|电路的一些经验意识
扫描二维码
获取更多精彩
嵌入式杂牌军
编辑|追梦星空
公众号|嵌入式杂牌军
很多时候只有理解是解决不了什么问题的,事儿还是得做到位才能起实质性的效用。
有些事就得来点征兆,以供他人做出判断。
快读能更好的调动注意力,慢读能增加感受和记忆。
文 章 导 读
今天分享一下我平时工作中看文档、代码积攒的一些意识想法,汇总出来以供大家参考,希望对小伙伴们有所裨益哈!
如果对我下面所罗列的条目有什么不同意见,可以后台交流哈,!
1 关于这些意识想法的说明
1)这些想法产生的途径
① 看手册时的所思所想。
② 阅读代码时的思路总结。
③ 工作中的经验总结。
2)为什么要分享出来
① 技术类关于思路意识分享的文章比较少,分享出来对经验不足者有益。
② 每个人的认知不同,这些想法可能可以作为他人思路上的补充。
③ 与小伙伴们多作交流(如有不同意见欢迎批评指正)。
2 学习公众号文章的一套方案
你能从现有的项目中吸收哪些内容:
吸收现有的手册、原理图、PCB及代码,深挖实现方法、原理、实现细节,对比曾经接触过的相关材料,归纳总结。
1)看文档的思路意识
① 看英文手册。
看英文文档时,可以对照翻译比较经典的中英文文档,积累专业词汇。
看英文文档时,如果一个词在一个位置没理解,可以搜索此文档,看看其他地方的语境能不能增加自己的理解。
有些英文文档是有对应的中文文档的,不想看英文,可以有意识的找一下,但是尽量去看英文手册吧,都会有一个痛苦的过程的,过了那个过程,以后就轻松容易了。
尽量把英文在脑中形成形象联想(联系已看的内容,对应特定常用词汇)。
对于英文手册中由熟悉的单词组成的词组,语义不清就查下意思,它们有可能对应了专业术语。
看寄存器先根据缩写理解,理解不了再根据描述理解(但这样要避免先入为主)。
② 摘录与整理。
在看传感器或协议类芯片的操作时,要将功能码,指令码,设备地址等的数据格式进行文档整理。如果有流程图时,要将流程图中环节对应到相关的内容中去,以理清操作(通信)流程。
当内容太多,又有不少概念和关键点的时候,要尽量新建一个摘录文档,将这些内容复制过去方便短时查看和复习。
看手册时可以把要看的模块内容截成独立的模块手册,此模块内容连续着看,遇到寄存器或不懂的内容查阅总的手册(包括全部内容的手册),看完再看截出的独立模块内容,这样看某个模块内容时没有跳跃感。
在看文档时为了不中断看文档的节奏,在有一些有意义的想法时,可以将想法记录到一个文档,或以一个文件名命名,有时间了再处理。
③ 参照对比。
同类型的寄存器可以同时对比着看。
类比学习:比如因为RT1052资料较少,可以参考STM32相关外设部分的介绍进行类比学习。内核不一样,但很相似,很多机制就是相似的。
按照图(时序图、功能框图等)的不同部分去对应手册中相应的内容。
芯片手册上讲不明白的地方,可以去寄存器和程序说明中去辅助弄清楚。
手册中内容对应代码的部分,要时不时提醒自己它们之间一一联系对应的关系,这种意识很重要。
看手册打开程序,有些量可以跳转着对照着看。
④ 一些细节。
手册时序中的同步线,通常是控制数据更新的信号。
结合图或功能回看手册,注意寄存器之间的联系,看图时注意联系不同模块之间的关系,在脑中形成功能对应及形象。(对应图中每个词到手册中的介绍,在脑中形成对应的意识)
如果手册只有功能框图,为了更快的熟悉一个模块,在看过功能描述之后,看寄存器时,可以将寄存器按照功能模块分类,到配置时,分模块配置,对应模块去看对应的寄存器,如果不能明确功能的可以放一起。也可以将一个寄存器功能做个列表,需要配置某个模块功能时逐个寄存器查看即可。如果有SDK等官方代码,能直接用时直接用,需要修改时需要结合上面方式。
看程序或文档时遇到公式中看不懂的数字量时可以考虑倒数关系再想想。比如周期比可以算周期个数,但如果转成频率比,表示的意思就不太明显了。
⑤ 一些思路。
看完一篇文章,一本书,要整体回顾下,想下有什么收获,这样会有大局观,也可能会有意想不到的感悟。
对于用寄存器方式模拟协议的,要结合原有协议时序图的结点找到配置点,对应出寄存器模拟协议时序的过程(此过程手册和代码要互相参照)。
手册只有在有个整体把握之后,才是查的,或是经验比较足,知道看什么位置,有建立联系的意识,手册查用才是行之有效的,在开始时细看手册积累行业共识(对于关系)是很有必要的。(触类旁通)
看通深入的点,重点难点,比多次看容易的点要重要的多,当然忘了的内容要复习。
2)看代码的一些意识
① 意识。
程序即为编程人的思路,要时不时提醒自己这种意识,他这样写的思路是什么,不能单单看到程序的语法及调用关系。
代码和功能要一点点对应。(凡事必作于细)。
看程序时,先看整体实现,不要纠结于细节,比如看函数参数,知道参数意思了解函数功能即可,不要纠结参数是怎么来的,在整体了解之后再去看细节。要有总分的意识。
每个寄存器通常都有相应的宏,类似函数,可以直接调用这些宏,而不是用函数,函数库在必要的时候可以混用宏。
中断优先级的顺序,能很好区分需要优先的放到前面,如果不好区分就得测试来安排优先级顺序了,特别是在你不知道应该该优先哪个的时候。
看程序时,程序中的注释错误,或没有注释在看懂时要马上加上注释,把不容易理解或引起歧义的注释换成容易理解的。
编程时,标志位要写明不同数值对应的含义不然容易造成不必要的麻烦。
结构体赋值要尽量整体把握功能后再细看每个参数的作用。
② 方法。
将文档中的有效信息尽量简练的放到程序注释中,省得经常查看,当然熟悉到一定程度时,尽量简化或不写。(根据自己处的阶段去抉择)
用对比软件,查看程序思考代码修改的原因(SVN自带修改文件及修改内容的对比功能)。
总结属于自己的看结构体(成员大小、对齐、成员类型、指针内存分配在哪)、for循环、while、switch语句的思路(C语言使用的注意事项,包含实例)。
如一个函数通常包括如下内容:
变量定义、初始化、给指针分配内存、长度间隔调整、字节序转换、读写操作、参数有效性判断、条件判断(标志位或逻辑判断)、结构赋值及使用(也算初始化),算法实现、逻辑功能(功能函数调用)、返回值。
接收他人的代码,可以先分层,将函数功能做成表格,如果有协议的,对照协议将协议的每部分实现的对应到代码中的函数和结构体及枚举变量,做成文档方便查找对应。
看参数时参数变量可能由不同词汇缩写组成,但只有一个变量是其主要意思,要用主要意思去理解函数功能,而不要过于纠结不同词汇的翻译上。比如byNet,理解成设置网络即可,不要想得太深,这样能更好的把握函数意义。
类似上面,指针和结构体主要意思在后面指向的内容,前面是个总体模糊的概念,看配置时,后面的指向变量是重点。或是再了解整体之后,就不用每个量从指针到变量一层层的看了。函数参数前面的类型,指针结构体前面的指针和结构体名是辅助的,整体了解之后可以略看。
3)看电路PCB的一些意识
① 整理。
将PCB相关的知识分知识点整理成手册。
看原理图:电路模块化看,电源的转换关系以及不同大小的电源都给什么模块供电了,看控制逻辑。将查到芯片使用方式、作用在原理图上进行简单标记,不然容易忘。
有时间了,学习某个模块时,把此模块硬件手册常用的内容截图出来放到一起形成功能分析文档。
② 方法。
有时间了用示波器观察协议或硬件芯片的波形,电平上升时间等参数,增加硬件电路调试的能力。
硬件芯片手册中关于引脚的电压电流可以用万用表或示波器观察其数值及波形,可以作为判别芯片是否工作正常,是否损坏的依据。
测试时能量整个通路,不要去分段测量。
在调试过程中,手接触器件如果导致器件引脚不小心与其他引脚短路可能会导致芯片损坏或出现一些怪异现象。
4)杂项
在网络上搜索时不一定是越精确越好的,因为很多时候写文章的人容易将名字起得很大,所以当精确描述不好使时,可以往大致描述方向想词句。
芯片手册名字在型号上加上中文,好找好认。
以上内容比较庞杂,分类比较随意,阅读过程中,大家如果有什么想法欢迎后台或加我微信进行交流。
今天就到这吧,希望对小伙伴有所帮助哈,喜欢的话欢迎转发、点赞、分享、在看哈,。