ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:95.88KB ,
资源ID:18672143      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18672143.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(关于功能安全编程的软件实现方法docx文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

关于功能安全编程的软件实现方法docx文档格式.docx

1、对于英飞凌的微控制器产品来讲 , 微控制器部分的测试有着强大的硬件功能支持 . 比如 Lock-Step 内核的设计能够防范极为难以追钟的主控制器失效 ,Aurix 系列的处理器都有丰 富的存储器ECC校验功能,还有看门狗,SMU等等.需要注意的是 , 除了 IEC 之外, 还有数家其他机构在此领域的标准也是业内较为认可的 : 比 如刚刚提到的德国 VDE英国IET,美国IEEE.本文为了篇幅原因,主要描述IEC的标准.其他 组织的相关标准的方法与原理与之类似 , 但是细节可能有所差异 . 英飞凌的软硬件产品设计 过程与此几家机构都有紧密的合作与联系 .与此同时 , 一些国家自己制定的标准也向

2、国际标准借鉴 . 比如 UL 60335-1, CSA 60335-1 与 EN-60335-1 都是基于 IEC 60335-1 制定的 . 为甚么一些国家不直接使用国际标准而进行自定标准 ? 一般而言是为了设定贸易壁垒 , 保 护本国的厂家 .这些标准总体来讲跟国际标准非常类似 ,差别可以说几乎没有 . 但是认证方 法, 途径等等有一些本国化的特点 . 如果要进行本地标准的认证 , 最好找一些当地的专门从 事该业务的机构进行合作 . 如果产品设计是根据国际标准来的 , 通过本地化的标准基本是没 有问题的 , 只是要走个流程而已 GrDUPCornPanentS to be testedMl

3、icro SPeCifiCCPU registersCPU PrOram CoUnterCIOCkFixed and variable memory spacesIntemal addressingIntemaI data PathAPPliCatiOn SPeCifICInternJPt handlingEXLernaI COmrnlUniCation and addressing (if any)TimingI/O PeriPheryADC and DACAnaIog multiplexer图MCU中被Class B规范考虑的因素为符合Class B的规范,软件上一般要考虑如下因素:*CP

4、U寄存器测试*时钟监视RAM功能检测*Flash校验和完整性检测*看门狗自测栈溢出监视其中最后两条并非标准明文规定的,但是拥有这两条功能会提高软件的整体健壮性这些测试的一般工程实践测试项目工程实践CPU寄存器测试启动时检测Core寄存器的读写,定期检测栈 指针,一旦发生错误立即跳转至 Fail Safe处理函数.程序计数器(PC)主要由看门狗来防止程序跑飞寻址与数据路径此项由RAM功能,Flash完整性测试与栈检 查组成,栈底的最末端会写入一种特定的内 容用于检测栈溢出,栈顶也会写入另一种特疋内谷用于检测栈 Un derflow时钟两组独立的时钟源相互检验NV存储程序启动时即将整个 NV空间进

5、行CRC校验, 如果有NV空间用作参数保持会在运行时被修改则也要考虑此因素,另外部分内容定期 被检查程序在烧写的时候一般会将计算好 的CRC烧写在特定位置以作校验之用RAM存储启动时即要进行遍历检查,另外关键变量使 用双反向冗余方法进行保护(位相反的值被 存储在非相邻的区域用作校验)为了提升用户通过 Class B认证的速度,英飞凌为其微控制器提供了已经通过认证的 ClassB软件库供用户集成.(Aurix/TriCOre 与特定型号的相关库要通过厂商认证才能获取).当然需要提醒的一点是,用户即使使用已经认证的厂家软件库 ,整体应用是否符合认证要求依旧需要通过相应的机构进行认证 至于以下内容属

6、于应用相关的因素 :模拟:ADC/DAC GPIo*中断与外部通信定时器外部存储器寻址模拟器件(ADC/DAC与用户应用场景,特定的型号的外设能力相关度较大 一般而言应该定 期检查相应的管脚 一些多余的模拟引脚可用于检测额外设定的检测点 如果使用了内部参考源,则该参考源也应当定期检测对于GPIO,Class B规定必须侦测到任何数据IO的失效这一点可以配合其他应用部分进 行检测,比如关掉一个制冷/加热开关,用模拟采样值来回来验证该开关是否失效 如果数字部分与模拟部分是相互独立供电,则此点需要额外小心两者电压上的差异 对于中断与外部通信接口 ,可也通过设定一个软件计数器来检验中断与通信发生的次数

7、 ,在通过经验检验过的时钟源来通过该计数器的结果来判定被测试的中断与通信接口是否正常 工作.对于定时器,可以通过某函数在指定的时间范围内运行的次数来验证 也可以通过不同的时钟源来交叉验证定时器定时器与应用的耦合度属于较高的部分对于外部存储器寻址,大多数英飞凌的微控器型号不涉及到这点 涉及到的型号请参考RAM/Flash检测的方法以下是一种内存分配方法举例,关键变量以互补的形式在不同的 RAM区间被保留了两份以互相校验另外堆栈也做了特殊处理已检测 StaCk OVerfIOW 与Under Flow 的情况AfMJAMF ITJn Dmfi teciC3CT A VriefcJeea Uilde

8、r run fl-e c(LrnLIEedfAMSgPOCrIiC PaItBm IDdi StKk OTeritoWSoachSPeCfc PaISfenn IQ dclnl tsc UndCTIw一种检测程序执行流程的方法对于程序执行的各个阶段都分配一个不同的数字进行编码 这些变量以双互补形式进行冗余存储当一个程序的阶段被执行,进行一种四步对称检测前两步检测该程序阶段被正确 调用(在调用该程序段与返回的地方执行 ).后两步检测该程序是否被正确执行 (该程序段的入口与出口 ).CoUnljer = COUnter + 5 CoLlnteJIr = Counter + 7 JComPClnG

9、nt tsst 1CoUntglL = CoUIrlter_ - 7)CoUnter_ = CoUnter_ - 5V COmPOnent test 2ComPOnent test nJU nbs LJoox 山FlaW CheCk point: CheCk CotrferVaIUe and COUnterXofJ COUnter - OXFFf-FCOUnter GOLJn仙XOR0x0005 OXFFFFOXFFFAOXOOoC OXFFFFOXFFF3OXOOOC OXFFF8OXFFF4OXOooC OXFFF3OXFFFFFailFailSafe 0 routine这种检测方法对CP

10、U负载影响不大,因为每次检测只需操作互补变量对的其中一个 因为调 用/返回与入口/出口总是配对出现的,故此互补变量对的互补关系总是被保持 .之后安排数 个检测点对非预料性结果进行检测,一旦发生非预料结果及跳入 FailSafe模式.此例子中该程序阶段的关键数字是 5,而该被执行的程序段为 7.集成之后的程序流程示例FaiI SafefSXC两个独立时钟互相校验庙用桿昂初始化用户任务3其中开机自检一般安排在 c_startup之前,因为C StartUP 就假定所有的部件运行正常定时检测项目(一般是 栈检测)常规检测项目用户任务1用广任务2官动自检常规检测初始化用户ISR般是用高低速时钟分别做定

11、时中断 ,高速时钟中断增加计数器,低速时钟ISR中校验高速 时钟计数器是否为预料误差之中提高EMC性能的软件技巧要提高EMC生能,软件硬化是很关键的一个步骤在软件设计阶段就考虑防范 EMC干扰是非常重要的,也是成本最低的做法一般而言要考虑 的EMCF扰源:微控制器不响应输入程序跑飞*执行未预料的指令野指针*子程序执行错误寄生复位/中断单元配置错乱* I/O状态被错误配置可能的后果:产品产生非预料的响应.丢失上下文状态分支错误.中断丢失数据完整性丢失读入错误的输入状态本文介绍两种措施:1.预防性措施,可以在现有设计上添加这些措施以增强软件的健壮性2.自动恢复措施,当检测到错误状态,进行记录(如有

12、需要可以进行错误提示 ),Fail-Safe 操作,之后进行尝试自动恢复到已知状态,理想状况是最终的用户感觉不到这个过程预防性措施:使用看门狗或者类似的定时方法看门狗的原理很简单,一旦开启了,那么防止其复位微控制器的惟一方法就是在其复位操作 之前进行喂狗操作但是开启看门狗与喂狗操作的位置必须正确设计 ,否则看门狗起不到预防错误的目的F图是两种常见的错误看门狗使用方法图看门狗使能过晚,导致在初始化阶段程序就跑飞了图 程序跑飞了 , 但是看门狗在中断中喂 , 结果是看门狗不能正确复位 针对以上两种经典错误 , 以下两点需注意 :1.看门狗越早使能越好 , 某些处理器如 Aurix 系列在复位之后看

13、门狗就是自动开启的为理 想状态2. 不要在中断或者未被超时机制保护的程序点进行喂狗操作 两次喂狗之间的间隔需要精心计算 , 中断也需要被考虑进去 . 看门狗能起到的最小的作用就是能复位整个程序 , 这也意味着程序执行的上下文与数据完 整性发生丢失 .所以在程序启动的时候 , 需要借助一些状态位来判断复位源 . 正确的看门狗使用示意 :WDG ENABLE INT对未用的程序空间进行处理基本上所有的应用中,微控制器的代码空间是没有使用完全的 .不管它的话,那么它的内容为杂乱的数据(新MCl第一次烧写程序的话,这些未使用的代码空间为 Oxff,但MCUfe品大多会进行出厂测试,所以Oxff也是不能

14、保证的)保险的做法就是将这些未使用的空间填充 为跳转至某已知地址的指令,这样保证程序即使跑飞了也能跳回到已知的位置 对于 Aurix 处理器 , 可以填充为未知指令触发 trap, 或者直接填充非法指令以引发 trap, 还 有MPl也可以应用起来触发trap.预防性措施 :冗余输入读取状态的时候 ,多读取几次 , 尤其是外部信号 , 多读取几次以确认不是电磁干扰引起的错 误触发 . 这个就是最便宜的输入滤波器的效果 !处理未使用的中断向量对于 tricore 内核的处理器 ,中断向量表是由软件实现的 .那么尽量不要使用多余的向量表 项目.但是对于已经使用的向量与最大可能的向量之间也可以做类似

15、处理 .一般的做法就是 设定一个默认的 ISR. 比如 :Default_Handler PROCEXPORT WWDG_IRQHandler WEAKEXPORT PVD_VDDIO2_IRQHandler WEAKEXPORT RTC_IRQHandler WEAKEXPORT FLASH_IRQHandler WEAKEXPORT RCC_CRS_IRQHandler WEAKEXPORT EXTI0_1_IRQHandler WEAKEXPORT EXTI2_3_IRQHandler WEAKEXPORT EXTI4_15_IRQHandler WEAKEXPORT TSC_IRQHa

16、ndler WEAKEXPORT DMA1_Channel1_IRQHandler WEAKEXPORT DMA1_Channel2_3_IRQHandler WEAKEXPORT DMA1_Channel4_5_6_7_IRQHandler WEAKEXPORT ADC1_COMP_IRQHandler WEAKEXPORT TIM1_BRK_UP_TRG_COM_IRQHandler WEAKEXPORT TIM1_CC_IRQHandler WEAKEXPORT TIM2_IRQHandler WEAKEXPORT TIM3_IRQHandler WEAKEXPORT TIM6_DAC_

17、IRQHandler WEAKEXPORT TIM7_IRQHandler WEAKEXPORT TIM14_IRQHandler WEAKEXPORT TIM15_IRQHandler WEAKEXPORT TIM16_IRQHandler WEAKEXPORT TIM17_IRQHandler WEAKEXPORT I2C1_IRQHandler WEAKEXPORT I2C2_IRQHandler WEAKEXPORT SPI1_IRQHandler WEAKEXPORT SPI2_IRQHandler WEAKEXPORT USART3_4_IRQHandlerEXPORT CEC_C

18、AN_IRQHandlerEXPORT USB_IRQHandlerWEAKWWDG_IRQHandlerPVD_VDDIO2_IRQHandlerRTC_IRQHandlerFLASH_IRQHandlerRCC_CRS_IRQHandlerEXTI0_1_IRQHandlerEXTI2_3_IRQHandlerEXTI4_15_IRQHandlerTSC_IRQHandlerDMA1_Channel1_IRQHandlerDMA1_Channel2_3_IRQHandlerDMA1_Channel4_5_6_7_IRQHandlerADC1_COMP_IRQHandlerTIM1_BRK_

19、UP_TRG_COM_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTIM6_DAC_IRQHandlerTIM7_IRQHandlerTIM14_IRQHandlerTIM15_IRQHandlerTIM16_IRQHandlerTIM17_IRQHandlerI2C1_IRQHandlerI2C2_IRQHandlerSPI1_IRQHandlerSPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandlerUSART3_4_IRQHandlerCEC_CAN_IRQHandlerUS

20、B_IRQHandler移除关键的指令与非法的指令关键指令关键指令就是状态切换,比如正常模式进入低功耗模式的代码 可以通过观察ist 文件来找到其位置.一般而言程序跑飞了之后,很有可能会读取到这段指令,可以在其前后加一些 NoP指令让这个位置发生位移以降低读取到这段指令的概率 .非法指令非法指令就是内核不认识的指令,对于TriCOre或者大多数其他内核来讲执行这样的指令 会发生Trap.处理方式如上.对AD采样值进行处理一般而言就是多采样几次取平均,也可以参照电视节目海选评分的做法去除最高分去除最 低分再平均以防止读入受到干扰的值配置定期检查与重新配置一般而言发生配置丢失,错乱的事故多发地在于

21、时钟与 IO的配置,因为这些地方的配置离外部电路的物理位置最近,最易受干扰对这些配置采取定期检查并且重新配置可以有效提 高EMC生能.预防性技巧优点缺点实施要点看门狗与CPU相互独立,较少受CPU影响如果有低功耗模式,则 看门狗要格外留意实施简单但要精心放 置看门狗初始化与喂 狗操作未使用代码空间插入 复位快速从跑飞状态跳出丢失了执行的上下文注意读取复位源未使用代码空间插入跳转或TraP无注意精心设计相应的TraP以使恢复更加彻 底AD采样平均提升了采样的精度与 抗干扰性要多采样几次且需要 多余的运算注意选取有效值的技 巧移除关键与非法指令有效防范误执行相应的指令对真正要使用此指令 的情况有干

22、扰观察.list 文件冗余读取输入提升了读取的稳定性要多读取几次还要判 断哪种是错误的需要 软件决策时间注意选择决策的判据处理未使用的中断源防止向量错误执行看上文的参考代码定期检测与重新恢复 重要配置防止重要配置丢失需要软件工夫只需保护易于丢失的 时钟与IO配置,其他 配置可以无需此种考 虑表 技巧优缺点一览表冗余数据存储与交换只要是存储在片内的数据,那么一定会受到EMC勺影响.常见的保护方法包括双冗余互补存 储,ECC校验.值的一题的是某些产品硬件上就支持某些冗余与校验 ,比如AUriX产品的存储 器都有ECC校验的硬件特性,可以利用起来.以上是预防性措施 , 下面介绍自恢复技巧 . 在工程

23、实践中 ,非预料性复位 ,PC 跑飞与寄生中断是三 种最为常见的EMC造成的结果.以下的技巧也针对此几种结果而试图自恢复 .值的注意的是,这几种 情况中,RAM内容,Flash/EEPRoM的内容一般而言都是完整的 (断电了就另当别论),所以自恢复要将 这特点给利用起来 .自恢复技巧 : RAM 中保持程序运行的上下文状态下图是一个在RAM中保持当前执行状态的例子,要点是每次输出状态改了就在 RAM中保持 其状态,如果有PWM出之类的配置,也加以保持,这样在发生看门狗或者其他的复位之后 , 程序可以读取复位源 +当前的执行状态自动恢复到跑飞之前的状态 . TsMMTrcPDrlr* CMnIw

24、MDgIejlJlLJiroiLflLL :JHKICFml自恢复技巧:把看门狗用精确一点大多数程序员使用看门狗的习惯就是 :能喂狗的时候,喂到最饱,在喂狗点将看门狗的值恢复到最大可允许的数字以最大限度减少遗漏喂狗的风险 这样做显然不是正确的喂狗方法正确的做法是精确掐好看门狗的计数器的值 ,某个函数运行时间过长的话,果断采取相应措NO施以自恢复使用复位标志来确定复位源复位有很多种,上电复位,看门狗复位,电压监测复位,复位引脚复位等等精确判断是哪一 种复位,之后采取正确的相应措施能够恢复某些 EMC引起的干扰将程序执行的上下文保存到 NV存储器这是一步更绝的技巧,因为编程NV存储器的时间比RAM

25、写入要花的长得长的时间以AUriX 产品为例,时间大概在数十 ms左右.而在这期间很可能又发生了 EMC干扰导致复位所以要 使用此技巧需要考虑多种因素,包括在多个存储区间进行冗余保持 ,添加特殊的标记/CRC等 等.而且这种技巧只适合于保持变化并非很频繁的上下文 频繁发生变化的上下文还是 RAM 保持为妙另外现在新工艺日新月异发展,有很多新的工艺的存储器,比如铁电存储器有NV 存储器读写都较快,还有自带电池的RAM都是设计者值得考虑的选项后记英飞凌的半导体产品从硬件上来讲 ,经过了严格的验证与测试,且通过了多项业界认可的标准,比如AEC-Q100等等但是这并非意味着软件预防与恢复技巧是杞人忧天 ,庸人自扰任何汽车电子的设计工程师应该很严肃地对待产品的安全性 预防性措施可以提高软件的健 壮性 ,自恢复技巧能够在受到严重干扰的情况下进行自救 .考虑了这些情况的产品将与未考 虑这些情况的产品拥有非常显著的差别 .

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1