关于功能安全编程的软件实现方法

合集下载

程序设计源代码

程序设计源代码

程序设计源代码程序设计源代码是软件开发过程中的核心组成部分,它包含了实现软件功能的所有指令和逻辑。

源代码通常以文本形式存在,使用特定的编程语言编写,如Java、Python、C++等。

以下是对程序设计源代码的详细讨论。

源代码的结构1. 注释:源代码中的注释用于解释代码的功能,帮助开发者理解代码逻辑。

注释通常不会被编译器执行。

2. 变量:变量用于存储数据,它们可以是整数、浮点数、字符、字符串等。

3. 数据类型:不同的编程语言有不同的数据类型,用于定义变量可以存储的数据种类。

4. 控制结构:包括条件语句(如if-else)和循环语句(如for、while),用于控制程序的执行流程。

5. 函数/方法:函数是一段可重复使用的代码,用于执行特定的任务。

方法通常与对象相关联,是对象的行为。

6. 类和对象:在面向对象编程中,类是创建对象的蓝图,而对象是类的实例。

7. 库和模块:库是一组预先编写好的代码,可以被多个程序共享和使用。

模块是组织代码的一种方式,通常包含一组相关的函数和类。

源代码的编写规范1. 命名规范:变量、函数、类等应该使用有意义的名字,以提高代码的可读性。

2. 格式规范:代码应该遵循一定的格式,如缩进、括号的使用等,以保持一致性和可读性。

3. 代码复用:尽量避免重复代码,通过函数和模块来实现代码的复用。

4. 错误处理:源代码应该包含错误处理机制,以确保程序在遇到问题时能够优雅地处理。

5. 安全性:编写源代码时,需要考虑到安全性,避免潜在的安全漏洞。

源代码的版本控制版本控制是一种记录源代码变更历史的方法,它允许开发者跟踪每次的更改,并在必要时回退到旧版本。

常见的版本控制系统包括Git、SVN等。

1. 分支管理:允许开发者在不影响主分支的情况下,进行新功能的实验和开发。

2. 合并和冲突解决:当多个开发者同时工作在同一个项目上时,版本控制系统提供了合并不同分支的功能,并在出现冲突时提供解决方案。

3. 历史追踪:版本控制系统记录了每次提交的详细信息,包括作者、时间、更改内容等。

大模型辅助软件开发:方法与实战_随笔

大模型辅助软件开发:方法与实战_随笔

《大模型辅助软件开发:方法与实战》读书笔记1. 大模型辅助软件开发概述随着人工智能技术的飞速发展,大模型辅助软件开发已成为当今软件产业的一大热点。

即大规模预训练模型,凭借其强大的语义理解、计算和编程能力,正逐步改变着软件开发的方式。

传统的软件开发过程中,开发者需要手动编写大量的代码来实现各种功能。

随着软件规模的不断扩大和复杂性的增加,这种手动编码的方式已经难以满足需求。

传统开发方法在处理大量数据和复杂逻辑时也存在效率低下的问题。

大模型辅助软件开发正是为了解决这些问题而诞生的,它利用大规模预训练模型在海量数据上进行训练,从而获得了强大的语义理解和计算能力。

这些能力可以应用于软件开发过程中的各个环节,如代码生成、代码补全、代码优化等。

代码自动生成:通过大模型的语义理解能力,可以自动识别出代码中的规律和逻辑,从而自动生成相应的代码片段。

这大大减少了开发者的工作量,提高了开发效率。

代码补全:大模型具备强大的代码补全功能,可以在开发者输入代码时提供智能提示,帮助开发者快速补全代码。

这不仅可以提高开发效率,还可以减少因拼写错误等原因导致的bug。

代码优化:大模型可以通过分析代码的性能指标,提供针对性的优化建议。

它可以发现代码中的冗余操作,提出改进算法等建议,从而提高代码的执行效率。

大模型辅助软件开发作为一种新兴的开发方式,正在逐渐改变着传统软件开发模式。

它通过利用大规模预训练模型的强大能力,为开发者提供了更加高效、便捷的开发工具和方法。

随着技术的不断进步和应用场景的拓展,大模型辅助软件开发将在软件开发领域发挥更加重要的作用。

1.1 大模型的概念与特点顾名思义,指的是规模庞大、参数众多的机器学习模型。

在软件开发领域,大模型通常指的是深度学习模型,它们通过大量的数据进行训练,从而具备对复杂数据的分析和预测能力。

