2015年12月9日21:16:07 对于这个案子以前做过了,并且不止做个一次。但是每次的处理办法都不一样,前面几次的处理模式都不一样。在做底层驱动时,因为前面2次的数据量不大,做了偷懒的方式来进行。自己去描点然后修改图片库的内容来实现自己想要的显示内容。做出这样的选择也是因为硬件的变动,自己没有深入的研究显示打印的原理。在采用拼凑的策略下匆忙的完成了相关任务的交接作业。更坑爹是在代码里面没有相关的备注。导致本次的维护花费了4个小时来回复记忆。整个调试时长大约11个小时! 出现的问题如下: 1、接手任务后并没有对整个任务的架构进行思考,导致在刚开始作业的时候使用了是新项目的开发原则,从原理图和ic的操作开始入手。消耗了一定时间出重复对于IC和原理图的解读; 2、对于已经做过的案子,没有做整个构架的思考后就开始进入到细节的修改。 a) 因为记忆的模糊性,误认为修改某一个点就可以实现相关的功能,但实际需要修改多个地方才可以完成。导致自己被困在一个地方花费大量的时间来处理一个自己认为可能错误的点,而不是对整个构架进行维护。 b) 中午吃完饭后,有考虑重新对底层的东西进行恢复,又因为想到一点其他的东西可能需要修改然自己再次陷入到以为修改一个点就可以实现全局任务的错误思路里面。 c) 没有时间概念,在开始做了几个番茄时钟后因为没有效果而放弃了退出思考的机会,进入到死循环。错误的认为听下来思考会浪费时间而导致自己在一个错误的结论上面死磕。 3、案子的相关记录文件没有; a) 也正是这个原因导致自己在一个做了很多次的案子上面花费了大量时间在死磕。 b) 自己不愿意去看写过的代码来让自己快速的恢复对于整个驱动的架构描述,以便主机快速的完成相关的规划作业。 c) 在调试过程中需要对于已经出来的案子的原理做一个细致的说明文档,以便主机可以在很短时间内完成相关的系统构架,以便自己可以在从全局的角度来进行相关的思考。 4、代码风格的变化: a) 这个也本时间耗费比较多的一个原因,前面因为闲的蛋疼,竟然使用C++完成了这个案件,更坑爹的在C++里面没有一个注释说明,然自己花了不少时间在思考C++的编程规范,最后因为时间问题而放弃,开始重新转码为C操作。 b) 前期的代码命名规则变化太多,导致自己在调试过程中出现了一些麻烦,很难凭借字面意思去琢磨这个函数的作用。 5、IAR 编译器的一个细节:在IAR的平台进行数据转换的时候它默认是小端模式,也因为这个问题让自己在对数据进行转码的时候出现了一些没有考虑到位的地方,后期在做数据变化的时候还是要顺应大环境才行逆天的事情可以干,但是那的看这个事情可以获得多少好处! 6、历史案件的处理流程: a) 需要从架构上来对对整个案子进行恢复记忆,特别是你需要进行修改的业务!不要因为自己的模糊记忆就开始动手操作 b) 在对凭借记忆进行操作的时候需要有时间限定,没有搞定就需要退出,进行重新编辑,这样的效率要比自己在一个地方死磕快并且不会让自己那么失落! c) 同样的坑,不能跳3次,不能因为自己的记忆突然想到了什么又转到另一个地方进行修改这样的处理模式只会让自己陷入到内耗中; d) 如果规定的时间无法恢复,就必须放弃恢复,重新对整个构架进行思考重新作业。
附件: LED显示处理作业流程: 1、工作原理: a) 其是利用人的视觉暂停效应来实现类似静态的数据显示效果。其在操作的时候多使用行列的方式来进行处理。 2、显示图例: 3、基于这样的原理,我们在调试的过程中基本是按照行列的方式来进行测试的。当我们需要打印特定的内容时,因为在绘制PCB板时,因为布线或者硬件开发的人员对于数据显示的类容并不是按照某一统一的规定来绘制的。在这样的情况下,我们首先需要确定的我们的RAM与LED显示位置是否一一对应! 4、RAM与LED显示位置确定的办法: a) 需要根据原理的来进行判断它是按照什么样的规则来进行,常规的按照字节来进行划分的,也有可能是使用4bit位来进行划分的。可以同输入0XFF 这类数据来进行判别,看是否在一个连续区域即可识别或者看原理图是否存在01238765 这类奇葩的排列方式,如果有则你处理的最要单元需要降级 b) 需要自己的driver层里面完成,数据 8bit的取反、高低位互换、4bit提取和拼接等相关功能函数,并确认其正常正常。 5、调试策略说明: a) 使用FF 这类数据确认自己的显示区域在位置 b) 使用01 或者1 这类数据来确认数据的大小端,如果你认为这两个数字是一样的话,我只能说你想的太少! c) 使用1 2 4 8 来确认各个位是否正确,使用3 7 B D E 来验证大小端是否正确; d) 在调试的时候你可以选择使用STATIC 的方式来声明局部变量,这样方便查看,但是记得做初始化操作,否则当你做与 或操作的时候你有可能遇到一些坑爹的事情,这个在对于临时变量更严重,切记要做初始化操作,否则有可能你每次的结果都是随机数; e) 需要从原理图上来确认自己的扫描方式,如果你是一次对多个行列进行赋值的话需要对各个赋值的行列进行独立操作,具体办法重复a-d的过程即可。 6、整体打印说明: 在做调试的时候一定要清楚的认识到自己的显示大小端的一致性,不要跟着原理图来走,按照它的逻辑出牌基本是要挂的,除非你使用的标准件!
|