查看: 12125|回复: 15

多提提一点软件DFMEA的条例

[复制链接]
  • TA的每日心情
    慵懒
    2018-11-15 16:18
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    259

    帖子

    3

    高级会员

    Rank: 4

    积分
    993
    最后登录
    2023-1-6
    发表于 2017-9-15 10:18:18 | 显示全部楼层 |阅读模式
    平时我们做汽车产品的项目主机厂都有要求提交各类文件,其中有个DFMEA文件也是关于产品的,我们领导以前说大公司的DFMEA都几十,几百条的,我现在绞尽脑汁也就想了20多条,大家做软件遇到哪些会使芯片存在潜在失效的情况,多提提,下列是我想出的一些条例。

    代码层面:

    1.使用合适的数据类型,防止数据溢出。

    2.减少运算强度,能移位实现乘除法的尽量移位实现,防止除以0的现象出现

    3.繁出现while和for循环的地方务必加入循环上限,防止死循环

    4.使用指针时务必注意系统的大小端模式,防止写入或读取错误的数据

    5.使用数组时,对数组索引号要务必注意,防止数组索引号越界

    6.合理设计堆栈深度,防止堆栈溢出。(尽量不使用嵌套函数)

    7.条件语句的等于务必要注意,即“==”,防止写成一个等号使判断条件失效

    8.使用const,volitile等关键字,有效防止编译器的优化和某些重要数据被恶意篡改。

    9.使用合理的结构体,联合体来声明一组变量,使程序更加直观。同时合理分配内存空间。

    10.尽量少使用强制类型转换,防止数据丢失

    11.对于重复使用的函数和语句可以进行宏定义,增加可读性和代码简洁

    12.分支语句针对if...else if..后必须增加else,对于switch case...后必须增加default:break.

    13.尽量不用malloc来分配内存,防止没free内存导致内存溢出的出现。

    14.在中断和主函数中共同使用的全局变量要充分审核,防止被中断后该变量被恶意篡改。

    15.对于函数中的形参,如果形参传递的参数过于庞大,则尽量传递其指针,减少其堆栈的使用。增加函数传值的效率,如果怕传递的值被恶意篡改可用const放到形参指针前强制其为可读。

    16.使用指针时必须要赋予初始地址,防止野指针的出现。

    应用层面:

    1.选择合适折中的总线时钟,即不能太慢(防止程序运行不及时),也不能过快(EMC更容易受干扰)。
      对于时钟进度有要求的尽量使用外部晶振作为时钟参考源,因为内部RC震荡电路容易被温度干扰导致偏差在±1-3%

    2.对各个输出接口都应该有一个反馈的输入接口作为检测和检验,防止输出接口的动作没有实现。

    3.对于AD采样可以进行滤波以及合理配置AD寄存器,使采样值更加真实可靠

    4.对于通讯等配置合理的波特率,即保持数据反馈的及时性,同时也要保持数据不受干扰。

    5.不使用的接口尽量作为输入,降低功耗

    6.对于复杂的运算数据,可以制表的尽量以表格代替,用空间换时间的理念。

    7.合理分配运行时间,对于响应要求不高的可以放入主函数,对于响应要求高的场合可以加入中断函数中

    8.对于某些复位不影响功能的软件,可以适当加入软件喂狗。

    9.对于涉及某些存储在非易失性FLASH中的重要数据,对其写入更改需要进行解密过程,否则误擦除会导致功能严重异常

    10.注意所用芯片的是8位还是16位还是32位,制定通用的typedef文件,便于移植。尽量少用int,针对同平台,int的size也不同

    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    连续签到: 1 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5668
    最后登录
    2021-12-22
    发表于 2017-11-13 20:49:18 | 显示全部楼层
    NASA 的十大编码准则:

    1、简化控制流程:使用尽可能精简的控制流程构造编写程序 – 不要使用 setjmp 或 longjmp 构造、goto 语句,以及直接或间接的递归调用。

    2、为循环使用固定次数上限:所有的循环必须有一个固定的上限。 必须可以被某个检测工具静态证实,该循环不能达到预置的迭代上限值。如果该上限值不能被静态证实,那么可以认为违背该原则。

    3、不要在初始化完成后进行动态内存分配。

    4、不使用冗长的函数:如果标准格式为一个语句一行、一个声明一行,那么函数的长度应在一张纸的范围内,即每个函数的代码行不能超过 60。

    5、低断言密度:代码中断言的密度平均低至每个函数 2 个断言。断言被用于检测在实际执行中的异常情况。断言必须没有副作用,并应该定义为布尔测试。当一个断言失败时,应该执行一个明确的恢复操作,例如,把错误情况返回给执行该断言失败的函数调用者。对于静态工具来说,任何能被静态工具证实其永远不会失败或永远不能触发的断言违反了该规则(例如,通过增加无用的 assert(true) 语句是不可能满足这个规则的)。

    6、以最小范围级别声明数据对象:该原则同时也是数据隐蔽(Data hiding)的基本原则。所有数据对象均必须以尽可能最小的范围级别进行声明。

    7、检查参数和返回值:应在每次调用函数后检查非空函数的返回值,并在每个函数内部检查参数的有效性。

    8、限制预处理程序的使用:预处理器的使用仅受包含头文件和简单的宏定义的限制。符号拼接、可变参数列表(省略号)和递归宏调用不被允许。所有的宏必须扩展为完整的语法单元。通常不建议使用条件编译指令,但也不总是能够避免每次在代码中这样做的时候必须有基于工具的检查器进行标记,并有充足的理由。

    9、限制指针的使用:具体来说,不允许有超过一级的解除指针引用。解除指针引用操作不可隐藏在宏定义或类型声明中。不允许使用函数指针。

    10、编译所有代码:从开发工作第一天开始时,在编译器开启最高级别警告选项的条件下对代码进行编译。在此设置之下,代码必须零警告编译通过。代码必须通过源代码静态分析工具,每天检查一次以上,且零警告通过。
    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    无聊
    2018-7-31 08:40
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    299

    主题

    876

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14847
    最后登录
    2020-3-1
    发表于 2017-9-15 10:48:11 | 显示全部楼层
    谢谢分享~
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-11 11:14
  • 签到天数: 345 天

    连续签到: 1 天

    [LV.8]以坛为家I

    18

    主题

    1317

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    3300
    最后登录
    2023-3-16
    发表于 2017-9-15 11:11:00 | 显示全部楼层
    谢谢分享,软件不是要做什么可靠性分析之类的东西么,或者是不是过程评估之类的东西!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-11-15 16:18
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    259

    帖子

    3

    高级会员

    Rank: 4

    积分
    993
    最后登录
    2023-1-6
     楼主| 发表于 2017-9-15 13:01:22 | 显示全部楼层
    szy123 发表于 2017-9-15 11:11
    谢谢分享,软件不是要做什么可靠性分析之类的东西么,或者是不是过程评估之类的东西! ...

    是啊,很多。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    2017-9-16
    发表于 2017-9-15 20:11:39 | 显示全部楼层
    学习了,
    这里所列出来的都是一些通用性的,
    还可以结合具体的功能来想。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-2-28 16:09
  • 签到天数: 65 天

    连续签到: 1 天

    [LV.6]常住居民II

    8

    主题

    238

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    488
    最后登录
    2019-9-18
    发表于 2017-9-16 19:00:22 | 显示全部楼层
    围绕野指针发挥几条
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-6-5 15:27
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    207

    帖子

    0

    高级会员

    Rank: 4

    积分
    542
    最后登录
    2019-2-14
    发表于 2017-9-20 12:30:57 | 显示全部楼层
    NMI脚最好拉高,或者软件在复位前关闭NMI功能
    难得签到一次
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-11-15 16:18
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    259

    帖子

    3

    高级会员

    Rank: 4

    积分
    993
    最后登录
    2023-1-6
     楼主| 发表于 2017-9-21 15:24:52 | 显示全部楼层
    开着时光机 发表于 2017-9-20 12:30
    NMI脚最好拉高,或者软件在复位前关闭NMI功能

    说的太对了,想当年NMI脚要复用PWM功能,差点把我玩死了。。。。。万恶的NMI脚啊。只能说珍惜生命,远离NMI脚
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-2-7 18:18
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    13

    主题

    126

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1628
    最后登录
    2021-7-13
    发表于 2017-10-14 16:21:04 | 显示全部楼层
    设计阶段的潜在失效模式分析,厉害了,做软件都需要这个吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-11-15 16:18
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    259

    帖子

    3

    高级会员

    Rank: 4

    积分
    993
    最后登录
    2023-1-6
     楼主| 发表于 2017-10-25 09:12:38 | 显示全部楼层
    pythonworld 发表于 2017-10-14 16:21
    设计阶段的潜在失效模式分析,厉害了,做软件都需要这个吗?

      不同的行业标准不一样,反正我列举的都是软件通用的缺陷,你可以参考下
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-10-26 11:26 , Processed in 0.118110 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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