这些模型可以对代码进行自动化分析、缺陷检测、智能推荐等功能,辅助软件开发者提升开发效率和代码质量。

数据驱动:大模型依赖大量的数据进行训练,数据的丰富度和质量直接影响模型的性能。

关于功能安全编程的软件实现方法

关于功能安全编程的软件实现方法

关于功能安全编程的软件实现方法功能安全是指在发生故障或异常情况下,系统能够正确地执行其关键功能,从而保护人、财物和环境的安全。

在现代软件系统中,功能安全编程是至关重要的一部分。

下面将介绍功能安全编程的软件实现方法。

一、功能安全编程的软件实现方法包括以下几个方面:1.模块化设计:模块化设计是将整个软件系统划分为多个独立的、可重用的模块,并通过明确定义的接口进行通信。

在功能安全编程中,模块化设计可以提高系统的可靠性和可维护性。

每个模块应该有单独的功能单元,并根据需求进行适当的接口标准化。

2.防错设计:防错设计是在软件系统中引入适当的错误检测和纠正机制。

例如,通过添加冗余计算来检测错误,或者使用错误编码来纠正错误。

防错设计可以提高系统的可靠性和容错能力,从而增加系统对故障的鲁棒性。

3.安全协议:安全协议是在软件系统中实现通信安全的重要手段。

通过使用加密算法和身份验证机制,可以确保软件系统中的通信过程对于未经授权的访问是安全的。

安全协议可以保护软件系统免受恶意攻击和信息泄露。

4.资源管理:功能安全编程中,合理管理系统的资源是非常重要的。

这包括管理内存、处理器和外部设备等资源。

合理的资源管理可以减少系统的故障率,提高系统的性能和可用性。

5.异常处理:在功能安全编程中,合理处理异常情况是非常关键的。

在系统发生故障或异常情况时,应该及时地识别和处理,以确保系统能够正确地执行关键功能。

合理的异常处理可以提高系统的可靠性和可用性。

6.测试和验证:测试和验证是功能安全编程中必不可少的一部分。

通过设计合适的测试用例和验证方法,可以验证系统是否满足功能安全要求。

测试和验证可以帮助我们发现系统中的潜在错误和问题,并进行及时的修复和改进。

二、功能安全编程的软件实现方法需要按照以下几个步骤进行:1.需求分析:首先,需要对功能安全的需求进行详细的分析和定义。

这包括对系统的功能和性能要求进行评估,明确系统所需的功能安全特性。

2.设计阶段:在设计阶段,需要将需求转化为具体的软件设计。

plc实现双手启动按钮功能的方法

plc实现双手启动按钮功能的方法

plc实现双手启动按钮功能的方法以PLC实现双手启动按钮功能的方法在工业自动化控制领域中,为了确保工作人员的安全,双手启动按钮是一项非常重要的安全设备。

它可以防止误操作或意外启动机器,从而减少工伤事故的发生。

PLC(可编程逻辑控制器)是一种常用于工业控制系统中的电子设备,可以通过编程来实现各种功能。

本文将介绍如何使用PLC实现双手启动按钮功能。

1.双手启动按钮的原理双手启动按钮的原理是需要两个按钮同时按下才能启动机器或设备。

当一个按钮按下时,PLC会检测到信号,但不会启动机器。

只有当另一个按钮同时按下时,PLC才会接收到另一个信号,并且允许机器启动。

这样可以确保工作人员的两只手都在安全位置上,避免误操作或意外启动。

2.使用PLC实现双手启动按钮功能的步骤需要将两个双手启动按钮分别与PLC的输入端口连接。

这些按钮应该是断开型按钮,也就是说,当按钮没有按下时,按钮的触点是断开的,PLC读取到的信号是低电平。

当按钮按下时,按钮的触点闭合,PLC读取到的信号是高电平。

接下来,在PLC的编程软件中,创建一个新的程序用于实现双手启动按钮功能。

根据PLC的型号和编程软件的不同,具体的操作步骤可能会有所不同,但基本原理是相通的。

需要为两个双手启动按钮分配两个输入端口,并设置相应的IO属性。

这样PLC才能读取到按钮的状态。

然后,在程序中创建两个变量来保存按钮的状态。

这两个变量可以是布尔型变量,分别表示两个按钮的状态。

当按钮按下时,对应的变量值为true;当按钮没有按下时,对应的变量值为false。

接下来,需要编写逻辑代码来实现双手启动按钮功能。

可以使用逻辑与(AND)运算符来判断两个按钮的状态是否都为true。

