嵌入式软件编程规范
- 格式:doc
- 大小:341.50 KB
- 文档页数:43
codesys 编程使用指南Codesys是一种常用的编程工具,用于开发和编写嵌入式系统的控制程序。
本文将为读者提供一份Codesys编程使用指南,帮助初学者快速入门并掌握基本的编程技巧。
一、Codesys简介Codesys是一种基于IEC 61131-3标准的集成开发环境(IDE),支持多种编程语言,包括结构化文本(ST)、图表(IL)、功能块图(FBD)、连续功能图(CFC)和顺序功能图(SFC)。
它可以在不同的硬件平台上运行,并与多种通信协议兼容。
二、Codesys安装和配置1. 下载Codesys软件并按照安装向导进行安装。
2. 打开Codesys软件,选择合适的硬件平台和通信协议。
3. 配置硬件设备的参数,如IP地址、端口号等。
4. 创建一个新项目,选择编程语言和存储位置。
三、Codesys编程基础1. 了解IEC 61131-3编程规范,熟悉不同的编程语言和它们的特点。
2. 学习如何声明和定义变量,包括数据类型、范围和初始值。
3. 掌握条件语句(如if-else)和循环语句(如for和while),用于控制程序的流程。
4. 学习如何定义和调用函数块,实现代码的模块化和重用。
5. 掌握如何使用定时器和计数器,实现定时任务和计数功能。
6. 学习如何处理错误和异常情况,编写健壮的程序代码。
7. 熟悉调试工具和技巧,能够有效地定位和修复程序中的错误。
四、Codesys高级编程技巧1. 学习如何使用结构体和数组,组织和管理复杂的数据结构。
2. 掌握面向对象编程(OOP)的基本概念和技巧,提高代码的可维护性和重用性。
3. 学习如何与外部设备进行通信,包括传感器、执行器和其他控制系统。
4. 了解代码优化和性能调优的技术,提高程序的执行效率和响应速度。
5. 学习如何进行版本控制和团队协作,保证多人开发的代码质量和一致性。
五、Codesys实例应用1. 开发一个简单的闹钟程序,实现定时提醒功能。
2. 设计一个温度控制系统,根据温度传感器的数值调整加热器的功率。
嵌入式软件需求规范篇一:嵌入式编程规范嵌入式编程规范1 基本要求1) 程序结构清晰,简单易懂,单个函数的程序行数不得超过100行,每行代码不得超过100列。
2) 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。
3) 尽量使用标准库函数和公共函数。
4) 不要随意定义全局变量,尽量使用局部变量。
5) 使用括号以避免二义性。
2 可读性要求1) 可读性第一,效率第二。
2) 保持注释与代码完全一致。
3) 每个源程序文件,都有文件头说明,说明规格见规范。
4) 每个函数,都有函数头说明,说明规格见规范。
5) 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。
6) 常量定义(DEFINE)有相应说明。
7) 处理过程的每个阶段都有相关注释说明。
8) 在典型算法前都有注释。
9) 用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 4个字节。
10) 循环、分支层次不要超过五层。
11) 注释可以与语句在同一行,也可以在上行。
12) 空行和空白字符也是一种特殊注释。
13) 一目了然的语句不加注释。
14) 注释的作用范围可以为:定义、引用、条件分支以及一段代码。
15) 注释行数(不包括程序头和函数头说明部份)应占总行数的 1/5 到 1/3 。
3 结构化要求1) 禁止出现两条等价的支路。
2) 禁止GOTO语句。
3) 用 IF 语句来强调只执行两组语句中的一组。
禁止 ELSE GOTO 和 ELSERETURN。
4) 用 CASE 实现多路分支。
5) 避免从循环引出多个出口。
6) 函数只有一个出口。
7) 不使用条件赋值语句。
8) 避免不必要的分支。
9) 不要轻易用条件分支去替换逻辑表达式。
4 正确性与容错性要求1) 程序首先是正确,其次是优美。
2) 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。
3) 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
MISRA--作为工业标准的C编程规范(嵌入式c开发者必读)MISRA--作为工业标准的C编程规范MISRA (The Motor Industry Software Reliability Association 汽车工业软件可靠性联会) 是位于英国的一个跨国汽车工业协会,其成员包括了大部分欧美汽车生产商。
其核心使命是为汽车工业提供服务和协助,帮助厂方开发安全的、高可靠性的嵌入式软件。
这个组织最出名的成果是所谓的MISRA C Coding Standard,这一标准中包括了127条C语言编码标准,通常认为,如果能够完全遵守这些标准,则你的C代码是易读、可靠、可移植和易于维护的。
最近很多嵌入式开发者都以MISRA C来衡量自己的编码风格,比如著名的uC/OS-II就得意地宣称自己99%遵守MISRA标准。
而《嵌入式开发杂志》也专门载文号召大家学习。
编码规范通常是一个公司自定的“土政策”,居然有人去做标准,而且还得到广泛的认可,这不禁引起我强烈的兴趣。
可惜这份标准的文本需要花钱去买,而且短短几十页,要价非常昂贵。
MISRA 在网上公布了一些文档,其中有关于MISRA C Coding Standard的Clarification报告,从中间你可以大致猜到MISRA标准本身是什么。
我仔细阅读了这些文档,并且通过阅读其他一些介绍性文档,大致了解了MISRA标准的主要内容。
这些条款确有过人之处,对于C/C++语言工程项目的代码质量管理能够起到良好的指导性作用,对于大部分软件开发企业来说,在MISRA的基础上适当修改就可以形成自己的规范。
当然其中也有一些过于严苛的东西,这就需要各个开发部门灵活处理了。
我个人的体会,编码规范虽然很简单,但是要完全执行,不折不扣,需要开发部门有很高的组织性和纪律性,并且有很好的代码评审机制。
因此,如果能够严格地遵守编码规范,本身就是一个开发部门实力的证明。
这里不可能将所有规则一一列出(事实上正式文本我一条也没看到),只列出一些比较有意思的条款,让大家有机会了解MISRA的风格。
嵌入式系统标准
嵌入式系统标准是指导嵌入式系统开发和应用的一系列规范、标准和协议。
这些标准涵盖了硬件、软件、通信和接口等方面,旨在确保嵌入式系统的可靠性、安全性和互操作性。
以下是一些常见的嵌入式系统标准:
1. 硬件标准:包括处理器架构、内存和存储、电源管理、接口和连接等方面的规范。
例如,ARM架构是一种广泛应用于嵌入式系统的处理器架构,而PCI Express(PCIe)则是一种高速串行计算机扩展总线标准。
2. 软件标准:包括操作系统、编程语言、中间件和应用程序接口(API)等方面的规范。
例如,实时操作系统(RTOS)是一种专门为嵌入式系统设计的操作系统,而C语言和C++语言则是嵌入式系统开发中常用的编程语言。
3. 通信标准:包括有线和无线通信协议、网络协议和数据传输协议等方面的规范。
例如,TCP/IP协议是一种常用的网络通信协议,而蓝牙和Wi-Fi则是常见的无线通信协议。
4. 接口标准:包括物理接口、电气接口和数据接口等方面的规范。
例如,USB接口是一种通用的串行总线接口标准,而I2C和SPI则是常用的串行通信接口标准。
5. 安全标准:包括加密、身份验证和访问控制等方面的规范。
例如,SSL/TLS协议是一种常用的网络安全协议,而AES算法则是一种广泛应用的加密算法。
这些标准通常由国际标准化组织(ISO)、国际电工委员会(IEC)、IEEE(电气电子工程师协会)和其他行业组织制定和推广。
遵守这些标准可以帮助开发者提高嵌入式系统的质量和效率,降低成本和风险,并促进不同系统之间的互操作性和兼容性。
pclint misra c 标准的要求-回复PCLint是一款静态代码分析工具,常用于C语言和C++代码的检查。
而MISRA C是一套C语言编程规范,它旨在提高软件质量、可靠性与可维护性。
本文将探讨PCLint在MISRA C标准中的要求,并详细介绍如何使用PCLint进行MISRA C规范的静态代码检查。
1. MISRA C标准简介MISRA C是由Motor Industry Software Reliability Association (MISRA)制定的一套面向嵌入式系统的C语言编程规范。
它旨在改善编码质量、提高软件的可靠性和可维护性,规范了C语言的语法和编码风格。
2. PCLint介绍PCLint是由Gimpel Software开发的C/C++静态代码分析工具。
它能够检查代码中的潜在问题和编程错误,并生成详细的报告,指导开发人员进行代码质量的改进。
3. PCLint与MISRA C规范的结合PCLint提供了针对MISRA C规范的专门配置文件,并能够对代码进行准确的静态分析。
通过使用PCLint的MISRA C配置文件,可以更容易地检查代码是否符合MISRA C标准中的要求。
4. PCLint对MISRA C规范的主要要求- 命名规则:变量、函数和宏的命名必须符合特定规范,如使用小写字母和下划线。
- 语法要求:代码必须符合MISRA C提出的语法规则,如禁止使用某些语言特性和语法结构。
- 数据类型:确保使用符合要求的数据类型,并禁止使用不安全的类型转换。
- 注释和文档:代码必须进行适当的注释,以提高代码的可读性和可维护性。
- 错误处理:对于可能发生错误的操作,必须进行适当的错误处理,如检查返回值和处理异常。
- 代码复杂性:代码的复杂性必须控制在合理的范围内,以确保代码的清晰性和可理解性。
- 嵌入式编程相关:对于嵌入式系统开发,还有一些特定的规范要求,如中断处理、内存管理等。
5. 使用PCLint进行MISRA C规范检查的步骤- 配置PCLint环境:下载和安装PCLint,并获取最新的MISRA C配置文件。
嵌入式软件设计嵌入式软件设计是指为嵌入式系统设计开发软件程序的过程。
嵌入式系统是一种特殊的计算机系统,它旨在执行特定任务,并通常涉及与物理世界的交互。
常见的嵌入式系统包括现代汽车、数字相机、智能手机、路由器、交通信号灯和医疗设备等。
这些设备需要高度优化、可靠且高效的软件,以便能够正确地执行其功能。
在开始嵌入式软件设计之前,首先要确定系统的架构和需求。
架构涉及处理器选择、内存容量、存储器、输入/输出接口和各种系统总线等。
需求涉及系统功能、性能、安全、可靠性和易用性等方面。
这些因素都将影响软件设计和开发的过程。
嵌入式软件通常是使用低级编程语言(如C或汇编语言)编写的。
低级语言允许程序员直接控制硬件的配置和操作。
这样可以最大程度地优化程序的性能和资源使用效率。
然而,低级编程语言也非常容易出错,因此需要进行精心的测试和调试工作。
在嵌入式软件设计的过程中,还需要考虑到多线程、中断处理、存储器管理和通信协议等方面。
多线程可以提高系统的并发性和响应能力,但也容易引入bug和死锁等问题。
中断处理可以确保在紧急情况下及时响应事件,但也可能会影响系统的稳定性。
存储器管理可以确保软件的内存使用高效,并确保不会发生内存泄漏和缓冲区溢出等问题。
通信协议可以确保与其他设备和系统之间的通信正确进行。
除了开发软件之外,还需要对软件进行测试和调试。
测试可以检测软件中的缺陷和错误,并帮助程序员调整代码以更好地满足预期的功能和性能要求。
调试可以帮助程序员快速定位问题并进行纠正。
最后,为了确保飞行安全和质量控制等方面的要求,嵌入式软件应符合国际标准和规范,例如RTCA-DO-178C(飞机软件开发的安全认证标准)和ISO 26262(汽车软件开发的安全认证标准)。
总之,嵌入式软件设计需要开发人员经过深思熟虑和严谨的方法来开发高效、高可靠性的软件程序。
这需要程序员具备一定的专业知识和技能,同时也需要完善的软件开发流程和测试方法。
只有这样,才能保证嵌入式系统的安全性和正常运行,同时也满足客户的需求和期望。
学习MISRAC邵贝贝等编者按:C语言是开发嵌入式应用的主要工具,然而C语言并非是专门为嵌入式系统设计,相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。
1998 年,MISRA指出,一些在C看来可以接受,却存在安全隐患的地方有127处之多。
2004年,MISRA对C的限制增加到141条。
嵌入式系统应用工程师借用计算机专家创建的C语言,使嵌入式系统应用得以飞速发展,而MISRAC是嵌入式系统应用工程师对C语言嵌入式应用做出的贡献。
如今MISRA C已经被越来越多的企业接受,成为用于嵌入式系统的C语言标准,特别是对安全性要求极高的嵌入式系统,软件应符合MISRA标准。
本文将分6讲,与读者共同学习MISRAC。
第一讲:“…安全第一‟的C语言编程规范”,简述MISRAC的概况。
第二讲:“跨越数据类型的重重陷阱”,介绍规范的数据定义和操作方式,重点在隐式数据类型转换中的问题。
第三讲:“指针、结构体、联合体的安全规范”,解析如何安全而高效地应用指针、结构体和联合体。
第四讲:“防范表达式的失控”,剖析MISRAC中关于表达式、函数声明和定义等的不良使用习惯,最大限度地减小各类潜在错误。
第五讲:“准确的程序流控制”,表述C语言中控制表达式和程序流控制的规范做法。
第六讲:“构建安全的编译环境”,讲解与编译器相关的规范编写方式,避免来自编译器的隐患。
学习MISRAC之一:“安全第一”的C语言编程规范C/C++语言无疑是当今嵌入式开发中最为常见的语言。
早期的嵌入式程序大都是用汇编语言开发的,但人们很快就意识到汇编语言所带来的问题——难移植、难复用、难维护和可读性极差。
很多程序会因为当初开发人员的离开而必须重新编写,许多程序员甚至连他们自己几个月前写成的代码都看不懂。
C/C+ +语言恰恰可以解决这些问题。
作为一种相对“低级”的高级语言,C/C++语言能够让嵌入式程序员更自由地控制底层硬件,同时享受高级语言带来的便利。
嵌入式技术国标
嵌入式技术国标,全称为“嵌入式技术应用专业国家标准”,是一个针对嵌入式技术应用的专业标准,旨在规范和指导该领域的教育和人才培养。
该标准是由国家教育部制定并发布的,旨在提高嵌入式技术应用专业的教学质量和人才培养水平。
嵌入式技术国标主要针对嵌入式技术应用专业的培养目标、培养要求、课程设置、实践教学、师资队伍、教学资源等方面进行规范。
该标准要求嵌入式技术应用专业应以培养德智体美劳全面发展的人才为目标,掌握扎实的科学文化基础和电子技术、编程语言、嵌入式操作系统、网络技术及相关法律法规等知识,并具备嵌入式硬件设计与开发、软件开发与调试、嵌入式软件测试、嵌入式操作系统移植与应用开发等能力。
在课程设置方面,嵌入式技术国标要求专业课程包括C 语言程序设计、模拟电子技术、数字电子技术、嵌入式产品装配与调试、计算机网络技术、数据库技术与应用、Java程序设计、Linux操作系统等。
此外,该标准还强调了实践教学的地位和作用,要求学校加强实践教学环节,提高学生的实践能力和创新能力。
除了对专业本身的规范外,嵌入式技术国标还对师资队伍和教学资源提出了要求。
该标准要求教师具备丰富的教学
经验和工程实践经验,同时学校应具备完善的实验教学条件和教学资源,包括实验设备、教材、教学软件等。
嵌入式技术国标是一个针对嵌入式技术应用专业的国家标准,旨在提高该领域的教学质量和人才培养水平。
通过该标准的实施,可以促进嵌入式技术应用专业的规范化发展,培养更多高素质的嵌入式技术人才。
嵌入式系统开发规范总结嵌入式系统开发是指在嵌入式硬件平台上进行软件开发的过程。
与传统的软件开发不同,嵌入式系统开发具有更高的实时性、可靠性和安全性要求,因此需要制定一些规范来确保软件的质量和稳定性。
本文将总结嵌入式系统开发中常见的规范,并提供一些最佳实践建议。
1. 编码规范编码规范是嵌入式系统开发中非常重要的一项规范,它可以统一代码的风格,提高代码的可读性和可维护性。
以下是一些常见的编码规范:- 使用有意义的变量和函数名,避免使用缩写和无意义的命名。
- 保持代码的缩进和对齐的一致性,使用适当的空格和换行符来提高代码的可读性。
- 避免使用魔法数值,使用常量或宏来代替。
- 函数和模块的长度应该适中,避免过长或过短的函数和模块。
- 注释应该清晰明了,解释代码的意图和实现方法。
2. 接口规范在嵌入式系统开发中,接口规范是非常重要的,它可以确保不同组件之间的互操作性和兼容性。
以下是一些常见的接口规范:- 使用标准格式的接口定义,例如C语言的头文件。
- 接口的名称应该清晰明了,表达其功能和用途。
- 输入参数和返回值应该有明确的定义和数据类型。
- 接口的使用应该符合预期的行为,不应该有副作用。
3. 内存管理规范嵌入式系统的资源是有限的,因此内存管理是非常重要的。
以下是一些常见的内存管理规范:- 合理使用堆栈和堆内存,避免栈溢出和内存泄漏。
- 使用静态内存分配的方式,避免使用动态内存分配。
- 对于长时间运行的系统,应该注意内存的泄漏和碎片问题。
4. 任务调度规范嵌入式系统通常包含多个任务,任务调度是系统正常运行的基础。
以下是一些常见的任务调度规范:- 优先级应该根据任务的紧急程度来设定,高优先级的任务应该尽早执行。
- 任务调度的算法应该合理,避免出现死锁和饥饿的情况。
- 对于多核处理器,应该合理分配任务的执行顺序和核心。
5. 驱动开发规范驱动开发是嵌入式系统开发中的一个重要环节,它负责与硬件进行交互。
以下是一些常见的驱动开发规范:- 遵循硬件的编程手册和规范,确保驱动与硬件的兼容性。
嵌入式软件可靠性设计规范方案引言:嵌入式软件是嵌入在设备中的特定用途软件,其可靠性对设备的正确运行和用户的安全至关重要。
为了确保嵌入式软件的可靠性,需要设计一套规范方案,本文将从软件需求、架构设计、编码实现和测试验证等方面进行详细讨论。
一、软件需求规范1.明确定义软件的功能和性能需求,包括输入、输出、算法、响应时间等。
2.定义软件的安全要求,确保系统在可能的风险下能正确响应和保证用户的安全。
3.制定软件的兼容性要求,确保软件与硬件的适配性以及其他相关软件的兼容性。
4.设定软件的可靠性指标,明确软件的容错、可恢复性和可靠性要求。
二、架构设计规范1.使用模块化设计方法,将软件拆分为功能独立的模块,每个模块负责实现一个特定的功能。
2.定义明确的模块接口,确保模块之间的数据传递和信息交换正确可靠。
3.设计预防和处理异常的机制,如输入校验和错误处理,确保系统在异常情况下仍能正常运行和恢复。
4.进行合理的资源管理,包括内存、处理器、外部设备等,确保系统资源的高效利用和稳定性。
三、编码实现规范1.使用结构化的编程方法,遵循良好的编码习惯,如良好的变量命名、代码缩进等。
2.采用清晰易读的代码风格,注释详细,增加代码的可读性和可维护性。
3.进行严格的代码审查,发现和纠正潜在的错误和缺陷。
4.使用合适的算法和数据结构,确保软件的效率和正确性。
四、测试验证规范1.设计全面的测试用例,覆盖软件的各个功能和边界条件。
2.进行单元测试,验证各个模块的正确性和可靠性。
3.进行集成测试,确保各个模块协同工作的正确性和稳定性。
4.进行系统测试,测试整个系统的功能、性能和可靠性。
五、软件配置管理规范1.确定软件的版本控制策略,如使用版本号管理和追踪软件的版本变更。
2.建立有效的配置管理系统,确保软件配置的可控性和可追溯性。
3.设定软件发布和部署策略,确保软件的正确发布和部署。
六、软件维护规范1.定期审查和更新软件的文档,包括需求文档、设计文档和测试文档等。
编写嵌入式开发的测试用例嵌入式开发的测试用例是确保嵌入式系统在设计和开发过程中功能正常、稳定运行的重要步骤。
通过编写测试用例,可以对系统进行全面的自动化测试,减少人工测试的工作量,并提高软件质量和稳定性。
本文将介绍如何编写嵌入式开发的测试用例,以及一些常用的测试用例类型。
一、测试用例的概念及编写规范测试用例是一组测试步骤、输入和预期结果的集合,用于验证系统的正确性和可靠性。
编写测试用例时,需要清楚地描述每个测试步骤的操作和预期结果,以便测试人员能够准确地执行并判断测试结果的正确性。
测试用例的编写规范如下:1. 用例名称:用于描述测试场景或功能点的简要名称。
2. 前置条件:描述执行测试用例前的环境和条件,如是否需要连接硬件设备或特定的软件配置。
3. 测试步骤:按照逻辑顺序详细描述执行测试用例时需要进行的操作步骤,包括输入数据和操作流程。
4. 预期结果:描述测试执行后的期望结果或系统行为,以便与实际结果进行比较判断。
5. 测试结果:记录测试执行过程中的实际结果,测试人员在执行测试用例后填写。
二、常用的嵌入式开发测试用例类型1. 单元测试用例:针对嵌入式系统中的各个模块或单元进行测试,验证每个单元的功能是否正确,常用的测试技术包括黑盒测试和白盒测试。
2. 集成测试用例:测试各个模块之间的接口和数据交互,验证模块之间是否能够正常协同工作。
3. 系统测试用例:对整个嵌入式系统进行测试和验证,包括功能测试、性能测试、可靠性测试等。
4. 回归测试用例:在对嵌入式系统进行修改或升级后,重新执行之前通过的测试用例,以确保修改或升级不会引入新的错误。
5. 压力测试用例:对嵌入式系统进行负载和压力测试,验证系统在高负载情况下的性能和稳定性。
6. 安全性测试用例:测试系统的安全性和防护能力,包括网络安全、数据安全等方面的测试。
三、编写示例以下是一个模拟的测试用例示例,用于描述一个嵌入式系统中的某个功能点的测试:用例名称:温度传感器读取功能测试前置条件:确保温度传感器已经正确连接到嵌入式系统的引脚。
C语言编程风格和规范C语言是一种广泛应用于系统级编程和嵌入式开发的高级编程语言。
为了保证代码的可读性和可维护性,程序员应当遵循一定的编程风格和规范。
本文将介绍一些常见的C语言编程风格和规范。
一、命名规范在C语言中,良好的命名风格可以提升代码可读性。
以下是一些常见的命名规范:1. 变量和函数名使用小写字母,单词之间用下划线(_)分隔,例如:my_variable。
2. 结构体和枚举类型采用首字母大写的驼峰命名法,例如:MyStruct。
3. 宏定义使用全大写字母,单词之间用下划线(_)分隔,例如:MY_MACRO。
二、缩进和空格良好的缩进和空格使用可以使代码结构清晰,提高可读性。
以下是一些常见的缩进和空格规范:1. 使用两个空格或者一个制表符进行代码缩进。
2. 操作符前后加空格,例如:a = b + c。
3. 函数名和左圆括号之间不加空格,例如:printf("Hello World")。
三、注释规范注释对于代码的理解和维护非常重要。
以下是一些关于注释的规范:1. 对于复杂的算法或者重要的函数,应当提供函数头部的注释来解释函数的功能、输入输出参数等。
2. 使用//或者/* ... */来添加注释,简洁明了。
3. 不要在注释中使用绝对的数字或者日期表示,应使用相对的描述,例如:3个元素或者最近更新。
四、函数和模块规范函数和模块的设计可以帮助提高代码的可读性和可维护性。
以下是一些相关的规范:1. 函数应当尽量短小,一个函数只做一件事情。
2. 函数应当有清晰的参数和返回值,避免使用全局变量。
3. 模块应当有清晰的接口定义和模块内部的实现,尽量减少对外部变量和函数的依赖。
五、错误处理规范良好的错误处理可以提高代码的健壮性和可靠性。
以下是一些常见的错误处理规范:1. 函数应当返回适当的错误码或者错误标志,用于外部处理错误情况。
2. 错误处理的代码应当尽量短小,避免嵌套过深的if语句。
3. 错误处理的输出信息应当清晰明了,帮助定位问题。
ICS35.060L74中华人民共和国国家标准GB/T XXXXX—XXXX嵌入式软件 C语言编码规范Embedded Software C Language Coding Specification“在提交反馈意见时,请将您知道的相关专利连同支持性文件一并附上”(征求意见稿)(本稿完成日期:2009-12-23)XXXX-XX-XX发布XXXX-XX-XX实施前言本标准由全国信息技术标准化技术委员会(SAC/TC28)提出并归口。
本标准起草单位:中国电子技术标准化研究所、珠海南方软件产品检测中心、炬力集成电路设计有限公司本标准主要起草人:引言嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗严格要求的专门计算机系统。
嵌入式技术并不是一个独立的学科,它是伴随着微电子技术和计算机技术的发展,微控制芯片功能越来越强大,而嵌入微控制芯片的设备和系统越来越多而发展起来的。
嵌入式系统几乎包括了生活中所有的电器设备,如:mp3、手机、数字电视、汽车、微波炉、数码相机、电梯、空调、自动售货机、工业自动化仪表与医疗仪器等。
尽管C语言是嵌入式软件开发的主要工具,然而C语言并非是专门为嵌入式系统设计的,一是因为标准C语言编写的软件缺乏安全性;二是因为“标准C语言”太庞大了,很难操作。
因此,需要制订针对嵌入式系统软件的编码格式要求。
本标准是在理解标准C语言的基础上,结合嵌入式软件的开发实践以及嵌入式软件开发中常见的危险编码方式制订的,着重于软件的安全性、可读性。
既可作为嵌入式软件开发中的编码要求,也可作为软件交付时验收方的验证要求。
在要求条款中,“应”标示的要求是必须符合的,“宜”标示的要求是可选择符合的。
嵌入式软件 C语言编码规范1 范围本标准规定了使用C语言编写嵌入式软件的编码格式要求。
本标准也提及了软件设计人员应该注意的与编码相关的事项。
本标准适用于嵌入式软件生存周期的编码阶段,主要供具有C语言编程能力的软件编码人员使用。
TRZN TRZN 嵌入式软件编程规范1文档概述 (4)1.1关于本文档 (4)1.2参考文献 (4)2排版 (5)3注释 (9)4标识符命名 (17)5可读性 (23)6变量、结构 (24)7宏 (29)8函数、过程 (31)9可测性 (38)10代码版本管理 (40)10.1代码质量定义 (40)10.2G IT分支定义 (40)10.3G IT代码引入规定 (41)10.4G IT代码C OMMIT顺序 (41)10.5C OMMIT文件过程中的其他注意事项 (41)11附录A –推荐编辑器的默认配置修改 (42)11.1K EIL U V ISION5默认配置修改 (42)1 文档概述1.1 关于本文档本文档规范了芜湖天人智能有限公司嵌入式软件部软件代码的书写规范和原则。
本文档仅供公司内部员工使用。
公司机密,严禁外传。
本文档中各规则的格式如下:【规则编号】 [规则内容] [[标记]]其中[标记]的含义如下:(必须):表示该条规则是必须遵守的。
(建议):表示该条规则是建议遵守的。
(可选)或没有标记:表示该条规则是可选择遵守的。
本文档的示例中,如有使用“//”,并非代码注释,而是文档的注释(有可能是文档中对代码注释的解释)。
1.2 参考文献[1]高质量C++编程[2]Effective C++[3]More Effective C++[4]C++ Primer[5]Thinking in C++2 排版●【规则 2-1】程序块要采用缩进风格编写,缩进的空格数为4个,对齐使用空格键,不得使用TAB键。
[必须]嵌入式软件开发的代码编辑器,推荐使用Keil uVision5,编辑器参数设置见附录A。
●【规则 2-2】相对独立的程序块之间、变量说明之后必须加空行。
[必须]示例:●【规则 2-3】较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
[必须]示例:●【规则 2-4】循环、判断等语句中若有较长的表达式或语句,则要进行适当的分行,长表达式要在低优先级操作符处划分新行,操作符放在行尾。
[必须]示例:● 【规则 2-5】若函数的参数较长,则要进行适当的分行。
[必须]示例:● 【规则2-6】不允许把多个短语句写在一行中,即一行只写一条语句。
[必须]示例:●【规则 2-7】if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
[必须]示例:●【规则 2-8】在比较表达式中,如果有常量,尽量把常量放在前面。
[建议]这样,万一不小心把“==”误敲成“=”,就会通不过翻译,不致引起难查的问题。
●【规则 2-9】程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
[建议]示例:本规则的特例见2-7的说明部分。
【规则 2-10】在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。
[必须]说明:采用这种松散方式编写代码的目的是使代码更加清晰。
由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。
在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。
给操作符留空格时不要连续留两个以上空格。
示例:【规则 2-10-1】逗号、分号只在后面加空格。
int a, b, c;【规则 2-10-2】比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等双目操作符的前后加空格。
if (currentTime >= MAX_TIME_VALUE)a =b + c;a *= 2;a =b ^ 2;【规则 2-10-3】"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。
*p = 'a'; // 内容操作"*"与内容之间flag = !isEmpty; // 非操作"!"与内容之间p = &mem; // 地址操作"&" 与内容之间i++; // "++","--"与内容之间【规则 2-10-4】"->"、"."前后不加空格。
p->id = pid; // "->"指针前后不加空格【规则 2-10-5】if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。
if ((a >= b) && (c > d))3 注释●【规则 3-1】一般情况下,源程序有效注释量必须在20%以上(建议20-30%)。
[必须]说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。
●【规则 3-2】C代码不得使用C++的注释语法“//”,必须使用/*….*/。
[建议]注:本文档的示例中,如有使用“//”,并非代码注释,而是文档的注释(有可能是文档中对代码注释的解释)。
●【规则 3-3】说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、模块名、文件名、作者、内容介绍、修改日志等,头文件的注释中还应有函数功能简要说明。
[必须]头文件模板示例:【规则 3-3-1】注:使用git在commit代码时填写充分、准确的message。
[必须]【规则 3-3-2】为了防止头文件被重复引用,应当用#ifndef/#define/#endif结构产生预处理块。
[必须] 【规则 3-3-3】用 #include <> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
[必须] 【规则 3-3-4】用 #include “”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
[必须]【规则 3-3-5】头文件中只存放“声明”而不存放“定义”。
(建议将成员函数的定义与声明分开,不论该函数体有多么小。
)[必须]【规则 3-4】源文件头部应进行注释,列出:版权说明、版本号、作者、模块目的/功能、主要函数及其功能、修改日志等。
[必须]源文件模板示例:【规则 3-4-1】注:使用git在commit代码时填写充分、准确的message。
[必须]【规则 3-5】函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。
[必须]【规则 3-5-1】外部函数必须有函数头注释。
[必须]【规则 3-5-2】内部函数强烈建议使用函数头注释。
[建议]●【规则 3-6】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用的注释要删除。
注释的格式尽量统一。
[必须]●【规则 3-7】注释的内容要清楚、明了,含义准确,防止注释二义性。
[建议]说明:错误的注释不但无益反而有害。
●【规则 3-8】避免在注释中使用缩写,特别是非常用缩写。
[建议]说明:在使用缩写时或之前,应对缩写进行必要的说明。
●【规则 3-9】注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面;如放于上方则需与其上面的代码用空行隔开。
[必须]示例:如下例子不符合规范。
●【规则 3-10】对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。
变量、常量、宏的注释应放在其上方相邻位置或右方。
[必须]示例:●【规则 3-11】数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。
对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。
[必须]示例:可按如下形式说明枚举/数据/联合结构。
●【规则 3-12】全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
[必须]示例:●【规则 3-13】代码中的特殊处理,或者软件改变方案,必须加注释,注明为何要这样做。
[必须]说明:只有加了注释,以后的维护者才有可能明白前因后果。
●【规则 3-14】注释与所描述内容进行同样的缩排。
[必须]说明:可使程序排版整齐,并方便注释的阅读与理解。
● 【规则3-15】将注释与其上面的代码用空行隔开。
[必须]示例:● 【规则 3-16】对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
[建议]说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序。
● 【规则 3-17】对于switch 语句下的case 语句,如果因为特殊情况需要处理完一个case 后进入下一个case 处理,必须在该case 语句处理完、下一个case 语句前加上明确的注释。
[必须]说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break 语句。
示例(注意斜体加粗部分):●【规则 3-18】避免在一行代码或表达式的中间插入注释。
[必须]说明:除非必要(如PC-LINT的行禁止检查标记),不应在代码或表达中间插入注释,否则容易使代码可理解性变差。
●【规则 3-19】通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。
[建议]说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。
●【规则 3-20】代码的功能、意图层次上进行注释,提供有用、额外的信息。