前几天,在以前的一个修改了一些电路的板子上编写一段新的代码的时候,发现以前正常运行的一段程序,竟然不能正常运行了。现象很像程序死掉了,卡在某处没有运行。但是,在以前的没有修改过的板子上运行一切正常。
于是检查了板子上修改的部分,发现并没有哪些地方会影响到单片机的正常工作,甚至于让单片机死机。而外部电路的修改,也并没有太多。实际测量发现,之前单片机IO口为高电平,板子修改后成为了低电平。而这个端口正好是,程序中的一个中断口。因为这个端口是低电平,使用IDE调试发现,程序一直进入这个外部中断服务程序,其他程序没有时间执行。
于是,边修改了IO口的中断模式设置,将原来的下降沿+低电平触发中断的方式,修改为下降沿触发中断。但是,奇怪的是,一开始的竟然没有起到作用。
感觉这样有些不应该,于是乎又准备开始怀疑编译器了。便查看了汇编代码,没有什么问题。只好,再回去看看Datasheet。突然,Datasheet上有一段话,引起了注意,“这个寄存器,只有在中断禁能情况下,才可以设置”。突然想到,是不是自己在不满足这个情况的条件下设置了这个寄存器,才导致了失败。
于是单步调试看看,发现在使能全局中断后,修改中断方式的寄存器的条件不成立了。于是将这个设置修改到,使能全局中断之前。发现可以了。
同时借助于,这个过程也发现了以前在定时器上的一个缺陷。是在设置寄存器时,没有注意先后顺序造成的一个现象——每次设置时 ,会触发一次定时器中断。正常的是,应该先设置控制寄存器,之后再设置其他寄存器。否则,设置其他寄存器的时候,有些设置会导致触发一次定时器中断。
而能发现这些问题,很大一部分原因在于换了新的IDE。原来的程序在开发时,由于时间紧迫,直接找了以前公司在用的IDE,但是在用的过程中发现,修改代码,调试下载,都很不方便。甚至于,很多时候修改一次代码,按一个Ctrl+S保存就要等待将近30S。调试的时候,一个单步运行,能运行将近1min,才结束。虽然,那个时候感觉效率很低。但是由于不了解,有什么别的IDE可以替代当前用的。而当时赶着将项目做完,也没有去找别的IDE。于是只能忍受着。
而再次,遇到问题要调试时。果断先找了下,发现有其他IDE同样可以开发这款单片机。于是先安装试试,结果下载,安装与熟悉新的IDE花了将近3个小时。距离下班只有一个小时多一些了。
马上建立新的工程,导入原有的代码,进行调试。发现新的IDE的编辑效率很好,而且调试速度也很快,下载调试都有快捷键,这样整个效率就高了很多。结果在下班前十分钟,将引起这次问题的原因都找到并修改完成。
这让我想起了《代码大全》里有一段描述“如果完成一个项目,需要五个小时,有些人,使用效率低下的编辑器工作了五个小时;有些人,先用了4.5个小时配置好一个高效的编辑器,然后花30分钟将项目完成。大部分人,会选择第一种”。
1989tie_959541171 2013-10-9 12:26
用户1352846 2013-10-8 18:37
allen_zhan_752827529 2013-9-28 15:26
1989tie_959541171 2013-9-26 12:52
allen_zhan_752827529 2013-9-25 13:26
1989tie_959541171 2013-9-24 21:54
用户1715188 2013-9-24 20:30
用户1487423 2013-9-24 13:46
用户1048621 2013-9-24 10:55
用户1705692 2013-9-24 09:38