如果是,则允许机器启动;如果不是,则禁止机器启动。

这样就实现了双手启动按钮功能。

将程序下载到PLC中,并进行测试。

按下一个按钮,观察PLC读取到的按钮状态是否正确;然后同时按下两个按钮,观察机器是否启动。

如果一切正常,说明双手启动按钮功能已经成功实现。

三菱编程软件使用方法(可编辑修改word版)

三菱编程软件使用方法(可编辑修改word版)

组织教学:班级人数出勤人数缺勤人数教学方法:讲解法,演示法教学目的:1.了解SWOPC-FXGP/WIN-C 编程软件的使用方法2.基本掌握SWOPC-FXGP/WIN-C 编程软件的使用方法授课内容概述:SWOPC-FXGP/WIN-C 编程软件的使用方法重点、难点:WOPC-FXGP/WIN-C 编程软件的使用方法教学准备:SWOPC-FXGP/WIN-C 编程软件电脑示范操做程序,要点:1、WOPC-FXGP/WIN-C编程软件的使用方法2、注意事项。

巡回指导程序、要点:1、WOPC-FXGP/WIN-C编程软件的使用方法2、注意事项。

作业(课堂练习作业及课外作业):课堂:软件使用课外:书上习题。

复习要点:PLC 的结构学生实习台位分配:2 人一组安全操作规程;1、设备的正确实用2、电工安全操作规程结束指导程序,要点总结,小结SWOPC-FXGP/WIN-C 编程软件的使用(一)概述1.SWOPC-FXGP/WIN-C 编程软件的功能SWOPC-FXGP/WIN-C 是应用于FX 系列PLC 的编程软件,可在Windows 下运行。

在该软件中,可通过梯形图、指令表及SFC 符号来编写PLC 程序,建立注释数据及设置寄存器数据等。

创建的程序可在串行系统中与PLC 进行通讯、文件传送、操作监控以及完成各种测试功能。

也可将其存储为文件,用打印机打印出来。

2.编程系统的构成与配置SWOPC-FXGP/WIN-C 主要由以下部分构成:系统操作软件(用两张1.44MB的3.5 英寸软盘装载)、操作手册、软件登记卡、接口单元及电缆线(任选)。

可供选择的接口单元与电缆线有:1)FX-232AWC 型RS-232C/RS-422 转换器(便携式);2)F X-232AW 型RS-232C/RS-422 转换器(内置式);3)F2-232CAB 型RS-232C 缆线(用于PC-9800,25 针D 型接头,3 米);4)F2-232CAB-2 型RS-232C 缆线(用于PC-9800,14 针接头,3 米);5)F2-232CAB-1 型RS-232C 缆线(用于PC/AT,9 针D 型接头,3 米);6)FX-422CAB0 型RS-422 缆线[用于FX0,FX0S,FX0N 型PLC,1.5 米];7)FX-422CAB 型RS-422 缆线[用于FX1,FX2,FX2C 型PLC,0.3 米];8)FX-422CAB-150 型RS-422 缆线[用于FX1,FX2,FX2C 型PLC,15.米]。

【功能安全】功能安全产品的设计流程

【功能安全】功能安全产品的设计流程

【功能安全】功能安全产品的设计流程自动化程度的提高为人们日常生活中的方方面面都带来了更多的舒适性和灵活性,但我们也需要注意到这些好处背后的安全风险。

尤其是工业领域中让人引以为傲的高精密生产线,它们应当是易于使用,并能提供高度舒适和安全的操作性。

本文深切认为技术系统不应当为人们和环境带来超出允许风险范围的安全风险。

完全没有风险是不现实的,所以风险可接受与否在于其严重程度。

每个领域对可接受风险程度都有自己的定义,并使用不同的安全等级对其进行衡量。

对于电气和可编程系统来说,得益于一系列标准建立,由此形成了关于功能安全的共识。

这些标准适用于不同的应用领域,但它们都基于由IEC61508标准派生出的安全理念。

图1:常见的功能安全标准概览IEC61508标准覆盖了系统的整个生命周期,并着重为系统中可能出现危险的部分制订了相关规范。

该标准旨在提供从零开始设计系统的最安全方式。

实现功能安全的普遍措施是添加额外的元器件,用于监控功能的正常运行以及在发生不正常的情况时对系统进行控制。

这个理念常用于工业自动化或过程工业领域中。

IEC61508标准定义了功能安全的操作模式:低要求操作模式、高要求操作模式和连续模式。

操作模式则由每年对于安全功能的使用频率决定。

