版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PS 死机案例系统死机的典型案例n取数据异常n所有中断均失效只有ARM核运行n栈溢出,界外数据被破坏n数据越界访问n中断被误打开,并没有清除中断n不能等到寄存器置位或者清零n函数重入问题n函数声明和实现的接口不统一n双处理器的同步问题取数据异常非法指令非法指令Function A()Function B() Struct *pStr = (Struct *)m_malloc(sizeof(Struct); pStr-pC = A; . m_free(pStr);/不小心不小心free了了pStr,这时候这时候pStr指向的数据块已指向的数据块已经被其他数据所填充经被其他数据所填充 . pStr
2、-pC;/调用调用A,但实际跳转到其他地址,可能进入指令预取但实际跳转到其他地址,可能进入指令预取异常中断,或者未定义指令异常中断,或者程序跑飞(最麻烦的)异常中断,或者未定义指令异常中断,或者程序跑飞(最麻烦的)取数据异常取数据异常中止取数据异常中止(DataAbort)Function A() char *p = GetPointer(index);/GetPointer没有写好,没有写好,返回了一个非法的地址(乱七八糟的数据)返回了一个非法的地址(乱七八糟的数据) . U8 q = *p;/CPU遇到从一个非法地址取数而产生遇到从一个非法地址取数而产生DataAbort异常,注意:如果是
3、异常,注意:如果是p=NULL是不会产生异常中断的,是不会产生异常中断的,必须是一个必须是一个CPU认为的不能取数的地址认为的不能取数的地址所有中断均失效在607平台老的Framework 上,有两个现象1.在第一幅开机动画处死机2.反复播放前一段开机铃声3.任何按键没有反应系统无任何中断产生,Melody部仅反复播放最开始送入的Midi数据,对用户来说是“死机”,实际是ARM核在bloop()中执行有限的几行代码。栈溢出,界外数据被破坏/#define SMS_NUM 10 /UTXXX SMS number#define SMS_NUM 50 /UTXXX SMS number.Funct
4、ion A SMSLog smsSMS_NUM;/仅仅修改宏定义是不够的,必须察看与之有关的所有代码 . memset(void *)sms, 0 xFF, SMS_NUM*SMS_SiZE);/栈后面可能有其他全局量,被“无辜”的赋为0 xFF .数据越界访问Function A . m = m_malloc(size); m+;/不小心+,可能是其他方式导致其+ memset(void *)m, 0, size);/堆中的数据被“无辜”破坏数据越界访问可以看到,紧挨在m后面的数据被无辜的破坏,导致系统在其他状态下“死机”。所有的赋值语句都要慎重,特别是对某一地址指向的一段数据进行赋值的时候
5、要特别小心。中断被误打开,且没有清除中断Function A SetTimeXInt(); /设置某个时钟,产生周期性中断 DisnableTimeXInt();/禁止该时钟中断(不需要该时钟).Function B DisnableAllInt();/禁止所有中断 . EnableAllInt();/使能所有中断,误打开了TimeX中断中断被误打开,且没有清除中断1.如果不需要该时钟,那么就要把时钟控制寄存器设置如果不需要该时钟,那么就要把时钟控制寄存器设置为禁止为禁止2.使能所有中断是危险的,必须使能那些需要使能的中使能所有中断是危险的,必须使能那些需要使能的中断断 U32 irqs =
6、ReadIntEnableReg(); WriteIntEnableReg(irqs);使得该时钟中断频繁进入,几乎完全占用了使得该时钟中断频繁进入,几乎完全占用了CPU的的MIPS,其他程序没有机会执行,从而表现出其他程序没有机会执行,从而表现出“死机死机”不能等到寄存器置位或者清零Function A while(1) if(U8)(*BBIO_XXXX_XXXX) = 0 x01) break;/如果等不到这么办如果等不到这么办 不能等到寄存器置位或者清#ifdef _DEBUGU32 nCount = 0;#endifFunction A #ifdef _DEBUG nCount =
7、0; #endif while(1) 一种可选的做法一种可选的做法 #ifdef _DEBUG nCount+; if(nCountXXXX) ASSERT(0);/做一个超时保护做一个超时保护 #endif if(U8)(*BBIO_XXXX_XXXX) = 0 x01) break; 函数重入的问题Function A . *BBIO_XXXX_XXXX |= 0 x08;/打开打开AD采样电路采样电路 while(*BBIO_YYYY_YYYY = 0 x0b);/采样完成采样完成 vol = *BBIO_ZZZZ_ZZZZ;/得到电压得到电压 *BBIO_XXXX_XXXX &
8、= 0 xF7;/关闭关闭AD采样电路采样电路如果函数如果函数c在调用在调用A时,正在等待采样完成,被中断打断,函时,正在等待采样完成,被中断打断,函数数D调用了调用了A,完成采样之后,把采样电路关闭了,完成采样之后,把采样电路关闭了,这样函数这样函数c就永远无法从就永远无法从A出来了。出来了。函数重入的问题1.可以在函数内部增加调试代码,来找到重入可以在函数内部增加调试代码,来找到重入的证据的证据2.也可以在系统级别避免类似函数的重入问题也可以在系统级别避免类似函数的重入问题(避免中断调用此函数)(避免中断调用此函数)3.如果无法避免重入,那只好关中断了如果无法避免重入,那只好关中断了函数声
9、明和实现的接口不统一XXX.hS8 A(U8 a, LP_U8 b, LP_U16 c);YYY.hU8 A(U8 a, LP_U8 b, LP_U16 c, U16 d);XXX.cS8 A(U8 a, LP_U8 b, LP_U16 c)双处理器的同步问题n双处理器的通信方式(串口,双口RAM等)n造成不能同步的原因往往是数据Buffer溢出,或者中断丢掉n数据Buffer大小的合理设定,考虑“生产者”和“消费者”的活动状态;从系统角度考虑中断优先级的安排n两边同步失调可能会造成死机“死机”预防(最重要)绝大部分的“死机”可以通过仔细的设计和编码预防主动设置“陷阱”,主动增加调试代码,在任
10、何程序不该进入的地方设置“陷阱”来“捕获”它,一旦捕获有更多的信息来分析(使用StackInsight工具)在一些看起来没有任何问题的地方也要设置“陷阱”(数据越界访问和栈溢出等导致看起来没有问题的地方也容易无辜牵连,这也是“死机”分析的突破口)“死机”预防系统软件正常运行图系统软件异常运行图“死机”预防主动设置“陷阱”后的图陷阱“陷阱”就是中止程序正常运行的代码。最常用的就是ASSERT(0);或者软件中断或者reset系统(release)“死机”分析n必现或者容易重现的“死机”分析,(Debug,代码走读,案例套用,版本比较)n落入陷阱的“死机”分析(StackInsight输出文件)n没有落入陷阱的,又很难重现的“死机”分析(陷阱没有设置全,运气不好)。重复1-2个星期的专项测试,争取重现,如果还重现不了,就让领导拍板是否可以量产。“死机”的“亡羊补牢”n“陷阱”处让系统resetnWatchdog “偷偷”地reset#ifdef _DEBUG#define ASSERT(x) DebugAssert(.)#else#define ASSERT(x) (if(FALSE=(U32)x) reset_req()#end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度人力资源信息管理系统采购与实施合同3篇
- 2024年度医疗器械行业市场调研与分析合同6篇
- 2024年度绿化项目环境影响评价合同3篇
- 2024年度景区食堂早餐外包服务协议2篇
- 2024年度专业赛事用车租赁合作协议3篇
- 2024年度日租房租赁与亲子活动策划服务合同3篇
- 2024商铺租赁合同意向书:详细规定租赁期间设施设备维修责任3篇
- 2024年度大豆市场分析与销售预测合同3篇
- 2024年度知识产权质押融资担保合同3篇
- 2024年农业生态园环保设施建设与维护合同3篇
- 承包学校食堂经营方案
- linux试题相关案例1架设一台DHCP服务器并按照下面的要求进行配置
- 2023年供货方案 医疗器械供货方案(四篇)
- 2008大众朗逸维修手册带电路图培训版
- 杭师大心理学基础题库
- 2023年艺术学概论彭吉象知识点提要
- GB/T 3452.1-2005液压气动用O形橡胶密封圈第1部分:尺寸系列及公差
- 2023年自考传播学概论试题及答案
- GB/T 18277-2000公路收费制式
- 2023年住院医师规范化培训胸外科出科考试
- 11468工作岗位研究原理与应用第7章
评论
0/150
提交评论