原创 开发工具带来的进度影响

2013-9-21 10:52 2934 21 38 分类: 消费电子
前几天,在以前的一个修改了一些电路的板子上编写一段新的代码的时候,发现以前正常运行的一段程序,竟然不能正常运行了。现象很像程序死掉了,卡在某处没有运行。但是,在以前的没有修改过的板子上运行一切正常。

于是检查了板子上修改的部分,发现并没有哪些地方会影响到单片机的正常工作,甚至于让单片机死机。而外部电路的修改,也并没有太多。实际测量发现,之前单片机IO口为高电平,板子修改后成为了低电平。而这个端口正好是,程序中的一个中断口。因为这个端口是低电平,使用IDE调试发现,程序一直进入这个外部中断服务程序,其他程序没有时间执行。

于是,边修改了IO口的中断模式设置,将原来的下降沿+低电平触发中断的方式,修改为下降沿触发中断。但是,奇怪的是,一开始的竟然没有起到作用。

感觉这样有些不应该,于是乎又准备开始怀疑编译器了。便查看了汇编代码,没有什么问题。只好,再回去看看Datasheet。突然,Datasheet上有一段话,引起了注意,“这个寄存器,只有在中断禁能情况下,才可以设置”。突然想到,是不是自己在不满足这个情况的条件下设置了这个寄存器,才导致了失败。

于是单步调试看看,发现在使能全局中断后,修改中断方式的寄存器的条件不成立了。于是将这个设置修改到,使能全局中断之前。发现可以了。

同时借助于,这个过程也发现了以前在定时器上的一个缺陷。是在设置寄存器时,没有注意先后顺序造成的一个现象——每次设置时 ,会触发一次定时器中断。正常的是,应该先设置控制寄存器,之后再设置其他寄存器。否则,设置其他寄存器的时候,有些设置会导致触发一次定时器中断。

而能发现这些问题,很大一部分原因在于换了新的IDE。原来的程序在开发时,由于时间紧迫,直接找了以前公司在用的IDE,但是在用的过程中发现,修改代码,调试下载,都很不方便。甚至于,很多时候修改一次代码,按一个Ctrl+S保存就要等待将近30S。调试的时候,一个单步运行,能运行将近1min,才结束。虽然,那个时候感觉效率很低。但是由于不了解,有什么别的IDE可以替代当前用的。而当时赶着将项目做完,也没有去找别的IDE。于是只能忍受着。
而再次,遇到问题要调试时。果断先找了下,发现有其他IDE同样可以开发这款单片机。于是先安装试试,结果下载,安装与熟悉新的IDE花了将近3个小时。距离下班只有一个小时多一些了。

马上建立新的工程,导入原有的代码,进行调试。发现新的IDE的编辑效率很好,而且调试速度也很快,下载调试都有快捷键,这样整个效率就高了很多。结果在下班前十分钟,将引起这次问题的原因都找到并修改完成。

这让我想起了《代码大全》里有一段描述“如果完成一个项目,需要五个小时,有些人,使用效率低下的编辑器工作了五个小时;有些人,先用了4.5个小时配置好一个高效的编辑器,然后花30分钟将项目完成。大部分人,会选择第一种”。

文章评论17条评论)

登录后参与讨论

1989tie_959541171 2013-10-9 12:26

STVD是意法的,在开发STM8的时候,一开始使用这个,个人感觉这个IDE不太好用,也可能是我电脑比较老的缘故。关于Keil确实挺好的,用起来也习惯。第一次接触单片机的时候,就是用这个编写的程序,那个时候用的是keil 3.

用户1352846 2013-10-8 18:37

单片机很少有多方的IED

allen_zhan_752827529 2013-9-28 15:26

STVD 是哪种编译器? 好用吗? 也有好多人用 Keil.

1989tie_959541171 2013-9-26 12:52

呵呵,换之后的IDE你经常用的,在你的博客里我看到过,是IAR,换之前的是STVD。

allen_zhan_752827529 2013-9-25 13:26

可以问问, 从何种 IDE 更换到何种 IDE, 以及理由? -- 好奇想知道, 增加技术知识.

1989tie_959541171 2013-9-24 21:54

第一种可控,即使慢但是我们知道它的最坏情况;第二种不可控,对于最坏情况可能会超过我们的预期。这两种,需要一个平衡。但是,从心理学上看,我们更喜欢可控的事情,确定的事情。例如,1、一定可以获得70元,2、80%的可能性获得100元。更多的时候,我们会选择1,而不是2,尽管2的预期收益更高是100*0.8=80.

用户1715188 2013-9-24 20:30

有时候不是不想换,关键是换新的IDE需要时间去熟悉、学习等等,有时候还需要特殊的移植过程,这些因素大多是不可控的过程,如果对新的IDE不熟悉,在时间上以及结果上都要冒很大风险。有时候必须把风险控制在可控范围内,这个很重要。

用户1487423 2013-9-24 13:46

工欲善其事必先利其器

用户1048621 2013-9-24 10:55

从项目管理角度讲,肯定采用第一种;而从开发部门的角度看,肯定是采用第二种。在项目执行工程中就需要看沟通和谁更强势了。看事情不能脱离总体项目环境,不然会让工程师很迷惑。

用户1705692 2013-9-24 09:38

写得非常好!
相关推荐阅读
catch2000 2015-07-19 11:44
信号线小电阻的作用
在一块新的PCB上,测试系统能否正常运行的时候,发现系统上电后没有正常启动。  系统框图如下:   在上电的时刻,CPU A(GPIO电平2.6V)会向串口发送启动日志数据,CPU A启动后,...
catch2000 2015-07-05 17:04
协议设计中ACK机制的影响
在TCP/IP中,延时ACK和Nagle算法。  TCP为了同时处理成块数据(通常为512字节的用户数据)和交互数据(通常用户数据比较少,例如不大于10个字节),采用了延时ACK和Nagle算法...
catch2000 2015-05-23 15:48
话说物联网操作系统
最近好多家都宣布推出自己的物联网操作系统。   1. Google将要在Google I/O大会发布的Brillo; 2. 三星推出的Artik芯片搭载Mentor Graphics的...
catch2000 2015-03-31 23:52
不要采用异或来交换两个变量
在进行两个变量的时候,经常会看到有些书误人子弟的推荐使用异或的方式: 方式一 {   x = x ^ y;   y = x ^ y;   x = x ^ y; } 而不是...
catch2000 2014-10-09 07:28
为什么要测试先行
在产品的研发过程中,测试一项至关重要。不论是软件还是硬件。   软件的测试先行,在研发过程中,就做到质量的保证,因为在出现Bug的时候,容易定位Bug,而且即使是在客户端出现Bug,也能够...
catch2000 2014-10-09 07:26
C语言的面向对象编程(一)
一、前言 对于编程而言,重要的是解决问题的方式,而不是语言本身。面向对象与面向过程是解决问题和思考问题的方式。C语言常说是面向过程开发的语言,因为其缺少很多对于面向对象特性的支持。但,这并不影...
我要评论
17
21
关闭 站长推荐上一条 /2 下一条