sunke9的笔记 https://bbs.21ic.com/?87102 [收藏] [复制] [RSS]

日志

写程序上手很容易,但是想写好程序很难啊

热度 1已有 890 次阅读2013-3-23 14:57 |系统分类:单片机| 程序, 单片机, 编程


前些日子在车间调试一个产品,显示程序和通讯板程序是两个小朋友编的。两个小朋友都很能干,任务派给他们以后很快就拿出程序来了,我们车间一共放了10套装置,拿到新程序以后我们部长就让我烧到装置里,我说先别烧,拿个调试板挂在装置外面先试一下吧。结果把调试板装上装置就起不来了,换回原板没问题了,这说明是程序问题,打电话给小朋友,很快小朋友就改好又发来了,还没等我烧板呢,小朋友就来电话说先别烧,刚才发的程序不对,重新给我发,新发来的程序烧到调试板上还是有问题,反复改了1天也没调好。下班前部长不干了,打电话要他第二天直接到车间来改。第二天,小朋友来了以后很快就让程序正常运行起来了。以后的几天里,小朋友又回到公司本部,用电话遥控我烧程序,他改程序又改了约1个星期,这程序才基本没问题了。曾经有一次改完程序上到装置上就不能用,从装置上拿下来就能用,后来查找原因是他是从别的板上读定值,读来的定值是错的,但是他就按照错的定值执行,导致整个程序都不能运行了,后来给读定值的程序部分加上了限制读来的定值如果不在正常范围内就,用默认的定值执行。


经过这件事,说明了几个问题:


1.小朋友在来车间之前虽然手头也有调试板和仿真器,但是不了解现场情况,做出来的程序不符合实际,这是缺乏实践经验。


2.小朋友的马虎导致我改一次程序要反复烧几次,这个问题其实在写程序时候加上条件编译语句是完全可以避免的。


3.因为读到的定值不正确导致整个系统都不能用,这是因为对于从其它途径获得的数据不加验证,导致自己的程序不能运行。这个问题其实在做人机接口的时候也能遇到,如果人为的输入了不正确的定值导致程序死机或者跑飞,还得靠重烧程序才能解决。这说明小朋友写的程序不够严密。


这几个问题都是初学编程甚至是自认为是高手的人都经常遇到的,要想提高自己的编程水平,我认为首先要打好编程的基础,从编程的书写规范上下功夫,可以参考比如微软啦、华为了这些大企业的编程规范在网上都有流传,学编程一定要好好看看;其次是注意编程的严密性,因为虽然说用单片机做的嵌入式产品都叫智能XX,其实单片机很傻,你说什么它做什么,它自己根本不会分辨好坏,必须都由程序来控制,写程序要像法官讲法律条文一样严密,不然挑你毛病的不是原、被告,而是你自己的产品了;第三点,如果编程语言学得不透的话,不能乱用比较生僻的命令,我们知道C语言中的指针命令功能非常强大,但是如果用不好的话,程序跑飞了,你都不知道去哪找毛病,我看宁可用if也别乱用。


其实本人编程水平也不高,胡乱发表一些感想,请大家不要见笑,有不对的地方欢迎指正!有遗漏的地方欢迎补充!


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (4 个评论)

回复 shuidi_wangdan 2013-11-9 11:18
大哥,请教,这句“2.小朋友的马虎导致我改一次程序要反复烧几次,这个问题其实在写程序时候加上条件编译语句是完全可以避免的。”怎样加条件编译?请指教,谢谢!
回复 SUNKE9 2013-11-10 20:54
shuidi_wangdan: 大哥,请教,这句“2.小朋友的马虎导致我改一次程序要反复烧几次,这个问题其实在写程序时候加上条件编译语句是完全可以避免的。”怎样加条件编译?请指教,谢谢 ...
(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。
这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
回复 SUNKE9 2013-11-10 20:55
例如:#ifdef DEBUG
             状况1调试模式*********
      #else
             状况2正常模式
      #endif
回复 shuidi_wangdan 2013-11-11 09:15
长知识了,我还要多看看C的书籍,谢谢大哥!