嵌入式软件可靠性设计规范 checklist
嵌入式软件设计相关规范

3.2 MCU-C 程序基本编程规范
1.概述
为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。本 标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对单片机编程语言 和 08 编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证 等内容。
3)函数注释
函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可 增加作者、创建日期、修改记录(备注)等相关项目。 函数头部注释放在每个函数的顶端, 用"/*……*/"的格式包含。其中函数名称应简写为 FunctionName(),不加入、出口参数等信 息。
/*********************************************************** 函数名称: 函数功能: 入口参数: 出口参数: 备 注:
uint8; uint16; uint32; int8; int16; int32;
// 8 位无符号数 // 16 位无符号数 // 32 位无符号数
// 8 位有符号数 // 16 位有符号数 // 32 位有符号数
vuint8; vuint16; vuint32; vint8; vint16; vint32;
1. 工程文件结构
如下图给出了小灯闪烁工程相关源文件的树型结构。
图1 小灯闪烁工程相关源文件的树型结构
1)汇编程序文件
在“汇编程序”中包含的文件与工程初始化相关,包括工程启动文件“steup.s”与中断 向量表文件“vectors.s”,由于源代码完全使用汇编语言编写,故将其独立作为一类。
2) C语言程序文件和头文件
2.命名规则
1)命名基本原则
电子系统可靠性设计-嵌入式系统软件的可靠性设计PPT课件【2024版】

嵌入式系统软件的可靠性设计 电子系统可靠性设计
2)控制要求或处理要求
嵌入式系统对实时性要求较高
工作顺序要求严格:发送数据的时间、接收数据的时间、 时序关系、CPU和外设的同步 3)可靠性问题
对软件的可靠性要求和出错处理的要求
确定出错处理方案,列出各种错误图像、显示错误的 方法 用户的需求:全面详细的了解,设计者的理解和用户的解 释必须完全一致,形成文档
5、性能错误
电子系统可靠性设计
指设计的软件性能和用户的需求相差太大,不能满足用 户的要求
例如:软件的响应时间、执行时间、控制系统的精度等
例如:
计算机的语音识别,尽管识别率满足要求,但是识别 时间不能太长,如果需要几分钟进行识别,无法应用
嵌入式系统发生故障时:
需要立即做出响应,自动保护和报警
如果响应时间过长:会发生严重的后果
依赖于设计者的思路、方法 在软件开发的每一步:都可能引入故障 每一个阶段都要采取质量控制手段
实现软件的可靠性要求 一、软件工程的开发模式 二、嵌入式系统的软件开发 三、软件可靠性管理
嵌入式系统软件的可靠性设计 电子系统可靠性设计
一、软件工程的开发模式 1、瀑布式开发模型 2、原型法开发模型 3、螺旋形开发模式 4、面向对象的软件开发模型
上个例子:
故障率λ=0.004
平均故障间隔时间MTBF =1/λ =250
嵌入式系统软件的可靠性设计 电子系统可靠性设计
嵌入式系统软件的可靠性设计 电子系统可靠性设计
嵌入式系统软件的可靠性设计
2、方案中有错误
电子系统可靠性设计
当用户需求充分了解后,进行软件的总体方案设计
软件编程规范总则CHECKLIST

是[]否[]免[]
序
号
总则条款
执行情况
说明
4可读性
¹4-1:注意运算符的优先级,并用括号明确表达
式的操作顺序,避免使用默认优先级。
是[]否[]免[]
¹4-2:避免使用不易理解的数字,用有意义的标
识来替代。涉及物理状态或者含有物理意义的
常量,不应直接使用数字,必须用有意义的枚
功能简要说明。
是[]否[]免[]
¹2-3:源文件头部应进行注释,列出:版权说明、
版本号、生成日期、作者、模块目的/功能、主
要函数及其功能、修改日志等。
是[]否[]免[]
¹2-4:函数头部应进行注释,列出:函数的目的
/功能、输入参数、输出参数、返回值、调用关
系(函数、表)等。
是[]否[]免[]
¹2-5:边写代码边注释,修改代码同时修改相应
查及评审。
是[]否[]免[]
11代码测试、维护
¹11-1:单元测试要求至少达到语句覆盖。
是[]否[]免[]
¹11-2:单元测试开始要跟踪每一条语句,并观
察数据流及变量的变化。
是[]否[]免[]
¹11-3:清理、整理或优化后的代码要经过审查
及测试。
是[]否[]免[]
¹11-4:代码版本升级要经过严格测试。
¹7-11:用断言对程序开发环境
(OS/Compiler/Hardware)的假设进行检查。
是[]否[]免[]
¹7-12:正式软件产品中应把断言及其它调测代
码去掉(即把有关的调测开关关掉)。
是[]否[]免[]
¹7-13:在软件系统中设置与取消有关测试手段,
不能对软件实现的功能等产生影响。
2 嵌入式软件可靠性设计规范 (1)

嵌入式软件可靠性设计规范0、概述 (3)1、定义 (3)1.1、定义 (3)1.2、说明 (3)2、计算机系统设计 (3)2.1、一般要求 (3)2.2、硬件与软件功能的分配原则 (4)2.3、硬件与软件可靠性指标的分配原则 (4)2.4、安全关键功能的人工确认 (4)2.5、安全性内核 (4)2.6、自动记录系统故障 (4)2.7、禁止回避检测出的不安全状态 (5)2.8、保密性设计 (5)2.9、容错设计 (5)2.10、安全关键软件的标识原则 (5)3、硬件设计 (5)3.1、硬件选用 (5)3.2、总线检测 (5)3.3、加电检测 (6)3.4、电源失效的安全措施 (6)3.5、主控计算机失效的安全措施 (6)3.6、反馈回路传感器失效的防护措施 (6)3.7、电磁干扰的防护措施 (6)3.8、维修互锁措施 (6)4、软件需求分析 (6)5、软件危险分析 (7)6、安全关键功能的设计 (7)7、冗余设计 (7)7.1、指令冗余设计 (7)7.2、软件陷阱与软件拦截技术 (7)7.3、软件冗余 (9)8、接口设计 (10)8.1、硬件接口要求 (10)8.2、硬件接口的软件设计 (10)8.3、人机界面设计 (10)8.4、报警设计 (10)8.5、软件接口设计 (11)9、软件健壮性设计 (11)9.1、电源失效防护 (11)9.2、加电检测 (11)9.3、电磁干扰 (11)9.4、系统不稳定 (12)9.5、接口故障 (12)9.6、干扰信号 (12)9.7、错误操作 (12)9.8、监控定时器的设计 (12)9.9、异常保护设计 (12)10、简化设计 (13)10.1、单入和单出 (13)10.2、模块的独立性 (13)10.3、模块的扇入扇出 (13)10.4、模块耦合方式 (13)10.5、模块内聚顺方式 (13)10.6、其他特殊考虑 (14)11、余量设计 (14)11.1、资源分配及余量要求 (14)11.2、时序安排的余量要求 (14)12、数据要求 (14)12.1、数据需求 (14)12.2、属性控制 (14)12.3、数值运算范围控制 (15)12.4、合理性检查 (15)13、防错程序设计 (15)13.1、参数化 (15)13.2、公用数据和公共变量 (15)13.3、标志 (15)13.4、文件 (15)13.5、非授权存取的限制 (16)13.6、无意指令跳转的处理 (16)13.7、程序检测点的设置 (16)13.8、寻址模式的选用 (16)13.9、数据区隔离 (16)13.10、安全关键信息的要求 (16)13.11、信息存储要求 (17)13.12、算法选择要求 (17)14、编程要求 (17)14.1、语言要求 (17)14.2、汇编语言编程限制 (17)14.3、高级语言的编程限制 (17)14.4、圈复杂度指数(McCabe) (17)14.5、软件单元的规模 (18)14.6、命名要求 (18)14.7、程序格式要求 (18)14.8、程序注释要求与方法 (18)14.8.1、注释的一般要求 (18)14.8.2、模块头注释要求 (19)14.8.3、模块内注释要求 (19)14.8.4、安全关键内容注释要求 (19)14.9程序设计风格 (19)14.9.1、通用类 (19)14.9.2、结构类 (20)14.9.3、说明类 (20)14.9.4、输人输出类 (21)14.9.5、语言类 (21)15、多余物的处理 (21)15.1、文档中未记载特征的清除 (21)15.2、程序多余物的清除 (21)15.3、未使用内存的处理 (21)15.4、覆盖的处理 (22)16、软件更改要求 (22)17、嵌入式软件测试 (22)17.1、需求遗漏或不明确 (22)17.2、配置保存的生效 (22)17.3、缺省配置的影响 (23)17.4、报警和清除 (23)17.5、菜单选项测试 (23)17.6、缺省配置测试 (23)17.7、系统测试注意事项 (23)附录1:推荐的软件安全关键程度分级 (23)附录2:软件开发各阶段的适用准则和要求 (24)0、概述嵌入式软件是电子系统的重要组成部分,它具有不同于硬件系统的可靠性特征和可靠性设计方法。
嵌入式软件可靠性设计规范checklist

嵌入式软件可靠性设计规范汇总43.高级报警显示:红色,1.4Hz~ 2.8Hz,信占比率20%~60%开44.中级报警显示:黄色,0.4Hz~0.8Hz,信占比率20%~60%开45.低级报警显示:蓝绿色或者黄色,常开,信占比率100%46.高优先级和中优先级的报警上、下限设置值,一旦超出可能引起较严重后果的非合理报警数值区域时,均需加单独的对话弹出框予以提醒操作者47.默认的报警预置不允许修改,并提供让用户能恢复到出厂默认报警设置的操作途径48.做报警日志记录,为以后的故障分析、维修检查或商业纠纷提供依据与硬件接口的软件49.数据传输接口的硬件性能限制了数据传输速率的提高,在确定波特率前,要确认硬件所能承受的最高传输率,光耦、485、232、CAN、传输线上有防护器件(TVS或压敏电阻)的端口50.硬件端口读进来的数据必须加值域范围的判断51.硬件端口读取数据,必须加可控时间或次数的有限次限制52.A/D的位数比前端放大电路的精度要求略高即可,并通过数学计算验证53.对运动部件的控制,正向运动突然转向反向运动时,必须控制先正向减速到0,然后再反向加速的控制方式54.运动部件停机后、再快速启动的工作控制方式是不允许的。
须停机、开机、delay延时、再启动执行机构,以确保执行机构先释放原来运动状态的惯性,然后再从静态下启动55.运动部件都有过渡过程特性,软件驱动时的上升沿和下降沿的过渡特性会直接影响到硬件的安全和执行效果56.板卡启动时,先initMCU、然后Delay、然后initIO,以确保各芯片的上电电源都已经稳定下来再启动工作57.对采集自有可能受到干扰的模拟端口输入的数字量数据,一定要加上、下限、Δ/Δt、规律性干扰的滤波措施三个方面的容错性机制58.对数字端口传输数据可以连续传输两遍,以防范随机性偶发干扰,实时性要求较高的,可以连续传三遍,2:1判定59.模块之间的数据通信联络,用周期性读取的方式、或请求-应答的方式传送数据,一旦超出周期性时间要求,或未应答,则判定硬件失效,需有软件的配套措施。
嵌入式系统设计规范

嵌入式系统设计规范1. 引言嵌入式系统作为一种在特定应用领域中执行特定任务的计算机系统,其设计涉及到硬件和软件的紧密结合。
为了保证嵌入式系统的稳定性、可靠性和可维护性,设计规范在系统的开发过程中起着重要的指导作用。
本文将介绍一些嵌入式系统设计规范的要点,以帮助开发人员更好地进行嵌入式系统设计。
2. 硬件设计规范2.1. 电路板设计- 电路板应具备良好的布线和散热设计,以确保信号的传输质量和系统的稳定性。
同时,合理布局元器件和电路板层次,减少电磁干扰和噪声。
- 电路板应有足够的供电和接地,充足的电源和地线可以提高系统的抗干扰能力,并提供稳定的电源给各个模块。
- 在电路板设计中,还应注意信号完整性和时序约束的处理,保证信号的正确传输和时序的准确性。
2.2. 元器件选择和布局- 在选择元器件时,应优先考虑性能和可靠性。
选用具有良好性价比的元器件,并结合实际需求进行合理选择。
- 元器件的布局要合理,避免产生干扰和短路等问题。
尽可能避免元器件之间的相互干扰,减少串扰和电磁辐射。
2.3. 散热设计- 合理的散热设计对嵌入式系统的稳定性至关重要。
应根据系统功耗和工作环境条件选择适当的散热方式,如散热片、散热风扇等,确保系统在高负载下的正常工作。
3. 软件设计规范3.1. 系统架构设计- 首先需明确系统的功能需求和性能指标,进行系统的整体架构设计。
采用模块化设计思想,将系统分割为各个独立模块,提高系统的可维护性和易扩展性。
- 在模块之间的接口设计上,应尽量降低耦合度,减少模块之间的依赖关系。
3.2. 编码规范- 在编码规范上,应使用统一的命名规范、缩进格式和代码注释,提高代码的可读性和可维护性。
- 合理选择数据结构和算法,优化代码性能。
避免冗长的代码和重复的计算,提高系统的效率。
3.3. 异常处理和错误处理机制- 在软件设计中,应考虑系统可能出现的异常情况和错误。
合理设计异常处理和错误处理机制,提高系统的稳定性和可靠性。
嵌入式系统中的软件可靠性设计与实现技术研究

嵌入式系统中的软件可靠性设计与实现技术研究随着互联网时代的到来,嵌入式系统已经被广泛应用于各个领域,涉及到生活中的方方面面。
与此同时,嵌入式软件的可靠性要求也越来越高,因为任何一个小的故障都可能会引起严重后果。
基于这样的背景,本文将详细探讨嵌入式系统中软件可靠性设计与实现技术,希望能为开发者提供一定参考。
一、嵌入式系统软件可靠性的重要性嵌入式系统是通过一些硬件设备和软件组件的配合来实现一定的功能的系统。
这样的系统往往是一个整体,不同模块之间要互相配合,共同实现系统的目标。
如果系统中任何一个部分出现了问题,就可能导致整个系统的崩溃,给人类带来巨大的损失和伤害。
而嵌入式系统中的软件可靠性,是保证整个系统稳定性的关键。
在保证嵌入式系统的稳定性方面,软件占比例很大。
因此,软件可靠性的保证就显得很重要。
软件可靠性设计意味着在保证软件功能正常使用的同时,还要考虑诸如物理环境、用户输入等因素对软件系统的影响。
保障系统强度,这项工作的设计方式、技术实现技术和工作流程都是至关重要的。
二、嵌入式软件设计需要遵守的原则嵌入式软件设计需要遵守一些基本原则,如模块化、可重用性、可测试性、可扩展性。
这些原则可以帮助开发人员更好的实现软件的可靠性。
1. 模块化嵌入式软件设计应采用模块化方式实现,将一个大型的软件系统拆分成多个小模块,便于不同的团队进行开发。
每个模块都应存放特定的功能和数据,方便维护和测试。
2. 可重用性嵌入式软件设计应尽可能地重用一些常用的功能和代码。
这不仅可以提高软件的开发效率,还可以减少软件的复杂度,提升软件的可靠性。
3. 可测试性针对不同的模块进行模块测试和集成测试是确保软件可靠性的重要手段。
嵌入式软件设计应该遵循“测试的处处为程序所虑”的原则,形成完整的测试流程与测试框架。
4. 可扩展性嵌入式软件设计的另一个原则是可扩展性。
他需要考虑到在今后软件的发展和升级中可能出现的需求和问题,并采取相应的设计方式。
嵌入式系统的安全性与可靠性设计

嵌入式系统的安全性与可靠性设计在当今的科技发展日新月异的时代,嵌入式系统已经成为了我们生活中不可或缺的一部分。
然而,由于嵌入式系统具有与网络相连,功能复杂,使用范围广泛等特点,其安全性和可靠性问题也越来越受到人们的关注。
本文将就嵌入式系统的安全性和可靠性设计展开讨论,以期提供一些有益的指导和思路。
一、安全性设计1.漏洞分析和修复首先,嵌入式系统的安全性设计首先要关注漏洞的分析和修复。
安全性漏洞来自于系统设计的缺陷和实现上的疏忽。
通过对系统进行安全性分析,可以发现潜在的漏洞问题,并及时采取修复措施,以保障系统的稳定和安全。
2.访问控制和身份认证其次,嵌入式系统的安全性设计还需要注重访问控制和身份认证的问题。
通过合理的身份验证机制和权限管理,可以限制用户的访问权限,确保系统只被授权的用户使用,并防止未授权访问和窃取敏感信息的风险。
3.数据保护和加密算法此外,在嵌入式系统的安全性设计中,数据保护和加密算法也是非常重要的方面。
采用合适的加密算法,可以在数据传输和存储过程中对敏感信息进行加密,防止被黑客窃取或篡改,进而保护用户的隐私和数据安全。
二、可靠性设计1.容错和冗余设计在嵌入式系统的可靠性设计中,容错和冗余技术是非常常用的方法。
通过引入冗余元件和备份机制,当系统出现故障时,可以有备用系统接管,保证系统的持续运行。
同时,容错设计也可以提高系统的可靠性,当系统发生错误或故障时,能够自动修复或恢复,确保系统正常工作。
2.时序分析和性能优化另外,为了增强嵌入式系统的可靠性,时序分析和性能优化也是不可忽视的环节。
通过对系统的时序特性进行分析和调控,可以更好地预测和处理系统的各种行为,提高系统的响应速度和可用性。
3.软件工程实践最后,嵌入式系统的可靠性设计需要借鉴软件工程的最佳实践。
例如,采用模块化的设计思想,合理划分系统的功能模块,并进行单元测试和集成测试;同时,采用版本控制和配置管理等措施,保证系统的稳定性和扩展性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式软件可靠性设计规范汇总
43.高级报警显示:红色,1.4Hz~ 2.8Hz,信占比率20%~60%开
44.中级报警显示:黄色,0.4Hz~0.8Hz,信占比率20%~60%开
45.低级报警显示:蓝绿色或者黄色,常开,信占比率100%
46.
高优先级和中优先级的报警上、下限设置值,一旦超出可能引起较严重后果的非合理报警数值区域时,均需加单独的对话弹出框予以提醒操作者
47.
默认的报警预置不允许修改,并提供让用户能恢复到出厂默认报警设置的操作途径
48.做报警日志记录,为以后的故障分析、维修检查或商业纠纷提供依据
与硬件接口的软件49.
数据传输接口的硬件性能限制了数据传输速率的提高,在确定波特率前,要确认硬件所能承受的最高传输率,光耦、485、232、CAN、传输线上有防护
器件(TVS或压敏电阻)的端口
50.硬件端口读进来的数据必须加值域范围的判断
51.硬件端口读取数据,必须加可控时间或次数的有限次限制
52.A/D的位数比前端放大电路的精度要求略高即可,并通过数学计算验证
53.
对运动部件的控制,正向运动突然转向反向运动时,必须控制先正向减速到0,然后再反向加速的控制方式
54.
运动部件停机后、再快速启动的工作控制方式是不允许的。
须停机、开机、delay延时、再启动执行机构,以确保执行机构先释放原来运动状态的惯性,然后再从静态下启动
55.
运动部件都有过渡过程特性,软件驱动时的上升沿和下降沿的过渡特性会
直接影响到硬件的安全和执行效果
56.
板卡启动时,先initMCU、然后Delay、然后initIO,以确保各芯片的上电
电源都已经稳定下来再启动工作
57.
对采集自有可能受到干扰的模拟端口输入的数字量数据,一定要加上、下
限、Δ/Δt、规律性干扰的滤波措施三个方面的容错性机制
58.
对数字端口传输数据可以连续传输两遍,以防范随机性偶发干扰,实时性要求较高的,可以连续传三遍,2:1判定
59.
模块之间的数据通信联络,用周期性读取的方式、或请求-应答的方式传送
数据,一旦超出周期性时间要求,或未应答,则判定硬件失效,需有软件的
配套措施。
如对接口芯片复位、报警提示、调用默认安全数据临时顶替…
60.
定时刷屏,定时刷Register,防止干扰导致的屏幕花屏、register数据丢失或篡改
61.
若系统内部既有干扰源,又有敏感电路部分,对这两部分软件控制操作之间加delay。
如电机或继电器启动或停止时,采用motor_on–delay-AD_start
62.对MCU之外的存储操作,最好加存储后检查,并有成功提示
63.输入信号要做处理:按键、电源等做防抖处理及范围限制
64.1/2以上的机时MCU不必工作时,用睡眠设置抗扰
代码65.
程序代码模块要按照功能分级,基本功能和可能导致安全问题的模块为高
级、用户能感知到但不属于高级功能部分的功能为中级、其他为低级;高中级程序的编制人员、测试、审核、设计更改均须给予特别的重视和资源倾斜
66.控制类函数,单一函数内只能有单一功能和单一的受控对象
67.
代码中,一个语句中,只能用于完成单一的功能,禁用复合语句,对复合型语句用分解的办法化简成多个简单小语句
68.
函数调用时,形参是容易出错的地方,函数编程时,形参注释的字体、颜色、大小较突出为佳;且在函数内部,形参仅做数据传递,不参与运算,在函数内单独定义局部变量,接收形参数据后,用内部变量进行运算
69.
程序中不出现常数(局部循环性常数不在此列),常数用宏定义方式;调试
中才能确定的调节参数常数,宜通过“工程师校准界面”中补偿参数的方式预留用户设置接口,以补偿因环境条件或配套设备参数变化引起的参数变化
量;而非写死在程序中
70.
全局变量慎用,不得不用时,要专门组织项目组讨论会,集体确定是否有必要;设计时用统一的操作函数对其进行操作。
71.
计算中用到的所有数据必须做值域范围的有效性判断,如读取EEPROM中的
数据、调用函数的返回值、运算的中间值、IO口的数据、寄存器的数据…72.
系统架构按照控制层和应用层二分法合理分层;控制层的模块划分以受控对象唯一为判定标准、应用层以操作动作唯一为判定标准
73.相同的控制对象在程序中只出现一次,相同的信息只出现一次
74.变量和函数要有统一命名规范
75.
功能模块的形参个数越少越好、数据类型越简单越好,以保证低耦合;最好控制在3个以内
76.确定模块间的耦合方式为哪一种,如果处于非优选的耦合方式,要分析是否可能按照较优先推荐的耦合方式进行耦合。
排序优选顺序:直接数据耦合-间接数据耦合-控制耦合-外部数据耦合-公共数据耦合
77.
设计更改时,接口必须向前兼容;设计更改审核需作为重点检查项,尤其注意对硬件的读写访问协议
78.以安全性内核的架构形式进行主体架构设计,并将以下5类重要模块打包进安全性内核中,加强管理(测试、设计更改、评审时特殊关注):a故障检测的优先级结构及安全性控制或校正逻辑、处理和响应故障的模块;
b中断处理程序、中断优先级模式及允许或禁止中断的例行程序
c产生对硬件进行自主控制信号的软件
d产生直接影响硬件部件运动或启动安全关键功能的信号的软件
e其输出是显示安全关键硬件的状态的软件。
79.
禁止使用空间不受控(如循环到Δ<ε,再停止连续步进递增存储)、时间不受控(如循环到Δ<ε,再跳出循环)的语句
变量/存储80.
变量名称里加入数据类型和作用域的信息,使隐含信息显性化,避免可读性差和数据类型强制转换的问题
81.
重要数据备份需采用异地备份方式,异地存储的介质、面对的应力不是同一类应力,避免单一事故造成的数据丢失
82.
重要数据之前之后预留较大的空闲存储区,避免被之前数据覆盖;比如占2字节的变量分配4bytes
83.
禁止使用一位、00H、FFH、互补、在二进制码中仅差1-2位的弱数据类型来表示状态含义。