找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3949|回复: 0
打印 上一主题 下一主题
收起左侧

电子产品程序设计漫谈

[复制链接]
跳转到指定楼层
楼主
ID:128229 发表于 2016-6-29 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                         电子产品软件设计漫谈
技术源于积累,成功源于执着。
                                 ——沈辉文







一、方案的制定阶段
    1. 一个项目的成败往往不是在最后一天体现,而是在第一天就被注定了(三军未动,粮草先行)。也就是说,方案的制定阶段直接关系到项目的成败。因此在这个阶段要细致的做好准备工作,这些工作主要包括以下内容:
    2. 制定技术开发要求,首先要搞明白我们到底想做什么?最害怕的就是那种没有要求的设计项目。因为有时,没有要求就意味着客户随时会提出新要求。这往往会陷开发者以两难的境地。
    3. 制定实现方案,进行技术准备。了解技术瓶颈和难点在哪。评估这些技术难点的风险。能否解决?如何解决?对于有经验的工程师来说,技术方案的定制与论证几乎凭直觉就能完成。而对于新手来说,这些工作切往往很难独立完成,需要前辈给予指导或协助。
    4.评估整个项目开发需要的各方面的资源,包括:人力、工具、材料、场地、经费等。并由此核算与评估项目的成本(包括研发成本和生产成本)。
    5.评估确定开发周期。开发周期有两个概念,一个是指工程师评估出来的开发周期。一个是指市场方面希望的完工时间期限。当二者发生矛盾时,就必须进行协调。要么市场方面放宽期限,要么增派人手或安排加班。
    在整个立项过程中,工程师往往只把关注的目光片面地投向技术方案本身,而忽略了市场前景预估,成本核算、工具和材料的准备以及人力资源的调度等等。其实这些因素同样关系着产品的成败,需要给予足够的重视。必要时,应该请相关人员共同参与,进行评估和协助。
二、产品设计阶段
    在经过多方面的综合评估,确认方案可行,即可立项,进入具体的设计阶段了。其实这个设计阶段中包含了系统、程序、电路、机械结构等多方面的内容。由于本手记主要讲电子程序设计。因此就撇开其他,只讲程序。在这个阶段工程师的主要任务是:
    1.程序框架的规划。
    2.各个模块功能的细分。
    3.系统资源的分配。
    4.算法的设计。
    5.程序流程图的绘制。
    新手们常常喜欢跳过这个阶段,蠢蠢欲动地直接上机去写程序,边写边调。满以为这样可以加快进度,结果往往事倍功半,反而耽误了时间。
    其实,磨刀不误砍柴工。这个阶段付出的辛苦,将在后面几个阶段获得N倍的报答。反之,这个阶段的任何一点懈怠,都有可能为以后的工作埋下祸根。
三、代码编写阶段
    这个阶段就是我们平时所谓的写程序了,其实是最没技术含量的活,谁都能干。这个阶段最基本的要求就是尽量减少笔误现象,并且严格遵守编程规范。
    根据经验,笔误现象是无法完全杜绝的。笔误属于低级错误,其实并不可怕。即使存在一些笔误,也可在下一步调试阶段纠正。事实上,现在许多编译器已经可以为我们发现许多笔误现象。
    真正需要注意的是遵守编程规范。一个规范的程序文本,不但是审美的要求,而且更是后续调试和修改工作得以胜利进行的保证。 关于编程规范,如果展开来讲的话,完全可以写一本书。
    1.向前兼容原则
    对于单个程序员来说,效率来自于不断积累。这时要奉行的最高原则就是向前兼容。
    我们知道,许多有经验的编程老手,都拥有自己的程序模块库。当他们需要设计一个新的程序时,只要直接从旧的项目中抽取出成熟模块,移植到新的项目中。七拼八凑,就完成了新程序的设计。这极大提高了开发速度。
    为了让这些模块,能够在不同时期的不同项目中,保持较好的兼容性,必须让它们遵守相同的规范。
    因此,要尽快形成个人成熟、完善的程序风格。
    2.相互兼容原则
    对于一个开发团队来说,效率来自于分工协作。这时要奉行的最高原则就是相互兼容。
    在团队中,编程者个人技巧的重要性被降低。甚至这些不和规范的技巧,会成为合作者之间沟通的障碍。
    团队中的个人英雄主义是失败的先兆。而团队默契配合,才是成功的关键因素。
    因此,有必要制定统一的编程规范,让团队中的伙伴一起遵守,避免各自为政、一盘散沙。
四、产品调试阶段
    这个阶段就是要验证前面的工作,把程序调通。
    在这里,调通的概念并不是说,程序在正常状态下,偶然正确运行那么一回就算万事大吉。我们要保证,程序在各种可能的状态(包括异常状态)下都能按预期的要求工作。
    曾经听说,某某高手一口气写了N多K的程序,没有经过调试,一次烧片就成功了。我觉得这简直就是神话一般不可思议。我坚信一点,就是没有BUG的程序是不存在的。这年头,就连Windows XP都浑身是补丁,谁又能宣称自己比比尔盖茨还牛呢?
    调试阶段要做的两件重要事情:一是测试,就是要进可能多地找出程序中的BUG;二是DEBUG,就是要解决这些BUG。
    找不出BUG,或解决不了BUG,都是失败。
    程序员往往更善于解决BUG,却不善于发现BUG。这是由于程序员面对自己的程序,往往会存在视觉盲点。这就像秃子看不到自己的光头一样。另一方面,程序员即使发现BUG,但由于程序是自己写的,往往不能正视之。这是一种思维障碍,就像我们常常不愿承认自己的缺点一样。因此,最好的解决办法,是在程序(产品样品)交付客户之前,请其他人员进行测试检验。
    在找到BUG后,需要程序员去分析问题并解决问题了。这才体现个人功力,拉开差距的时候呢。高手和低手的差别就在这时显现出来。
五、产品维护阶段
    这个阶段是指产品在推向市场或交付客户后,根据市场或客户需求,进行升级维护,当然也包括进一步对隐形BUG的消除。
    一个得不到维护的产品,是没有生命力的。就像一颗已经死亡的树,虽然表面上看来还枝繁叶茂,但实际上它已经停止生长,迟早要腐化掉。
    同样道理,一款常年不更新换代的电子产品,会像过去的明星渐渐被人遗忘一样,逐渐丢失市场份额,而产品维护,是延长产品生命周期的不二法门。
    产品如何才能经历岁月的考验,千锤百改,依然生机勃勃?
    1.养成良好的编程习惯
    程序应该模块化,就像积木一样,便于拆卸或增加。
    对于MCU的一些资源,如RAM寄存器或I/O口,甚至包括一些常数,必须先定义在使用,避免直接使用。将来需要调整时,只要修改定义部分就好了。
    对于相同或类似的程序段,应该用子程序来实现。如果受堆栈等资源限制,不能使用子程序,则应该用宏来实现。只要以后需要修改时,只需要改一点,无需改一片。
    2.自觉加强版本管理
    详细记录每个程序版本的修改细节,形成一份历史记录。并且,每次改动后的版本都应该保留,新版本不要覆盖老版本的文件。一个基本原则是,凡是要烧片测试或送样的程序版本,如需要再做修改,必须升级版本号。
    并且,每次修改程序时,相关的注释及辅助说明文档也应该同步更新。免得下次再改时,发现对不上号。
    所有程序版本应该妥善归类、存档备份。有条件最好刻成光盘,避免日久年长因病毒或硬盘损坏而丢失。








分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表