在线时间260 小时
UID415468
注册时间2013-1-30
NXP金币0
TA的每日心情 | 慵懒 2018-11-15 16:18 |
|---|
签到天数: 39 天 连续签到: 1 天 [LV.5]常住居民I
高级会员

- 积分
- 993
- 最后登录
- 2023-1-6
|
平时我们做汽车产品的项目主机厂都有要求提交各类文件,其中有个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也不同
|
|