同时,针对功能安全领域中的标准控制功能的设计方法是可选的。

IEC61508标准中定义的连续模式包含这些信息。

通常做法是从分析所有可能对系统产生影响的关键问题开始。

所有被定位的问题必须使用参数进行衡量,如暴露时间、受伤的严重程度以及脱离伤害的可能性。

这是典型的风险分析措施,必须在没有额外电气保护系统的情况下对受控设备施行。

系统整个生命周期的所有部分均必须使用该措施。

凭借风险图,风险分析将提供要求的安全完整性等级(Safety Integrity Level,SIL)。

在遵循ISO13849标准的情况下,风险图将提供要求的性能等级(Performance Level, PL)。

RSLogix5000编程软件V20版安全加密功能介绍

RSLogix5000编程软件V20版安全加密功能介绍

FactoryTalk Administration Console————简单使用介绍简单使用介绍RSLogix5000编程软件V20版安全加密功能介绍:一、RSLogix5000编程软件从V20版开始,安全加密功能有所变化。

在V20版之前,安全加密有两种操作:1、对部分程序或指令加密:使用路径:在RSLogix5000项目工程中选择Tools->Security->Configure Source Protection,这里可以用不同的密码加密不同的例程,还可以选择被加密的例程是否可见。

如下图操作:如果你的软件里没有Configure Source Protection这个选项,可以在RSLogix5000安装软件里找到文件,安装即可。

2、对整个控制器加密:使用路径:在RSLogix5000项目工程中选择Tools->Logix CPU Security Tool,这里可以通过设定的密码锁住控制器,防止程序被上传或下载。

二、从RSLogix5000编程软件V20版开始,上述的两种加密方式中第一种没有变化,还可以照常使用。

第二种加密方式,即Logix CPU Security Tool不再有效,RSLogix5000软件将安全功能扩展升级,交给FactoryTalk Administration Console软件控制!FactoryTalk Administration Console是跟随FactoryTalk Services Platform 2.50一起自动安装的。

您可以通过Start->All Programs->Rockwell Software->FactoryTalk Administration Console路径打开该软件。

下面是对该软件的一些主要配置,快速教会您使用该软件:打开软件,会弹出如下信息,请选择Network选项,点击OK,打开软件。

CC 木马编程进阶与实战

CC  木马编程进阶与实战

C/C++木马编程进阶与实战精摘【内容提要】本书全面介绍了C/C++语言网络编程和Socket编程的基本方法。

重点剖析了目前流行木马的编程方法,揭露了黑客木马编程技术内幕。

本书的特色在于从整体入手,先学习木马程序的整体框架雏形,然后一步一步地深入学习木马编程中的隐藏技术、管道技术、反弹技术以及远程注入技术等,全书结合多个生动案例,环环相扣,深入浅出,实现黑客编程技术的融会贯通。

本书提供的程序代码力求完整、精简以及可读性强,为初、中级黑客编程爱好者提供了实用的学习参考资料。

同时也可以作为大中专院校学生课外编程参考资料。

【序】一直以来想写一本关于黑客编程方面的书,一方面,市面上流行的黑客书籍大多拘泥于黑客工具的使用上,仅适合入门级的黑客技术爱好者;另一方面,黑客技术博大精深,自身的学识浅薄,不能写成令大家满意的作品,所以就一直搁浅。

由于我的上一部专著《信息安全顾问最佳实践指南》的读者给了我颇多的建议,同时也给了我写一本黑客编程方面的书籍的信心。

在中国,随着Internet的发展,黑客技术的爱好者也越来越多,水平也越来越高,他们不再满足使用别人的工具,也想自己亲自动手编制一些工具,这就非常需要一部关于黑客技术理论方面的书籍。

兵家云:“知己知彼,百战不殆”,毛主席也说过“要想知道梨子的滋味,就得亲自尝一下”,所以,我们要亲自动手编制一些实用的小程序,首先,我们要摈弃那些代码冗长,功能大而全的程序;其次,从整体入手,先有面的概念,然后在学习点的知识,最后串起来;最后,任何代码都要在实践中进行检验,所以,在本部书最后一章设计了四个完整实用的程序,给读者一个豁然开朗的感觉。

【本书的组织】第1~9章主要内容如下:第1章,木马介绍-介绍了木马的历史以及当前木马的发展趋势。

第2章,Windows下黑客编程语言-如何学习黑客编程以及C/C++语言的使用入门。

