编号: 受控状态: 软硬件开发流程及规范 编 制: 日期: 审 核: 日期: 批 准: 日期: 修订记录 日 期 修订状态 修改内容 修改人 审核人 批准人
参考.资料
.. .. .. ..
0 目录
0 1 1.1
目录 ................................................................................................................ 2 概述 ................................................................................................................ 4 硬件开发过程简介 ............................................................................................... 4
1.1.1 1.1.2
1.2
硬件开发的基本过程 ................................................................................... 4 硬件开发的规范化 ....................................................................................... 4
硬件工程师职责与基本技能 ................................................................................. 5
1.2.1 1.2.2
2 2.1
硬件工程师职责 .......................................................................................... 5 硬件工程师基本素质与技术 ........................................................................ 5
软硬件开发规范化管理 ..................................................................................... 6 硬件开发流程 ...................................................................................................... 6
2.1.1 2.1.2
2.2
硬件开发流程文件介绍 ............................................................................... 6 硬件开发流程详解 ....................................................................................... 7
硬件开发文档规范 ............................................................................................. 11
2.2.1 2.2.2
2.3
硬件开发文档规范文件介绍 ...................................................................... 11 硬件开发文档编制规范详解 ...................................................................... 12
与硬件开发相关的流程文件介绍 ....................................................................... 16
2.3.1 2.3.2 2.3.3 2.3.4 2.3.5
3
项目立项流程: ........................................................................................ 16 项目实施管理流程: ................................................................................. 16 软件开发流程: ........................................................................................ 16 系统测试工作流程: ................................................................................. 17 内部验收流程 ............................................................................................ 17
附录一. 硬件设计流程图: ............................................................................ 18
参考.资料
.. .. .. ..
4 5
附录二. 软件设计流程图: ............................................................................ 19 附录三. 编程规范 .......................................................................................... 20
参考.资料
.. .. .. ..
1 概述
1.1 硬件开发过程简介 1.1.1 硬件开发的基本过程
硬件开发的基本过程:
1.明确硬件总体需求情况,如CPU 处理能力、存储容量及速度,I/O 端口的分配、接口要求、电平要求、特殊电路(厚膜等)要求等等。
2.根据需求分析制定硬件总体方案,寻求关键器件及电路的技术资料、技术途径、技术支持,要比较充分地考虑技术可能性、可靠性以及成本控制,并对开发调试工具提出明确的要求。关键器件索取样品。
3.总体方案确定后,作硬件和单板软件的详细设计,包括绘制硬件原理图、单板软件功能框图及编码、PCB 布线,同时完成发物料清单。
4.领回PCB 板及物料后由焊工焊好1~2 块单板,作单板调试,对原理设计中的各功能进行调测,必要时修改原理图并作记录。
5.软硬件系统联调,一般的单板需硬件人员、单板软件人员的配合,特殊的单板(如主机板)需比较大型软件的开发,参与联调的软件人员更多。一般地,经过单板调试后在原理及PCB布线方面有些调整,需第二次投板。
6.内部验收及转中试,硬件项目完成开发过程。
1.1.2 硬件开发的规范化
参考.资料
.. .. .. ..
硬件开发的基本过程应遵循硬件开发流程规范文件执行,不仅如此,硬件开发涉及到技术的应用、器件的选择等,必须遵照相应的规范化措施才能达到质量保障的要求。这主要表现在,技术的采用要经过总体组的评审,器件和厂家的选择要参照物料认证部的相关文件,开发过程完成相应的规定文档,另外,常用的硬件电路(如ID.WDT)要采用通用的标准设计。
1.2 硬件工程师职责与基本技能 1.2.1 硬件工程师职责
一个技术领先、运行可靠的硬件平台是公司产品质量的基础,硬件工程师职责神圣,责任重大。
1、硬件工程师应勇于尝试新的先进技术,在产品硬件设计中大胆创新。 2、坚持采用开放式的硬件架构,把握硬件技术的主流和未来发展,在设计中考虑将来的技术升级。
3、充分利用公司现有的成熟技术,保持产品技术上的继承性。 4、在设计中考虑成本,控制产品的性能价格比达至最优。 5、技术开放,资源共享,促进公司整体的技术提升。
1.2.2 硬件工程师基本素质与技术
硬件工程师应掌握如下基本技能:
1、由需求分析至总体方案、详细设计的设计创造能力;
2、熟练运用设计工具,设计原理图、EPLD、FPGA 调试程序的能力;
参考.资料
.. .. .. ..
3、运用仿真设备、示波器、逻辑分析仪调测硬件的能力;
4、掌握常用的标准电路的设计能力,如ID 电路、WDT 电路、π型滤波电路、高速信号传输线的匹配电路等;
5、故障定位、解决问题的能力; 6、文档的写作技能;
7、接触供应商、保守公司机密的技能。
2 软硬件开发规范化管理
2.1 硬件开发流程
2.1.1 硬件开发流程文件介绍
硬件开发的规范化是一项重要内容。硬件开发规范化管理是在公司的《硬件开发流程》及相关的《硬件开发文档规范》、《PCB 投板流程》等文件中规划的。
硬件开发流程是指导硬件工程师按规范化方式进行开发的准则,规范了硬件开发的全过程。硬件开发流程制定的目的是规范硬件开发过程控制,硬件开发质量,确保硬件开发能按预定目的完成。
硬件开发流程不但规范化了硬件开发的全过程,同时也从总体上,规定了硬件开发所应完成的任务。做为一名硬件工程师深刻领会硬件开发流程中各项内容,在日常工作中自觉按流程办事,是非常重要的。所有硬件工程师应把学流程、按流程办事、发展完善流程、监督流程的执行作为自己的一项职责,为
参考.资料
.. .. .. ..
公司的管理规范化做出的贡献。
2.1.2 硬件开发流程详解
硬件开发流程对硬件开发的全过程进行了科学分解,规范了硬件开发的五大任务。
硬件需求分析 硬件系统设计 硬件开发及过程控制 系统联调
文档归档及验收申请。
1. 硬件需求分析
项目组接到任务后,首先要做的硬件开发工作就是要进行硬件需求分析,撰写硬件需求规格说明书。硬件需求分析在整个产品开发过程中是非常重要的一环,硬件工程师更应对这一项内容加以重视。一项产品的性能往往是由软件和硬件共同完成的,哪些是由硬件完成,哪些是由软件完成,项目组必须在需求时加以细致考虑。
硬件需求分析主要有下列内容: 系统工程组网及使用说明 基本配置及其互连方法 运行环境
硬件系统的基本功能和主要性能指标
参考.资料
.. .. .. ..
功能模块的划分 关键技术的攻关
外购硬件的名称型号、生产单位、主要技术指标 主要仪器设备
可靠性、稳定性、电磁兼容讨论 电源、工艺结构设计 硬件测试方案 2.硬件总体设计
硬件总体设计的主要任务就是从总体上进一步划分各单板的功能以及硬件的总体结构描述,规定各单板间的接口及有关的技术指标。硬件总体设计主要有下列内容:
系统功能及功能指标 系统总体结构图及功能划分 单板命名 系统逻辑框图
组成系统各功能块的逻辑框图,电路结构图及单板组成 单板逻辑框图和电路结构图 关键技术讨论 关键器件
从上可见,硬件开发总体方案把整个系统进一步具体化。硬件开发总体设计是最重要的环节之一。总体设计不好,可能出现致命的问题,造成的损失有
参考.资料
.. .. .. ..
许多是无法挽回的。
3. 硬件开发及过程控制。
一个好的产品,特别是大型复杂产品,总体方案进行反复论证是不可缺少的。只有经过多次反复论证的方案,才可能成为好方案。
总体审查包括两部分,一是对有关文档的格式,内容的科学性,描述的准确性以及详简情况进行审查。再就是对总体设计中技术合理性、可行性等进行审查。如果评审不能通过,项目组必须对自己的方案重新进行修订。
硬件总体设计方案通过后,即可着手关键器件的申购,主要工作由项目组来完成。关键器件落实后,即要进行结构电源设计、单板总体设计。
单板总体设计需要项目与CAD 配合完成。单板总体设计过程中,对电路板的布局、走线的速率、线间干扰以及EMI 等的设计应与CAD 室合作。CAD 室可利用相应分析软件进行辅助分析。单板总体设计完成后,出单板总体设计方案书。总体设计主要包括下列内容:
单板在整机中的的位置:单板功能描述 单板尺寸
单板逻辑图及各功能模块说明 单板软件功能描述 单板软件功能模块划分 接口定义及与相关板的关系 重要性能指标、功耗及采用标准 开发用仪器仪表等
参考.资料
.. .. .. ..
每个单板都要有总体设计方案,且要经过总体办和管理办的联系评审。否则要重新设计。只有单板总体方案通过后,才可以进行单板详细设计。
单板详细设计包括两大部分: 单板软件详细设计 单板硬件详细设计
单板软、硬件详细设计,要遵守公司的硬件设计技术规范,必须对物料选用,以及成本控制等上加以注意。
不同的单板,硬件详细设计差别很大。但应包括下列部分: 单板整体功能的准确描述和模块的精心划分。 接口的详细设计。
关键元器件的功能描述及评审,元器件的选择。 符合规范的原理图及PCB 图。 对PCB 板的测试及调试计划。
单板详细设计要撰写单板详细设计报告。
详细设计报告必须经过审核通过。单板软件的详细设计报告由管理办组织审查,而单板硬件的详细设计报告,则要由总体办、管理办、CAD 室联合进行审查,如果审查通过,方可进行PCB 板设计,如果通不过,则返回硬件需求分析处,重新进行整个过程。这样做的目的在于让项目组重新审查一下,某个单板详细设计通不过,是否会引起项目整体设计的改动。
如单板详细设计报告通过,项目组一边要与计划处配合准备单板物料申购,一方面进行PCB 板设计。PCB 板设计需要项目组与CAD 室配合进行,
参考.资料
.. .. .. ..
PCB 原理图是由项目组完成的,而PCB 画板和投板的管理工作都由CAD 室完成。PCB投板有专门的PCB 样板流程。PCB 板设计完成后,就要进行单板硬件过程调试,调试过程中要注意多记录、总结,勤于整理,写出单板硬件过程调试文档。当单板调试完成,项目组要把单板放到相应环境进行单板硬件测试,并撰写硬件测试文档。如果PCB 测试不通过,要重新投板,则要由项目组、管理办、总体办、CAD 室联合决定。
4. 系统联调
在结构电源,单板软硬件都已完成开发后,就可以进行联调,撰写系统联调报告。联调是整机性能提高,稳定的重要环节,认真周到的联调可以发现各单板以及整体设计的不足,也是验证设计目的是否达到的唯一方法。因此,联调必须预先撰写联调计划,并对整个联调过程进行详细记录。只有对各种可能的环节验证到才能保证机器走向市场后工作的可靠性和稳定性。联调后,必须经总体办和管理办,对联调结果进行评审,看是不是符合设计要求。如果不符合设计要求将要返回去进行优化设计。
如果联调通过,项目要进行文件归档,把应该归档的文件准备好,经总体办、管理办评审,如果通过,才可进行验收。
总之,硬件开发流程是硬件工程师规范日常开发工作的重要依据,全体硬件工程师必须认真学习。
2.2 硬件开发文档规范
2.2.1 硬件开发文档规范文件介绍
参考.资料
.. .. .. ..
为规范硬件开发过程中文档的编写,明确文档的格式和内容,规定硬件开发过程中所需文档清单,与《硬件开发流程》对应制定了《硬件开发文档编制规范》。开发人员在写文档时往往会漏掉一些该写的内容,编制规范在开发人员写文档时也有一定的提示作用。规范中共列出以下文档的规范:
硬件需求说明书 硬件总体设计报告 单板总体设计方案 单板硬件详细设计 单板软件详细设计 单板硬件过程调试文档 单板软件过程调试文档 单板系统联调报告 单板硬件测试文档 硬件信息库
这些规范的具体内容可在HUAWEI 服务器中资料库中找到,对应每个文档规范都有相应的模板可供开发人员在写文档时“填空”使用。
2.2.2 硬件开发文档编制规范详解
1、硬件需求说明书
硬件需求说明书是描写硬件开发目标,基本功能、基本配置,主要性能指标、 运行环境,约束条件以及开发经费和进度等要求,它的要求依据是产品规格说明书和系统需求说明书。它是硬件总体设计和制订硬件开发计划的依据,
参考.资料
.. .. .. ..
具体编写的内容有:硬件整体系统的基本功能和主要性能指标、硬件分系统的基本功能和主要性能指标以及功能模块的划分等。
2、硬件总体设计报告
硬件总体设计报告是根据需求说明书的要求进行总体设计后出的报告,它是硬件详细设计的依据。编写硬件总体设计报告应包含以下内容:
系统总体结构及功能划分,系统逻辑框图、组成系统各功能模块的逻辑框图,电路结构图及单板组成,单板逻辑框图和电路结构图,以及可靠性、安全性、电磁兼容性讨论和硬件测试方案等。
3、单板总体设计方案
在单板的总体设计方案定下来之后应出这份文档,单板总体设计方案应包含单板版本号,单板在整机中的位置、开发目的及主要功能,单板功能描述、单板逻辑框图及各功能模块说明,单板软件功能描述及功能模块划分、接口简单定义与相关板的关系,主要性能指标、功耗和采用标准。
4、单板硬件详细设计
在单板硬件进入到详细设计阶段,应提交单板硬件详细设计报告。在单板硬件详细设计中应着重体现:单板逻辑框图及各功能模块详细说明,各功能模块实现方式、地址分配、控制方式、接口方式、存贮器空间、中断方式、接口管脚信号详细定义、时序说明、性能指标、指示灯说明、外接线定义、可编程器件图、功能模块说明、原理图、详细物料清单以及单板测试、调试计划。有时候一块单板的硬件和软件分别由两个开发人员开发,因此这时候单板硬件详细设计便为软件设计者提供了一个详细的指导,因此单板硬件详细设计报告至
参考.资料
.. .. .. ..
关重要。尤其是地址分配、控制方式、接口方式、中断方式是编制单板软件的基础,一定要详细写出。
5、单板软件详细设计
在单板软件设计完成后应相应完成单板软件详细设计报告,在报告中应列出完成单板软件的编程语言,编译器的调试环境,硬件描述与功能要求及数据结构等。要特别强调的是:要详细列出详细的设计细节,其中包括中断、主程序、子程序的功能、入口参数、出口参数、局部变量、函数调用和流程图。在有关通讯协议的描述中,应说明物理层,链路层通讯协议和高层通讯协议由哪些文档定义。
6、单板硬件过程调试文档
开发过程中,每次所投PCB 板,工程师应提交一份过程文档,以便管理阶层了解进度,进行考评,另外也给其他相关工程师留下一份有参考价值的技术文档。每次所投PCB 板时应制作此文档。这份文档应包括以下内容:单板硬件功能模块划分,单板硬件各模块调试进度,调试中出现的问题及解决方法,原始数据记录、系统方案修改说明、单板方案修改说明、器件改换说明、原理图、PCB 图修改说明、可编程器件修改说明、调试工作阶段总结、调试进展说明、下阶段调试计划以及测试方案的修改。
7、单板软件过程调试文档
每月收集一次单板软件过程调试文档,或调试完毕(指不满一月)收集,尽可能清楚,完整列出软件调试修改过程。单板软件过程调试文档应当包括以下内容:单板软件功能模块划分及各功能模块调试进度、单板软件调试出现问
参考.资料
.. .. .. ..
题及解决、下阶段的调试计划、测试方案修改。
8、单板系统联调报告
在项目进入单板系统联调阶段,应出单板系统联调报告。单板系统联调报告包括这些内容:系统功能模块划分、系统功能模块调试进展、系统接口信号的测试原始记录及分析、系统联调中出现问题及解决、调试技巧集锦、整机性能评估等。
9、单板硬件测试文档
在单板调试完之后,申请内部验收之前,应先进行自测以确保每个功能都能实现,每项指标都能满足。自测完毕应出单板硬件测试文档,单板硬件测试文档包括以下内容:单板功能模块划分、各功能模块设计输入输出信号及性能参数、各功能模块测试点确定、各测试参考点实测原始记录及分析、板内高速信号线测试原始记录及分析、系统I/O 口信号线测试原始记录及分析,整板性能测试结果分析。
10、硬件信息库
为了共享技术资料,我们希望建立一个共享资料库,每一块单板都希望将的最有价值最有特色的资料归入此库。硬件信息库包括以下内容:典型应用电路、特色电路、特色芯片技术介绍、特色芯片的使用说明、驱动程序的流程图、源程序、相关硬件电路说明、PCB 布板注意事项、单板调试中出现的典型及解决、软硬件设计及调试技巧。
参考.资料
.. .. .. ..
2.3 与硬件开发相关的流程文件介绍
与硬件开发相关的流程主要有下列几个:
项目立项流程 项目实施管理流程 软件开发流程 系统测试工作流程 中试接口流程 内部接收流程
2.3.1 项目立项流程:
是为了加强立项管理及立项的科学性而制定的。其中包括立项的论证、审核分析,以期做到合理进行开发,合理进行资源分配,并对该立项前的预研过程进行规范和管理。立项时,对硬件的开发方案的审查是重要内容。
2.3.2 项目实施管理流程:
主要定义和说明项目在立项后进行项目系统分析和总体设计以及软硬件开发和内部验收等的过程和接口,并指出了开发过程中需形成的各种文档。该流程包含着硬件开关、软件开发、结构和电源开发、物料申购并各分流程。
2.3.3 软件开发流程:
与硬件开发流程相对应的是软件开发流程,软件开发流程是对大型系统软件开发规范化管理文件,流程目的在对软件开发实施有效的计划和管理,从而进一步提高软件开发的工程化、系统化水平,提高XXXX 公司软件产品质量和
参考.资料
.. .. .. ..
文档管理水平,以保证软件开发的规范性和继承性。软件开发与硬件结构密切联系在一起的。一个系统软件和硬件是相互关联着的。
2.3.4 系统测试工作流程:
该流程规定了在开发过程中系统测试过程,描述了系统测试所要执行的功能,输入、输出的文件以及有关的检查评审点。它规范了系统测试工作的行为,以提高系统测试的可控性,从而为系统质量保证提供一个重要手段。
项目立项完成,成立项目组的同时要成立对应的测试项目组。在整个开发过程中,测试可分为三个阶段,单元测试、集成测试、系统测试。测试的主要对象为软件系统。
2.3.5 内部验收流程
制定的目的是加强内部验收的规范化管理,加强设计验证的控制,确保产品开发尽快进入中试和生产并顺利推向市场。项目完成开发工作和文档及相关技术资料后,首先准备测试环境,进行自测,并向总体办递交《系统测试报告》及项目验收申请表,总体办审核同意项目验收申请后,要求项目组确定测试项目,并编写《测试项目手册》。测试项目手册要通过总体办组织的评审,然后才组成专家进行验收。
由上可见,硬件开发过程中,必须提前准备好文档及各种技术资料,同时在产品设计时就必须考虑到测试。
参考.资料
.. .. .. ..
3 附录一. 硬件设计流程图:
阶段 硬件 需求 评估 硬件 详细 设计 硬件 实现 测试 流程图 硬件测试计划 硬件需求分析(包括技术风险评估) 表单 硬件需求分析报告 硬件开发计划 硬件测试计划 硬件开发计划和配置管理计划 详细硬件设计 硬件原理图设计 内部设计评审 硬件详细设计说明书 硬件电路原理图 硬件BOM 元器件规格书 硬件设计内部评审记录 硬件PCB电路图 三维装配图 软件源代码 硬件单元调试分析报告 电装总结报告 硬件系统测试分析报告 测试用例 硬件评审验证报告 发布版本 PCB毛坯图设计 关键器件采购 PCB布板流程 投板前审查 打样、试产 软件编写 硬件调试 硬件内部评审 硬件修改 整机测试 评审后发布并归档 参考文件: 1、 PCB布板流程图 2、 LCD认证流程图 参考.资料
.. .. .. ..
4 附录二. 软件设计流程图:
阶段软件需求分析软件详细设计单元源代码编码调试单元调试报告单元测试用例编写测试用例单元测试分析报告集成后的软件及源代码软件集成调试报告系统测试软件系统测试用软件文档发布系统测试版本软件系统测试软件系统测试分析报告软件评审验证报告发布版本软件修订详细软件设计流程图软件需求分析(包括技术风险评估)表单软件需求规格书软件开发计划软件测试计划软件开发计划和配置管理计划软件测试计划软件详细设计说明书软件接口设计说明书软件设计内部评审记录内部设计评审软件实现测试单元测试软件集成/调试评审后发布并归档参考文件:参考.资料
.. .. .. ..
5 附录三. 编程规范
单板软件编程规范
目的:为了开发人员之间更好地进行交流,提高代码的可读性,可维护性,特制订本规范,作为程序编写的指导文件。本规范只涉及到源码书写的格式,希望能有较统一的编程风格。将来若有和公司相关规定冲突的地方,本规范有可能作适当修改。
1。模块描述
模块是为了实现某一功能的函数的集合,文件名使用缺省的后缀,在每一模块的开头应有如下的描述体:
/********************************************************************
* PROJECT CODE :项目代号或名称 * CREATE DATE :创建日期 * CREATED BY :创建人 * FUNCTION * MODIFY DATE
:模块功能 :修改日期
* DOCUMENT :参考文档 * OTHERS
:程序员认为应做特别说明的部分,如特别的编译开关
********************************************************************/
参考.资料
.. .. .. ..
不同的修改人应在修改的地方加上适当的注释,包括修改人的姓名。另
外,如有必要,要注明模块的工作平台,如单板OS、DOS、WINDOWS等。注明适用的编译器和编译模式。
2。函数描述
函数是组成模块的单元,一般用来完成某一算法或控制等。在每一函数
的开头应有如下的描述体:
/********************************************************************
* FUNCTION NAME:函数名称 * CREATE DATE :创建日期 * CREATED BY :创建人
* FUNCTION :函数功能 * MODIFY DATE :修改日期
* INPUT :输入参数类型(逐个说明)
* OUTPUT :输出参数类型(逐个说明) * RETURN :返回信息
********************************************************************/
可选的描述有:
* RECEIVED MESSAGES:收到的消息 * SENT MESSAGES :发送的消息
* DATABASE ACCESS :存取的数据库 * CALLED BY :该函数的调用者
参考.资料
.. .. .. ..
* PROCEDURES CALLED:调用的过程 * RECEVED PRIMITIVES : 收到的原语 * SENT PRIMITIVES : 发送的原语
及其它程序员认为应有的描述。标题可以只大写第一个字母。例如:Function Name:
3。命名规则:
A) 函数: 函数名应能体现该函数完成的功能,关键部分应采用完整的
单词,辅助部分若太长可采用缩写,缩写应符合英文的规范。每个单词的第一个字母大写。如:ShowPoints,CtrlDestBoard,SendResetMsg 等。
B) 变量: 变量的命名规则部分采用匈牙利命名规则(鼓励完全使用匈牙利名规则)。变量的第一个或前两个字母小写,表示其数据类型,其后每个词的第一个字母大写。推荐的类型前缀如下:
前缀 a b by c cb cr cx,cy 含义 数组 BOOL BYTE char 字节记数 颜色参考值 短型(x,y长度的前缀 n np p l lp s sz 含义 short int 短指针 指针 LONG 长指针 串 以零结尾的串 参考.资料
.. .. .. ..
记数) dw fn h DWORD 函数 HANDLE tm w x,y 文本 WORD 短型(x或y的坐标) i m_
如iCurrentValue,uTransitionCount 等。对于其他复合类型或自定义类型,请用适当的前缀来表示。除局部循环变量外,不鼓励单个字母的变量名。
对于常用的类型定义,尽量使用WORD、BOOL、LPWORD、VOID、FAR、NEAR等惯用写法,避免使用char、long、void、far、near等小写格式。不使用_UC、 _UL等XXXX公司以前一些人的习惯写法。
C) 结构:结构的定义有两个名称,一个是该结构的类型名,一个是变量
int 类的数据成员 g_ uc 全局变量 unsigned char 名。按照C语言的语法,这两个名称都是可选的,但二者必有其一。我们要求写类型名,类型名以tag做前缀。下面是一个例子:
struct tagVBXEVENT {
HCTL HWND
hControl; hWindow;
参考.资料
.. .. .. ..
int int
nID;
nEventIndex;
LPCSTR lpEventName; int
nNumParams;
lpParamList;
LPVOID
}veMyEvent;
tagVBXEVENT veMyEvent[MAXEVENTTYPE], *lpVBXEvent;
对于程序中常用的结构,希望能使用 typedef 定义,格式如下: typedef struct tagMYSTRUCT {
struct members .......
} TMYSTRUCT,* PTMYSTRUCT,FAR * LPTMYSTRUCT;
struct 后的类型名有tag前缀,自定义的结构名称一律用大写字母,前面可以加一大写的T。而结构类型变量定义则可以写为:
TMYSTRUCT variablename;
并可在定义 MYSTRUCT_S 同时根据需要,定义其指针,远指针和尺寸常量:
typedef tagMYSTRUCT {
struct members … …
参考.资料
.. .. .. ..
}TMYSTRUCT,* PTMYSTRUCT,FAR * LPTMYSTRUCT; #define MYSTRUCTSIZE sizeof ( TMYSTRUCT );
结构变量的命名,建议采用如下方式:
从结构名中,取出二至三个词的首字母作为代表此结构的缩写,小写作
缀。例如:(取自Microsoft Windows示例) struct OPENFILENAME ofnMyFile strcut CHOOSECOLOR ccScreenColor
为变量前
D) 联合:联合的命名规则和结构相似,如: union tagMYEXAMPLE {
int long
iInteger; lLongInt;
} myExample;
typedef tagMYEXAMPLE {
int iInteger; long lLongInt;
} MYEXAMPLE,* PMYEXAMPLE,FAR * LPMYEXAMPLE;
参考.资料
.. .. .. ..
4。书写风格:
A) 函数:函数的返回类型一定要写,不管它是否默认类型,函数的参数
之间应用一逗号加一空格隔开,若有多个参数,应排列整齐。例如:
int SendResetMsg( PTLAPENTITY pLAPEntity, int iErrorNo ) { }
函数的类型和上下两个括号应从第一列开始,函数的第一行应缩进一个
int iTempValue;
. . .
TAB,不得用空格缩进。(按大多数程序范例,TAB为四个字符宽,我们规定:TAB为四个字符宽。)
B) 语句:循环语句和if语句等块语句的第一个大括号‘{’可跟在第一
行的后面,接下来的语句应缩进一个TAB,如:
for ( count = 0 ; count < MAXLINE ; count++ ) {
if ( (count % PAGELINE) == 0 ) {
. . .
参考.资料
.. .. .. ..
} }
. .
也可另起一行,如:
for ( count = 0 ; count < MAXLINE ; count++ )
{
if ( (count % PAGELINE) == 0 ) {
. . .
} }
. .
两种写法在世界著名的程序员手下均可见到,我们尊重个人的习惯,但推荐使用后一种写法。
复杂表达式(两个运算符以上,含两个)必须用括号区分运算顺序,运算符
的前后应各有一空格,习惯写在一行的几个语句(如IF语句),中间应有一空格,其它语句不鼓励写在同一行。
参考.资料
.. .. .. ..
空格加在适当的地方,如 if ( ; for ( ; ) {; 语句的上下对齐也可使程序便于阅读,如: myStruct.iFirstNumber
= 0;
= 1;
myStruct.lSecondNumber myStruct.pThePoint
= NULL;
C) 常量:常量一般情况下可用宏定义,用大写的方式,单词之间用下划
线隔开 如:
#define MAX_LINE 100 #define PI
3.1415926
不鼓励在程序中出现大量的数字常数。
注:对于一些有必要说明的缩写,可以在模块描述内加以说明。 5。 头文件:
头文件一般包括了数据结构的定义,函数原形的说明,宏定义等,不许包含函数体和变量实体,文件名使用缺省的后缀.h,不使用类似.DEF等非标准的后缀名,头文件的开始可包括如下的注释:
/******************************************************************** * CREATE DATE:创建日期
*
* CREATED BY :创建人
*
* MODIFIED BY :修改人
参考.资料
.. .. .. ..
*
* USED BY :由哪些模块使用
*
********************************************************************/
为了避免重编译,应加上条件编译语句,如文件headfille.h应包含下列
语句:
#ifndef __HEADFILE_H #define __HEADFILE_H
. . .
#endif
6¡£ 预编译宏:对于代码中使用到的预编译宏,应在文件的适当处加以
说明。对于连续多行的宏,在书写上也采用缩进的格式。例如: #ifdef _BORLANDC_
#define FAR
far
near
#define NEAR #ifdef OS_DEBUG #define HHH
#define JJJ #undef KKK
0x11 0x22
参考.资料
.. .. .. ..
#endif #else
#define FAR #define NEAR #endif
对于夹在代码中的编译开关,在书写格式上当作源代码一样处理。例如: …
lpPrim = (LPTL2L1PRIM)GetMessage( &queL2L1 ); if( lpPrim == NULL ) {
#if OS_DEBUG
Printf(“Queue L2->L1 is empty!” ); #endif return; } …
7。注释:
注释是源码中非常重要的部分,不应少于源码行数的15%,我们希望能达到25%或更多。注释用中英文都可以,但应易读易懂。不要在一个语句的中间插入注释。
参考.资料
.. .. .. ..
本规范内容符合公司有关文档要求,参照了北京研究部的相关文档,并
听取了大家的意见,希望诸位在软件开发过程中,能主动遵照本规范,写出高质量的源码!
附 页
本附页的内容不是“软件编程规范”的一部分,但对于较大的软件,值得推荐。
1。接口函数(被其它模块调用的函数)及接口变量(被其它模块引用的变量),其命名可增加前缀表明其所归属的模块。
如:NLS_MsgProc, NLP_GetPHTime,
NLS_LogcnToConnid ...
由于C的函数都是全程的,其它函数也建议增加前缀来避免重名或混淆。
2。头文件分开定义
A) 自用头文件:定义模块自用的函数,结构,变量等。
B) 输出头文件:用于该模块向外输出,即别的模块在使用该模块提供功能时需要引用的头文件,包含该模块的输出函数和输出数据结构,输出常量。
参考.资料
.. .. .. ..
3。建议在使用有一定关联的成组常量时使用枚举定义: typedef enum {
MONDAY, ..... SUNDAY,
} WEEKDAY;
在有特殊数值要求时在枚举内定义: typedef enum {
MONDAY = 1, ....... SUNDAY = 7,
} WEEKDAY;
好处:容易理解有关联的常量;枚举变量可以当作整型变量使用。
参考.资料
因篇幅问题不能全部显示,请点此查看更多更全内容