第3章,Socket套接字编程基础-TCP/UDP的Socket介绍,木马基本结构介绍。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Author: Zhanzr21 @ 21ic BBS功能安全与信息安全其实是两个概念,两者都很重要但相互独立.在汽车电子设计中,两个安全都很重要,但是功能安全往往涉及到很严重的事故,所以显得更为重要.功能安全-一般使用Safety这个词信息安全-使用这个词:Security但是到了中文两者都是安全,本文只涉及到功能安全,也就是前者Safety.关于功能安全,业界一直在积极研究与推行相关标准.比如IEC,VDE.应该说功能安全的研究与发展永远不会停止,因为没有任何一种设计能够达到百分百的绝对安全标准.功能安全与EMC测试联系较为紧密,因为电磁辐射会影响其他部件或者使用者的健康,而如何防范EMC噪音也是评价功能安全的一项指标.兼容IEC,VDE的标准IEC(International Electrotechnical Commission)是一个非营利,非政府的标准制定组织.IEC制定的标准主要关注安全,性能,环保,电气能效与再生能力.IEC与ISO和ITU有着紧密联系.这些制定的标准不仅包括对硬件的规定也有软件方面的.另外这些标准一般会根据应用场景细化为若干子标准.除了老资格,国际化的IEC之外,这个领域中比较知名的,认可度较高还有德国的VDE,英国的IET,美国的IEEE.其中VDE还包括一个测试与认证机构专注于软件功能安全方面的前沿性研究.该机构属于德国的国家注册的认证机构.其主要目的在于给各家电子制品厂商提供标准符合与质量检验服务.IEC的标准中最为人熟知的是IEC 60335-1.这个标准主要覆盖家用或类似场合的电子制品的功能安全与信息安全规范.其原则:被测品应该在各种元器件失效的情况下保持安全.从此标准的角度观察,微控制器(MCU)也属于众多器件之一.如果电子器件影响到最终产品的安全性,那么在连续的两次失效后该制品依然能够保持安全.这意味着该制品必须在微控制器不工作(正在复位或者运行异常)且硬件发生失效的情况下依然能保持安全.如果安全取决于软件,那么软件被当做第二次失效来考虑.该标准规定了三种软件的安全类型:Class A: 安全根本不取决于软件Class B: 软件能够防范不安全的操作Class C: 软件主动防范特殊危险一般而言,软件设计中谈到的功能安全都是指的Class B,对于Class C,则需要额外的措施,比如双控制器冗余设计,本文暂不涉及.是否符合Class B的认定与硬件软件都相关.与微控制器相关的因素被分为两组来考虑:微控制器相关与应用相关.应用相关的部分依赖于用户的应用结构,必须由用户负责(通信,IO控制,中断,模拟输入与输出),微控制器相关的部分则纯粹与微控制器的结构相关,能够以一般的方法来进行(内核自诊断,挥发性与非挥发性存储器完整性检查,时钟系统测试等等).对于英飞凌的微控制器产品来讲,微控制器部分的测试有着强大的硬件功能支持.比如Lock-Step内核的设计能够防范极为难以追钟的主控制器失效,Aurix系列的处理器都有丰富的存储器ECC校验功能,还有看门狗,SMU等等.需要注意的是,除了IEC之外,还有数家其他机构在此领域的标准也是业内较为认可的:比如刚刚提到的德国VDE,英国IET,美国IEEE.本文为了篇幅原因,主要描述IEC的标准.其他组织的相关标准的方法与原理与之类似,但是细节可能有所差异.英飞凌的软硬件产品设计过程与此几家机构都有紧密的合作与联系.与此同时,一些国家自己制定的标准也向国际标准借鉴.比如UL 60335-1, CSA 60335-1与EN-60335-1都是基于IEC 60335-1制定的.[为甚么一些国家不直接使用国际标准而进行自定标准? 一般而言是为了设定贸易壁垒,保护本国的厂家.这些标准总体来讲跟国际标准非常类似,差别可以说几乎没有.但是认证方法,途径等等有一些本国化的特点.如果要进行本地标准的认证,最好找一些当地的专门从事该业务的机构进行合作.如果产品设计是根据国际标准来的,通过本地化的标准基本是没有问题的,只是要走个流程而已]图 MCU中被Class B规范考虑的因素为符合Class B的规范,软件上一般要考虑如下因素:CPU寄存器测试时钟监视RAM功能检测Flash校验和完整性检测看门狗自测栈溢出监视其中最后两条并非标准明文规定的,但是拥有这两条功能会提高软件的整体健壮性.这些测试的一般工程实践:测试项目工程实践CPU寄存器测试启动时检测core寄存器的读写,定期检测栈指针,一旦发生错误立即跳转至Fail Safe处理函数.程序计数器(PC)主要由看门狗来防止程序跑飞寻址与数据路径此项由RAM功能,Flash完整性测试与栈检查组成,栈底的最末端会写入一种特定的内容用于检测栈溢出,栈顶也会写入另一种特定内容用于检测栈underflow时钟两组独立的时钟源相互检验NV存储程序启动时即将整个NV空间进行CRC校验,如果有NV空间用作参数保持会在运行时被修改则也要考虑此因素,另外部分内容定期被检查.程序在烧写的时候一般会将计算好的CRC烧写在特定位置以作校验之用.RAM存储启动时即要进行遍历检查,另外关键变量使用双反向冗余方法进行保护(位相反的值被存储在非相邻的区域用作校验).为了提升用户通过Class B认证的速度,英飞凌为其微控制器提供了已经通过认证的Class B软件库供用户集成.(Aurix/Tricore与特定型号的相关库要通过厂商认证才能获取).当然需要提醒的一点是,用户即使使用已经认证的厂家软件库,整体应用是否符合认证要求依旧需要通过相应的机构进行认证.至于以下内容属于应用相关的因素:模拟:ADC/DACGPIO中断与外部通信定时器外部存储器寻址模拟器件(ADC/DAC)与用户应用场景,特定的型号的外设能力相关度较大.一般而言应该定期检查相应的管脚.一些多余的模拟引脚可用于检测额外设定的检测点.如果使用了内部参考源,则该参考源也应当定期检测.对于GPIO,Class B规定必须侦测到任何数据IO的失效.这一点可以配合其他应用部分进行检测,比如关掉一个制冷/加热开关,用模拟采样值来回来验证该开关是否失效.如果数字部分与模拟部分是相互独立供电,则此点需要额外小心两者电压上的差异.对于中断与外部通信接口,可也通过设定一个软件计数器来检验中断与通信发生的次数,在通过经验检验过的时钟源来通过该计数器的结果来判定被测试的中断与通信接口是否正常工作.对于定时器,可以通过某函数在指定的时间范围内运行的次数来验证.也可以通过不同的时钟源来交叉验证定时器.定时器与应用的耦合度属于较高的部分.对于外部存储器寻址,大多数英飞凌的微控器型号不涉及到这点.涉及到的型号请参考RAM/Flash检测的方法.以下是一种内存分配方法举例,关键变量以互补的形式在不同的RAM区间被保留了两份以互相校验.另外堆栈也做了特殊处理已检测Stack Overflow与under Flow的情况.一种检测程序执行流程的方法对于程序执行的各个阶段都分配一个不同的数字进行编码.这些变量以双互补形式进行冗余存储.当一个程序的阶段被执行,进行一种四步对称检测.前两步检测该程序阶段被正确调用(在调用该程序段与返回的地方执行).后两步检测该程序是否被正确执行(该程序段的入口与出口).这种检测方法对CPU负载影响不大,因为每次检测只需操作互补变量对的其中一个.因为调用/返回与入口/出口总是配对出现的,故此互补变量对的互补关系总是被保持.之后安排数个检测点对非预料性结果进行检测,一旦发生非预料结果及跳入FailSafe模式.此例子中该程序阶段的关键数字是5,而该被执行的程序段为7.集成之后的程序流程示例:其中开机自检一般安排在c_startup之前,因为c startup就假定所有的部件运行正常.两个独立时钟互相校验:一般是用高低速时钟分别做定时中断,高速时钟中断增加计数器,低速时钟ISR中校验高速时钟计数器是否为预料误差之中.提高EMC性能的软件技巧要提高EMC性能,软件硬化是很关键的一个步骤.在软件设计阶段就考虑防范EMC干扰是非常重要的,也是成本最低的做法.一般而言要考虑的EMC干扰源:微控制器不响应输入程序跑飞执行未预料的指令野指针子程序执行错误寄生复位/中断单元配置错乱I/O状态被错误配置可能的后果:产品产生非预料的响应丢失上下文状态分支错误中断丢失数据完整性丢失读入错误的输入状态本文介绍两种措施:1.预防性措施,可以在现有设计上添加这些措施以增强软件的健壮性2.自动恢复措施,当检测到错误状态,进行记录(如有需要可以进行错误提示),Fail-Safe操作,之后进行尝试自动恢复到已知状态,理想状况是最终的用户感觉不到这个过程预防性措施:使用看门狗或者类似的定时方法看门狗的原理很简单,一旦开启了,那么防止其复位微控制器的惟一方法就是在其复位操作之前进行喂狗操作.但是开启看门狗与喂狗操作的位置必须正确设计,否则看门狗起不到预防错误的目的.下图是两种常见的错误看门狗使用方法:图看门狗使能过晚,导致在初始化阶段程序就跑飞了图程序跑飞了,但是看门狗在中断中喂,结果是看门狗不能正确复位针对以上两种经典错误,以下两点需注意:1.看门狗越早使能越好,某些处理器如Aurix系列在复位之后看门狗就是自动开启的为理想状态2.不要在中断或者未被超时机制保护的程序点进行喂狗操作两次喂狗之间的间隔需要精心计算,中断也需要被考虑进去.看门狗能起到的最小的作用就是能复位整个程序,这也意味着程序执行的上下文与数据完整性发生丢失.所以在程序启动的时候,需要借助一些状态位来判断复位源.正确的看门狗使用示意:预防性措施: 对未用的程序空间进行处理基本上所有的应用中,微控制器的代码空间是没有使用完全的.不管它的话,那么它的内容为杂乱的数据(新MCU第一次烧写程序的话,这些未使用的代码空间为0xff,但MCU产品大多会进行出厂测试,所以0xff也是不能保证的).保险的做法就是将这些未使用的空间填充为跳转至某已知地址的指令,这样保证程序即使跑飞了也能跳回到已知的位置.对于Aurix处理器,可以填充为未知指令触发trap,或者直接填充非法指令以引发trap,还有MPU也可以应用起来触发trap.预防性措施:冗余输入读取状态的时候,多读取几次,尤其是外部信号,多读取几次以确认不是电磁干扰引起的错误触发.这个就是最便宜的输入滤波器的效果!预防性措施:处理未使用的中断向量对于tricore内核的处理器,中断向量表是由软件实现的.那么尽量不要使用多余的向量表项目.但是对于已经使用的向量与最大可能的向量之间也可以做类似处理.一般的做法就是设定一个默认的ISR.比如:Default_Handler PROCEXPORT WWDG_IRQHandler [WEAK]EXPORT PVD_VDDIO2_IRQHandler [WEAK]EXPORT RTC_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK] EXPORT RCC_CRS_IRQHandler [WEAK] EXPORT EXTI0_1_IRQHandler [WEAK] EXPORT EXTI2_3_IRQHandler [WEAK] EXPORT EXTI4_15_IRQHandler [WEAK] EXPORT TSC_IRQHandler [WEAK] EXPORT DMA1_Channel1_IRQHandler [WEAK] EXPORT DMA1_Channel2_3_IRQHandler [WEAK] EXPORT DMA1_Channel4_5_6_7_IRQHandler [WEAK] EXPORT ADC1_COMP_IRQHandler [WEAK] EXPORT TIM1_BRK_UP_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_CC_IRQHandler [WEAK] EXPORT TIM2_IRQHandler [WEAK] EXPORT TIM3_IRQHandler [WEAK] EXPORT TIM6_DAC_IRQHandler [WEAK] EXPORT TIM7_IRQHandler [WEAK] EXPORT TIM14_IRQHandler [WEAK] EXPORT TIM15_IRQHandler [WEAK] EXPORT TIM16_IRQHandler [WEAK] EXPORT TIM17_IRQHandler [WEAK] EXPORT I2C1_IRQHandler [WEAK] EXPORT I2C2_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK] EXPORT USART1_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK] EXPORT USART3_4_IRQHandler [WEAK] EXPORT CEC_CAN_IRQHandler [WEAK] EXPORT USB_IRQHandler [WEAK]WWDG_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_UP_TRG_COM_IRQHandlerTIM1_CC_IRQHandlerTIM2_IRQHandlerTIM3_IRQHandlerTIM6_DAC_IRQHandlerTIM7_IRQHandlerTIM14_IRQHandlerTIM15_IRQHandlerTIM16_IRQHandlerTIM17_IRQHandlerI2C1_IRQHandlerI2C2_IRQHandlerSPI1_IRQHandlerSPI2_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandlerUSART3_4_IRQHandlerCEC_CAN_IRQHandlerUSB_IRQHandlerB .ENDP预防性措施:移除关键的指令与非法的指令关键指令关键指令就是状态切换,比如正常模式进入低功耗模式的代码.可以通过观察.list文件来找到其位置.一般而言程序跑飞了之后,很有可能会读取到这段指令,可以在其前后加一些NOP指令让这个位置发生位移以降低读取到这段指令的概率.非法指令非法指令就是内核不认识的指令,对于Tricore或者大多数其他内核来讲执行这样的指令会发生Trap.处理方式如上.预防性措施:对AD采样值进行处理一般而言就是多采样几次取平均,也可以参照电视节目海选评分的做法去除最高分去除最低分再平均以防止读入受到干扰的值.预防性措施:配置定期检查与重新配置一般而言发生配置丢失,错乱的事故多发地在于时钟与IO的配置,因为这些地方的配置离外部电路的物理位置最近,最易受干扰.对这些配置采取定期检查并且重新配置可以有效提高EMC性能.与CPU相互独立,较少受CPU影响如果有低功耗模式,则看门狗要格外留意实施简单但要精心放置看门狗初始化与喂狗操作快速从跑飞状态跳出丢失了执行的上下文注意读取复位源快速从跑飞状态跳出无注意精心设计相应的Trap以使恢复更加彻底提升了采样的精度与抗干扰性要多采样几次且需要多余的运算注意选取有效值的技巧有效防范误执行相应的指令对真正要使用此指令的情况有干扰观察.list文件提升了读取的稳定性要多读取几次还要判断哪种是错误的需要软件决策时间注意选择决策的判据防止向量错误执行无看上文的参考代码防止重要配置丢失需要软件工夫只需保护易于丢失的时钟与IO配置,其他配置可以无需此种考虑表技巧优缺点一览表预防性措施:冗余数据存储与交换只要是存储在片内的数据,那么一定会受到EMC的影响.常见的保护方法包括双冗余互补存储,ECC校验.值的一题的是某些产品硬件上就支持某些冗余与校验,比如Aurix产品的存储器都有ECC校验的硬件特性,可以利用起来.以上是预防性措施,下面介绍自恢复技巧.在工程实践中,非预料性复位,PC跑飞与寄生中断是三种最为常见的EMC造成的结果.以下的技巧也针对此几种结果而试图自恢复.值的注意的是,这几种情况中,RAM内容,Flash/EEPROM的内容一般而言都是完整的(断电了就另当别论),所以自恢复要将这特点给利用起来.自恢复技巧: RAM中保持程序运行的上下文状态下图是一个在RAM中保持当前执行状态的例子,要点是每次输出状态改了就在RAM中保持其状态,如果有PWM输出之类的配置,也加以保持,这样在发生看门狗或者其他的复位之后,程序可以读取复位源+当前的执行状态自动恢复到跑飞之前的状态.自恢复技巧:把看门狗用精确一点大多数程序员使用看门狗的习惯就是:能喂狗的时候,喂到最饱,在喂狗点将看门狗的值恢复到最大可允许的数字以最大限度减少遗漏喂狗的风险.这样做显然不是正确的喂狗方法.正确的做法是精确掐好看门狗的计数器的值,某个函数运行时间过长的话,果断采取相应措施以自恢复.自恢复技巧:使用复位标志来确定复位源复位有很多种,上电复位,看门狗复位,电压监测复位,复位引脚复位等等.精确判断是哪一种复位,之后采取正确的相应措施能够恢复某些EMC引起的干扰.自恢复技巧:将程序执行的上下文保存到NV存储器这是一步更绝的技巧,因为编程NV存储器的时间比RAM写入要花的长得长的时间.以Aurix 产品为例,时间大概在数十ms左右.而在这期间很可能又发生了EMC干扰导致复位.所以要使用此技巧需要考虑多种因素,包括在多个存储区间进行冗余保持,添加特殊的标记/CRC等等.而且这种技巧只适合于保持变化并非很频繁的上下文.频繁发生变化的上下文还是RAM 保持为妙.另外现在新工艺日新月异发展,有很多新的工艺的存储器,比如铁电存储器有NV 存储器读写都较快,还有自带电池的RAM都是设计者值得考虑的选项.后记英飞凌的半导体产品从硬件上来讲,经过了严格的验证与测试,且通过了多项业界认可的标准,比如AEC-Q100等等.但是这并非意味着软件预防与恢复技巧是杞人忧天,庸人自扰.任何汽车电子的设计工程师应该很严肃地对待产品的安全性.预防性措施可以提高软件的健壮性,自恢复技巧能够在受到严重干扰的情况下进行自救.考虑了这些情况的产品将与未考虑这些情况的产品拥有非常显著的差别.。

相关文档
最新文档