1、中华人民共和国国家标准用于工业过程控制实时发布实施中华人民共和国电子工业部发布中华人民共和国国家标准用于工业过程控制实时中华人民共和国电子工业部批准实施本标准等效采用国际标准用于工业过程控制工业实时主题内容与适用范围本标准描述了一种任务模型和一组有关的子例行程序使得能控制以作为程序设计语言的多任务系统本标准规定了用于工业计算机控制系统的外部过程引用这些外部过程引用提供了对时间和日期信息的存取提供了程序与执行系统以及与过程输入和输出功能的接口允许位串处理提供了文卷处理的方法这些过程适用于按程序设计语言编写的程序在实时执行系统控制下的单个程序的环境中和多程序环境中这些程序都应该是可执行的对诸如零作
2、除数或引用了那样的例外和错误的处理是执行系统的职责以使这样的错误不会产生严重的影响例如产生不希望的或不受控制的异常终止或影响其他任务本标准适用于要求多任务特性的所有系统注在本标准中除了明显地指出与处理器相关的特性之外本标准中的其他内容在实现时不应被扩充或改变引用标准程序设计语言数据处理词汇部分操作技术和设备定义下面的定义适用于本标准注定义中以黑体字印刷的术语在本章中有定义然而在每个定义中仅当这种术语首次出现时才以黑体字印刷存取方式遵照对存取许可的请求处理器所授予的存取读或写文卷的权力或许可主时钟计数系统实时时钟基本单位的计数它适用于用户程序计算对一组数据执行的一组操作它适用于用户程序采用说明因
3、本标准增加了引用标准一章为使本标准与主要技术内容相对应故将的引言和第章合并为本标准的第章临界区对共享数据进行操作的一部分顺次操作因此在执行期间这部分程序必须具有对共享数据的互斥存取潜在的一种确定任务状态执行系统知道潜在任务但它不是未决状态运行状态或挂起状态中的任一种事件有意义的单个事情或事故它被用来以预计的方法影响某个任务的执行事件自身瞬时发生并设置事件标记事件标记执行系统的内部变量用来表示事件已经发生如果用户的系统包含并行任务那么对于这些任务来说事件标记是共享的数据元素执行计算机处理器以顺序方式执行指令时所完成的动作之集合可执行程序一种程序其中包含的所有函数和子例行程序都为适于执行的形式执行
4、例行程序执行系统处理器的一部分它支持在本标准中叙述的程序过程文卷作为一个部件来处理的相关记录的集合对于本标准来说认为记录是固定长度的记录存储和存取都与记录的内部格式无关初启为了在第一个执行语句处开始执行任务执行系统所做的动作多重处理一种操作方式它由多处理机中的两个或多个处理器提供并行处理多道程序设计一种操作方式它由单处理机提供两个或多个计算机程序的交叉执行多任务一种多重操作它提供两个或多个任务的并发性能或交叉执行不存在的一种确定的形式的任务状态执行系统不知道不存在的任务目标任务指定的任务被引用的任务要求或预计要启动暂停停止的任务换言之由于系统子例行程序调用而受影响的任务操作用于从另一个有限数据
5、集合产生一个有限数据集合的确定规则重叠运行由于以前的初启任务仍在运行的同时初启任务的条件成为真时发生的情况并行任务并发任务其操作可以按时间重叠的一组任务未决的一种确定的任务状态未决的任务已经与事件或时间条件相联系因此当条件发生时任务将被转换成运行状态然后被初启处理器数据处理系统和一种机制的组合通过此机制把程序变换得能用于该数据处理系统与处理器相关表示在本标准中未指定的处理器动作重复执行不管是按固定的间隔还是由于重复的事件重复地初启任务时发生的情况资源标记执行系统的内部变量用于指示为某一任务专门保留的资源运行的一种确定的任务状态运行的任务在它的虚拟处理器中执行信号量执行系统的变量用于在交互作用的
6、并行任务之间交换同步信息在本标准中所有信号量操作都隐含有由执行系统提供的临界区保护顺次操作一种操作次序其结果是好象这些操作严格地一个接一个地执行挂起的一种确定的任务状态挂起的任务已临时暂停它的虚拟处理器的执行并且等待指定的条件以便继续它的虚拟处理器的执行任务能调度的计算此计算的操作都按严格的顺次操作来执行见条和条时间绝对时间完整的时间和日期说明相对时间时间增量或差虚拟处理器从任务被初启直至结束任务所能运行的环境不考虑资源的可用性这些资源由处理器管理不由用户程序管理可用一种特定的实现方法把一组虚拟处理器映射到一组实际处理器这种映射是与处理器相关的第一篇多道程序设计和实时特性绪言本篇叙述用户程序可
7、使用的几个过程引用并涉及多道程序设计特别是实时操作对于在本篇中给出的所有调用其操作通常被认为是不可分的即这些操作好象没有被中断一样日期和时间信息对于在实时环境中的程序设计用户必须存取执行系统的时间变量通过下面要介绍的系统调用可获得这些时间变量明确的时间说明需要唯一的时间标志包括完整的日期和世界公认的日历以及定义时间零执行对子例行程序的引用能提供全部信息日期参照格林威治日历这些调用是用于获得当前日期和时间用于获得主时钟计数获得日期和时间调用形式为其中为整型数组数组中的前个元素将放置绝对时间它由执行此调用时执行系统的实时时钟时间来表示这些元素如下第个元素主时钟计数第个元素毫秒至第个元素秒至第个元素
8、分至第个元素小时至第个元素日至第个元素月至第个元素年获得时钟计数执行对本子例行程序的引用使用户程序能获得系统实时时钟的当前值它以主时钟计数来表示调用形式为其中为整型变量或整型数组元素其中存放以正整数表示的时钟当前值被计数到由给定的最大值然后置为零且再次计数为每秒的主时钟计数数值它是由系统送回的整型值此自变量应是整型变量或整型数组元素为能达到的最大值它是由系统送回的整型值此自变量应是整型变量或整型数组元素自变量给出了的模数大小模数实际上这通常等于实现时钟的硬件计数器的模数任务分配的一般情况状态和转换在任何时刻任务处于一种且仅处于一种状态中由执行系统执行的动作其他任务或指定的任务本身都可以使得任务
9、从一种状态转换到另一状态这些转换都是瞬时完成的即理论上认为它们不占时间可以用状态图来形象地表示任务的数学模型在下面的状态图中状态是节点以圆来表示而转换被画成从一个节点至另一个节点的箭头多任务系统由几个并行任务组成并能用一些不相交但类似的图来建立模型应用三维图形是可行的由于把类似的图定向地夹在彼此的顶部因此各个图的同一状态彼此覆盖一般由子例行程序调用事件发生或时限期满引起状态转换子例行程序调用的名字形式和解释是标准化的如下所述在本标准中通过数学模型来叙述任务此模型用图中的状态图来解释此模型遵循下列基本原则转换是明确的即在给定状态中给定激励的情况下任务仅能转换至一种可能的新状态转换是即刻完成的即用
10、的时间为零在某一时刻任务仅处于一种状态中从应用程序员来看状态模型描述了任务的工作情况图状态模型和转换图在状态图中下列符号用于转换方框中的英文字母由另一任务施加于任务的作用即在一个任务中的子例行程序调用会对指定的任务施加方框中指明的作用不在方框中的英文字母当任务处于运行状态时对其自身施加的作用不在圆圈中的汉字表示某种条件在此条件下执行系统实现指定的状态转换以上述的原则为基准不企图描述对应用程序员来说是透明的执行系统动作因此运行状态与任务的虚拟处理器见条有关不管是把物理处理器分配给任务还是由于可用的物理处理器有限并且任务的优先权较低使得执行系统临时阻止任务执行对于任务的状态都是非本质的所以这个模型
11、不仅能适合于单处理机的计算机同样也适用于多处理机多活动调用显然不同的几个任务可能对同一目标任务发出相矛盾的转换调用在正常操作期间以及在错误条件下都可以出现这种情况这是由于在另一任务做转换调用时目标任务的状态是未知的根据在一个时刻任务仅处于一种状态的原则见条在状态转换和作这种转换的调用之间存在差别转换调用由执行系统接按然后它应用自己的调度策略来处理这些调用根据可用的资源例如执行系统的内部表格空间等将接受或拒绝转换调用在引用以后回送一个自变量其中设置适当的值它表示引用已被正常地接受或被拒绝同步概念本标准提供了三个概念它们用于任务间的同步以及用于解决资源争用事件标记资源标记信号量事件标记和信号量主要
12、用于同步目的而资源标记主要用于解决资源争用事件标记资源标记和信号量都是执行系统的局部变量除了通过本标准中叙述的机制之外不可存取这些变量事件标记在并发任务管理中必须把某些任务与某些事件联系在一起这些事件既可是外部的又可是内部的事件外部事件是某些物理现象例如触点闭合但外部事件与它的事件标记之间的连接超出了本标准的范围内部事件是由特定的程序动作产生的见条关于的介绍通过引用其范围在之间的数值选择器来选择事件标记其中是与处理器相关的事件标记有两种状态通过子例行程序调用见条见条见条和见条来实现事件与任务的联系当发生内部或外部事件时事件标记转变成如果一个或多个任务与这个事件相联系那么执行系统将使得每个相联系
13、的任务开始或继续执行事件标记由直接的程序控制转变成或者在执行系统服务于与事件标记相联系的任务时由执行系统转变成仅能通过在本标准中定义的程序过程引用或服务于事件的执行系统改变事件标记还可以通过特定的程序动作见条把事件标记设置为状态事件标记可以被屏蔽和除去屏蔽见条和条此外可以通过逻辑函数见条来测试事件标记的值资源标记资源标记概念为我们提供了解决资源争用的简单方法在一个时刻允许一个任务且仅一个任务使用资源通过引用其范围在之间的数值选择器来选择资源标记其中是与处理器相关的资源标记有两种状态锁定的未锁定的本标准不定义能把什么认为是资源把资源与资源标记相联系是用户的责任如果用户要求把资源专门留给正在运行的
14、任务使用那么应选择该资源的资源标记并且执行引用见条假设这时资源标记是未锁定状态为了使相应的资源专门留给这个任务使用资源标记将改变为锁定状态以后由任务通过执行对见条或见条的引用来释放这种保留假设任务企图通过对子例行程序的引用来锁定已经被锁定的资源标记那么执行系统将把这个任务转变成挂起状态此任务一直处于这个状态直至某个其他任务解锁此资源标记为止如果几个任务都在等待资源标记的解锁那么执行系统仅选择其中一个任务来执行详细情况见条这是与事件标记概念的主要差别如果事件标记被设置为那么等待事件标记的所有任务都被转变成运行状态通过对逻辑函数的引用见条也能把资源标记设置为锁定状态信号量信号量给出了另一种同步概念
15、在希望使用比资源标记和事件标记更高级机制的地方是很有用的通过引用其范围在之间的数值选择器来选择信号量其中是与处理器相关的与事件标记和资源标记不同信号量具有整型值信号量的值必须被初始化以后可以通过引用见条来设置如果任务需要等待直至信号量的值大于或等于某个特定值那么任务应使用引用见条通过执行执行系统测试指定的减量是否大于在此情况下调用任务被转变成挂起状态任务一直处于此状态直至由另一任务把信号量值增加至大于或等于为止如果不大于那么值减少然后调用任务继续执行通过执行见条执行系统是指定的信号量值增加如果变得大于或等于挂起任务的那么这种增加可以使等待此信号量的任务从挂起状态转换为运行状态如果多个任务等待这
16、个信号量并且它们都是运行的候选者那么在增加以后这些任务转换成运行状态的次序是与处理器相关的通过把设置为一定值并且选择不同的值可能实现各种高级同步概念和各种解决资源争用的方法除了上述调用以外还可以使用整型函数见条来读信号量的值过程引用过程引用的术语和概要本章包含了在以后各章中叙述的子例行程序调用和函数引用的概要下列各参数名称适用于以后一些调用如果这些参数名称的严格意义偏离下面的叙述那么在调用的详细介绍中将专门标明如果其意义完全与下列定义相同那么将在调用的介绍中省略参数介绍且指明参见此条款为受影响的任务目标任务该自变量应是整型数组为整型数组它的前个元素包含了绝对时间和相对时间说明不允许这些元素取负
17、值这些元素的含义如下第个元素主时钟计数第个元素毫秒第个元素秒第个元素分第个元素时第个元素日第个元素月第个元素年对于绝对时间如果在三个日期元素之一中用值零那么执行系统将把它解释为当前日当前月或当前年对于包含了非零的月或年的相对时间说明的解释是与处理器相关的为返回调用程序时置值的参数它表示对请求的处置各种值的含义如下或小于未定义请求被接受或大于请求被拒绝错误条件本自变量应是整型电量或整型数组元素处理器可以定义大于或等于的特定值以便区分各种拒绝原因表为函数和子例行程序调用的清单以后的条款中将作详细介绍表函数和子例行程序调用清单所在条款调用参数被建立的任务和相关程序的标识与相反通用的调度方式选择器事件
18、标记引用第次初启的绝对或相对时间循环初启的时间周期重叠运行事件标记引用立即启动延迟时间后启动在初启前延迟的时间按绝对时间启动初启的绝对时间立即执行第次初启然后循环时间间隔长度延迟时间后第次初启然后循环第次初启以前延迟的时间时间间隔长度按绝对时间作第次初启然后循环第次初启的绝对时间时间间隔长度建立事件连接事件标记引用取消调度方式选择器事件标记引用取消事件连接事件标记引用取消时间调度按时间周期继续挂起调用任务或挂起直至发生事件方式选择器延迟结束的事件标记引用时间延迟结束延迟的原因指示符挂起直至事件发生延迟结束的事件标记引用挂起任务直至事件发生时间延迟设置事件标记事件标记引用清除事件标记事件标记引用
19、测试事件标记的状态事件标记引用函数值事件标记的状态设置事件标记的屏蔽事件标记引用清除事件标记的屏蔽事件标记引用锁定资源标记资源标记引用续表所在条款调用参数解锁资源标记资源标记引用测试并锁定资源标记资源标记引用函数值资源标记的状态信号量的初始化信号量引用信号量的初值等待信号量信号量引用减量释放信号量信号量引用增量读信号量值信号量引用函数值信号量变量值终止执行建立新任务通过引用子例行程序把新任务引入实质系统指定的任务将与该任务执行所必须的某个特定程序相联系如其他资源那样此程序被认为是一种资源通常认为相联系的程序以可执行的形式存在从形式上看依据状态模型此引用的作用是把任务从不存在状态转变为潜在状态见
20、图和条假设在本标准的范围以外存在一个机制它至少建立并初启第一个任务即父任务这个任务依次又可以建立其他任务调用形式为其中为整型数组它包含了指定任务和与它相联系的程序所必须的所有信息后者包括与其他项一起程序的名称能找到程序的地方例如文卷描述存在时的驻留处主存驻留或可交换的等等此数组还可以包含任务的处理器优先权通常此数组还将包含输出信息即把这个任务与由同一程序代码建立的其他任务区别开的引用对各数据集的引用等第章中的其他过程引用也可以使用这些信息关于参数的介绍见条此数组的所有细目都是与处理器相关的与条中介绍相同从实时系统中取消任务对子例行程序的引用将通过把任务转换为不存在状态从实时系统中取消指定任务如
21、果指定的任务处于潜在状态或未决状态那么立即做此操作如果指定的任务处于运行或挂起状态那么仅在将来执行时才能终止任务因此指定的任务将继续当前的执行而不受此调用的干预调用形式为其中如条所述调度任务执行对子例行程序或在条中列出的子例行程序的引用将调度对指定的任务的初启建立条件以便接着把它转变为运行状态如果当执行调用时指定的任务处于潜在状态那么该任务将转变为未决状态如果它已经处于未决状态那么根据调用的自变量引用将会增加它的条件以便接着把它转换成运行状态于是当任何一个仍有效的条件为真时指定的任务将转变为运行状态为转换成运行状态要求任务正处于未决状态否则会出现重叠运行条件增加运行条件应服从处理器任何资源限制
22、并且任何违反这种限制都造成错误返回当任务转变为运行状态时将从组合条件的可能集合体中除去产生这种转变的条件而仍然保留其他条件以后当运行的任务退出时把任务从运行状态转变为潜在状态从以前的调度调用中遗留的可能存在的调度条件会引起任务立即转变为未决状态注意术语重叠运行的定义和它的表示规定如下所述每次正常接受对子例行程序的引用都会产生下列作用在指定延迟时间期满以后或到达所希望的绝对时间或者发生了指定的事件目标任务转换成运行状态并且在程序的第个可执行语句处开始执行在特定的工业计算机系统中可得到的实际时间分辨力受到系统的实时时钟分辨力的支配如果通过发生事件来初启目标任务那么执行系统将把事件标记设置为作为初启
23、的一部分如果多于一个任务正等待指定的事件标记改变为状态那么当发生这种改变时所有这些任务都将转变为运行状态本过程引用的形式为其中如条中所述为整型表达式它指定下面的三种任务调度变量的值在和之间则使任务初启一次自变量的值在和之间则使得任务按时周期地初启自变量的值在和之间则使得每当指定的事件标记成为时都初启任务为调度的事件标记它是整型表达式为整型数组它包含要调度的绝对或相对时间术语调度的相对时间是指从执行引用的时间直至预期的运行之间的时间延迟见条为整型数组它表示循环运行的时间周期见条为重叠运行事件标记如果发生重叠运行那么它转变为目标任务执行的动作是与处理器相关的自变量的值在和之间则定义了第次且仅一次执
24、行任务如果立即启动如果在绝对时间时启动如果延迟后启动如果发生事件时启动一次如果在绝对时间或发生事件时启动一次如果延迟后或发生事件时启动一次自变量的值在和之间则定义了任务的第次执行和以后按时间周期重复执行如果立即启动且按循环如果在时启动且按循环如果延迟以后启动且按循环如果发生事件时启动且按循环如果在时或发生事件时启动且按循环如果延迟以后或发生事件时启动且按循环自变量的值在和之间则定义了任务的第次执行且以后每当由指定的事件标记成为时重复执行任务如果立即启动且按重复执行如果在时启动且按重复执行如果延迟以后启动且按重复执行如果发生事件时启动且按重复执行如果在时或发生事件时启动且按重复执行如果延迟在以后
25、或发生事件时启动且按重复执行通过简单调用来启动任务下列调用用于调度它是功能的子集只是它们更易于程序设计立即启动延迟后启动在时启动立即启动且按循环延迟后启动且按循环在时启动且按循环发生事件时启动且按重复立即启动任务执行对子例行程序的引用将会建立使指定任务通过未决状态立即转换成运行状态的条件任务将从第个可执行语句开始执行如果在执行引用时指定的任务处于潜在状态那么任务将转变为未决状态并立即继续转变为运行状态调用形式为其中如条所述延迟指定时间后启动任务执行对子例行程序的引用将会建立以时间延迟作为指定任务通过未决状态转变为运行状态的条件在执行引用后指定的时间延迟期满时预期把指定的任务转换成运行状态若此时
26、该任务处于未决状态则进行状态转换如果执行引用时任务处于潜在状态那么任务将转变为未决状态在运行状态中任务将从第个可执行语句开始执行调用形式为其中如条所述为整型数组它表示开始执行目标任务的时间延迟在指定的绝对时间启动任务执行对子例行程序引用将会建立以绝对时间作为使指定的任务经过未决状态转换成运行状态的条件到达指定的绝对时间时目标任务应被转换成运行状态如果这时任务处于未决状态那么将做这种状态转换如果在执行引用时该任务处于潜在状态那么它将转变为未决状态处于运行状态时任务将从它的第个可执行语句开始执行如果当执行对的引用时已经超过了指定的绝对时间那么立即启动任务调用形式为其中如条所述为整型数组它指定绝对时
27、间目标任务将在此时间开始执行启动重复执行的任务调用和用于重复执行它们具有下面公共特性如果任务的目前状态是潜在状态或当任务成为潜在状态时指定的任务将被转换成未决状态接着此引用为指定的任务以后从未决状态转变为运行状态建立条件以便第次执行和将来产生重复执行对子例行程序或的引用与对单次执行的引用具有同样的直接效果此外在它结束以后例如通过执行目标任务将立即从潜在状态转换成未决状态以便下一次重复执行如图中由重复指出的那样当任务处于运行状态时实际运行可能被无意识地延迟这是由于其他程序在运行对于周期地重复的任务这些延迟将不会被积累如果在下一次执行的时间以前没有执行完那么会出现重叠运行情况并且被重复的任务要做的
28、动作是与处理器相关的指定条件下的再调度将继续下去直至通过调用子例行程序见或见主动地结束上面的叙述对于具有参数和同样合法然而在重叠运行的情况下的特殊参数被设置为立即初始启动调用形式为其中如条所述为整型数组它指定时间间隔的名义长度见条在指定时间延迟以后初始启动调用形式为其中如条所述为整型数组它指定初始激励的时间延迟延迟是从执行调用时起测量的见条为整型数组它指定时间间隔的名义长度见条在指定的绝对时间初始启动调用形式为其中如条所述为整型数组它表示绝对时间认为指定的任务在此时开始进入运行状态这个自变量严格地等价于调用子例行程序的参数见条为整型数组它指定时间间隔的名义长度见条任务与事件的连接执行对子例行程
29、序的引用将会建立以指定的事件作为从未决状态转变为运行状态的条件如果在执行引用时处于潜在状态或在成为潜在状态时那么首先把任务转变为未决状态然后如果相联系的事件标记是或成为那么指定的任务将从未决状态转变成运行状态并且从它的第个可执行语句开始执行事件和指定任务之间的联系仍然保持直至通过引用或见条和条主动取消为止调用形式为其中如条所述为事件标记它是整型表达式取消以前的调度执行对子例行程序或它的派生子例行程序和的引用将会取消对目标任务指定的调度条件这样它取消了来自以前调用子例行程序或它的简化派生子例行程序的进一步作用如果目标任务处于运行状态或挂起状态那么这种取消仅会影响将来的执行因此目标任务将会在不受这
30、种调用干预的情况下结束它的现行执行如果目标任务处于未决状态且没有遗留调度条件那么取消调用将会把任务转变为潜在状态调用形式为其中如条所述为整型表达式可选择下列条件之一如果取消所有以时间为基础的调度以及由自变量指定的事件调度如果取消所有以时间为基础的调度其中包括按时间重复但不改变可能存在的事件连接如果取消以事件为基础的调度其中包括由自变量指定的以事件为基础的重复但不改变可能存在的时间连接为整型表达式它指定了要取消连接的事件标记如下所示如果表示指定任务的所有事件标记连接如果没有取消事件如果引用由值指定的一个特定事件标记取消事件连接执行对子例行程序的引用将会取消在目标任务和指定事件之间的任何连接因此它
31、取消了来自先前对子例行程序或的调用的进一步作用如果目标任务处于运行状态或挂起状态那么这种取消调用仅会影响将来的执行因此目标任务将在不受此调用的任何干预下结束它的现行执行如果目标任务处于未决状态且若没有遗留调度条件那么这种取消调用将使任务转变为潜在状态调用形式为其中如条所述为事件标记整型表达式见条取消时间连接执行对子例行程序的引用将会取消由于先前调用子例行程序或它的简化子例行程序而进行时间调度所引起目标任务的进一步初启执行系统应确保不再由于先前的循环调度而把任务转变为未决状态如果目标任务处于任何活动状态运行或挂起状态那么这种取消应仅影响将来的执行因此目标任务将在不受此调用干预下结束它的现行执行如
32、果目标任务处于未决状态且没有遗留调度条件那么这种取消将使任务转变为潜在状态调用形式为其中如所述任务的连续延迟执行对子例行程序的引用将提供把运行任务挂起指定时间长度或直至发生指定事件为止的手段即转变为挂起状态以后任务会转变回运行状态并在紧接调用子例行程序的下一语句恢复执行如果多于一个任务被挂起并等待指定的事件标记改变为状态当发生改变时所有任务都将转变为运行状态从执行调用时起至任务转变为运行状态在它的虚拟处理器中恢复程序执行为止所用的名义持续时间被定义为时间延迟进入和离开运行状态和挂起状态的实际时刻决定于系统实时时钟的分辨力和由执行系统所做的询问和激励动作调用形式为其中为整型表达式用于选择挂起结束
33、条件如下所示如果在绝对时间如果延迟时间以后如果发生事件如果在绝对时间或发生事件如果延迟时间以后或发生事件为结束挂起的事件标记它是整型表达式为整型数组指定挂起的绝对或相对时间见条为回送的参数它表示在或情况下结束延迟的原因如果由事件结束延迟如果由时间结束延迟如条所述挂起任务直至事件发生或到达延迟时间下述挂起调用是性能的子集仅为了容易编程才建立它们挂起任务直至事件发生挂起任务直至到达由指定的时间延迟延迟直至事件发生执行对子例行程序的引用将挂起调用任务直至发生指定的事件然后任务会转变至运行状态并且在紧接调用子例行程序的下一语句恢复执行调用形式为其中为结束挂起的事件标记它是整型表达式如条所述延迟指定的相
34、对时间执行对子例行程序的引用将会使把调用任务转变为挂起状态直到指定的持续时间然后任务将返回运行状态并在紧接调用子例行程序的下一语句恢复执行调用形式为其中为整型数组它表示要挂起的相对时间如条所述事件标记操作设置事件标记为状态执行对子例行程序的引用将会把指定的事件标记设置为状态如果事件标记已经是那么不起作用由于在某一任务中早些时候的转变调用状态可以使得任务从未决状态或挂起状态转变为运行状态调用形式为其中为事件标记它是整型表达式如条所述清除事件标记执行对子例行程序的引用将会使指定的事件标记成为如果事件标记已经是那么不起作用调用形式为其中为事件标记它是整型表达式如条所述测试事件标记状态执行对函数的引用
35、将会回送一逻辑值如果指定的事件标记是则有值如果指定的事件标记是则有值如果处理器不知道此事件标记那么回送逻辑值且错误参数将指出错误状态函数引用形式为其中为事件标记它是整型表达式如条所述屏蔽事件标记执行对子例行程序的引用不改变指定的事件标记状态但它被屏蔽了屏蔽作用是指事件标记可以随便改变它的状态但它不影响正等待这个事件被置位而处于未决或挂起状态的任务调用形式为其中为与要被屏蔽的事件相应的事件标记它是整型表达式如条所述除去事件标记的屏蔽执行对子例行程序的引用将允许执行与指定事件标记相联系的动作如果事件标记对于状态那么将执行与指定事件标记相联系的所有动作调用形式为其中为与要除去屏蔽的事件相应的事件标记
36、它是整型表达式如条所述资源标记操作设置资源标记为锁定状态执行对子例行程序的引用将使指定的资源标记被锁定如果指定的资源标记已被锁定那么执行系统将会挂起任务的执行调用形式为其中为资源标记它是整型表达式如条所述设置资源标记为未锁定状态执行对子例行程序的引用将产生下述的一种动作如果资源标记为未锁定状态那么不做动作如果资源标记是锁定状态并且不存在由于以前企图锁定相关资源而挂起的任务那么资源标记将为未锁定如果资源标记是锁定状态并且存在一个或多个由于以前企图锁定相关资源而挂起的任务那么有一个且仅有一个任务转变为运行状态相关的事件标记仍为锁定状态用于选择任务转变为运行状态的原则是与处理器相关的调用形式为其中为
37、资源标记它是整型表达式如条所述测试并设置资源标记为锁定状态执行函数将会首先测试指定的资源标记如果资源标记为未锁定那么函数回送值如果资源标记为锁定那么函数回送值在测试以后资源标记将被锁定函数引用形式为其中为资源标记它是整型表达式如条所述与相比较使用的理由是既允许在资源未锁定时任务占用资源又允许在资源已锁定时继续执行任务使用时不能实现上述功能信号量操作所有信号量变量都具有执行系统的局部变量形式并且唯一的存取方法是通过一个被称为特定信号量的自变量在下面表示特定信号量自变量的值子例行程序和的作用分别是给信号量的值增加和减少一个量为正整数它是这些调用的第个参数对于当结果不小于零时才进行减否则在进行减以前
38、挂起调用任务并且直至以后才继续执行即与继续执行相联系的减将产生非负值同步机制的子例行程序调用将在下面详述信号量的初始化执行对子例行程序的引用有两个用途首先它说明使用特定信号量的目的如果发出的另一个信号量操作涉及到未初始化的信号量那么在运行时允许系统给出诊断警告其次为信号量建立初值通常仅在实时程序执行的初始化阶段引用如果不存在指定名称的信号量那么错误参数将指出错误状态调用形式为其中为信号量它是整型表达式为赋予信号量的初值对于特定的信号量直至对特定信号量执行和把值赋予内部变量内部值才被定义并且另一系统调用涉及这个信号量时将会给出错误返回这个参数是整型表达式允许取负值这是信号量可取负值的唯一方法负初
39、值的作用在于在进行释放动作以前需要借助于相应较大地增加信号量的值如条所述等待信号量执行对子例行程序的引用将可能促成调用任务挂起如由被引用的信号量控制那样在调用结束以前信号量的值将被减去量当减后的结果为非负值时才进行减并接着继续执行否则挂起调用任务直至能进行减调用形式为其中如条所述为整型表达式它表示如果能减的话要从信号变量减去的量的值应是大于或等于的正数相应于最常用的简单信号量如条所述释放信号量执行对子例行程序的引用将给信号量变量增加一个整数如下面表达式所示且涉及该引用的一个自变量此子例行程序被允许在它操作期间互斥存取这个信号量并将对它的值作下面的修改其中为自变量如下所述这个操作使得信号量改变为
40、足够大小的正值这种改变可能使正等待这个事件发生而处于挂起状态的任务转变为运行状态由于执行与同样的信号量相关的而挂起的其他任务在结束现行的调用以后应具有重新计算出的挂起条件如上所述这将为释放挂起任务恢复操作提供机会这种再继续受到与在同一信号量上互斥操作有关的所有公共限制的支配因此这种作用将使得同一时刻仅测试一个挂起任务这种测试可以促成再次减小信号量这是由于对被测试任务的的释放操作所致只要信号量的值仍然能大于或等于某个挂起任务的值这种测试将会继续换言之核查挂起任务的次序是与处理器相关的调用形式为其中如条所述为整型表达式它表示如果能加的话要加到信号量变量的量的值应是大于或等于的正数相应于最常用的简单
41、信号量如条所述读信号量的值执行对整型函数的引用可以读取信号量的值这个函数的用途不是作为同步操作而仅提供系统中管理同步的手段因此例如对函数的引用能提供关于缓冲器或其他共享资源占用情况的信息当被接受时此引用将被允许对信号量互斥存取当执行对的引用时如果信号量正在被其他系统调用存取那么如其他信号量操作那样此引用受到同样的延迟响应和争用机制的支配返回时当此引用被接受时函数标志符将有与内部信号量的值相同的值引用形式为其中如条所述如条所述执行正常结束执行对子例行程序的引用将会终止任务执行并使任务返回潜在状态事件标记和信号量不应受影响以前由此任务锁定的资源标记应被解锁见条并释放文卷调用形式为通用的操作和提供了
42、终止任务执行的另一种手段然而对已连接部件的作用诸如文卷如所述对在本标准中叙述的其他资源的作用是与处理器相关的第二篇二进制模式和位处理绪言本篇中所述的函数引用提供了位模式操作机制以及整型变量中各位的内部表示这些操作假定整型数都是无正负号整数但算术移位操作见条例外就引用单独位的自变量而论采用的位编号规则为最右边的位编号为它是最低位二进制模式处理布尔操作提供下列布尔操作和这些操作象整型函数那样实现用字母作为函数名的第一个字母来指出和的隐含类型它们的参数和都是整型表达式执行函数以后参数保持不变对两个运算量的相应位相等编号执行操作并给出相应位的结果值在下面真值表指出的值表示自变量和函数值的各个相应位或函
43、数形式为根据参数和的值按下面的真值表计算函数值函数值与函数形式为根据参数和的值按下面的真值表计算函数值函数值非函数形式为函数值是参数值的逻辑非按下面的真值表计算函数值函数值异函数形式为根据参数和的值按下面的真值表计算函数值函数值移位操作提供的移位操作有三种逻辑算术和循环移位移位操作象整型函数那样实现函数有两个参数和它们是三种整型表达式如下表示为要移位的值二进制模式为移位次数表示左移表示不移位表示右移如果移位次数的绝对值大于数值存储部件中的位数那么结果是不确定的移位操作不改变参数值逻辑移位函数形式为参数的所有位都被移位移出左端或右端的位被丢失可能的话从另一端移入零算术移位函数形式为自变量和函数值
44、被认为是带正负号整数参数的所有位都被移位在右移的情形中如果是正数那么把移入左端如果是负数那么把移入左端移出右端的位都被丢失在左移的情形中把移入右端而移出左端的位都被丢失在左移时可能发生算术溢出循环移位函数形式为参数的所有位被循环移位即从一端移出的位被移入另一端不丢失任何位注的位数是与处理器相关的位处理能用位处理函数测试整数的各个位本函数有两个参数和它们都是整型表达式如下所示为二进制模式为选择的位它的编号如第章所述如果是负数或大于表示一个整数值的位数那么函数的结果是不确定的这些函数不改变参数值位测试函数形式为本函数是逻辑类型它测试参数的第位值如果这位是则函数值是如果这位是那么函数值是设置位此整型
45、函数形式为函数值等于参数的第位被置为的值清除位此整型函数形式为函数值等于参数的第位被置为的值改变位此整型函数形式为函数值等于参数的第位变反的值第三篇过程输入输出绪言工业实时的用户必须能对他应用的特定过程设备寻址因为大部分输入输出系统是与计算机相关的所以通常仅能通过对驱动程序例行程序的标准化调用来标准化输入输出而对于每个系统驱动程序例行程序是专门编写的与计算机不相关的系统或者已标准化的或者是某些组织研究中的标准为这些系统设计的标准化调用完全符合于这里介绍的调用但它们超出了本标准的范围过程的范围和例行程序的一般结构过程外围设备是在过程或它的终端设备和计算机中央处理机之间的连接设备处理机接收描述过程
46、的空间和时间特性的数据且准备好以便能通过接口把它们传送到中央处理机由于过程需要各种各样的任务导致了来自不同制造厂家的大量外围设备然而在多年的硬件发展过程中已经建立了基本上兼容的和通常认可的开发系列可以用下面各点来说明它们端口是通过它们各自的地址来区分的在大多数系统中用于过程引用的端口名称地址多半是等于各自的硬件地址但这不是强制性的认为这种关系是与处理器相关的它不属于本标准的范围中说明在一个语句完成之后才能开始处理下一个语句这里叙述的标准过程遵守这个规则调用任务将等待完成并且以字母等待作为所有子例行程序名的最后一字母来表示这种操作方式下面的参数名称适用于某些引用如果这些参数名称的确切意义与下面的
47、叙述不同那么在引用的详细说明中专门指出如果它的意义严格地符合定义那么将在引用的说明中省略参数说明并且引用将按本章处理用于过程的过程通常有四个特殊情况为五个参数这些参数一般命名为和这种调用的一般形式为其中表示以后要叙述的一个子例行程序为要传送的值的个数它是整型表达式为整型数组名或数组元素名它包含了描述端口所必须的信息即地址和数据转换信息信息的有序表示是与处理器相关的为整型数组名或数组元素名它包含输入或输出值为状态指示符它的值表征调用成功如下所示未定义的已传送所有数据错误状态本自变量应是整型变量或整型数组元素模拟值的输入输出对于输入在硬件实现的顺序输入和随机输入之间作了区分在第一种情形中对于顺序输
48、入输入参数包含第一个模拟输入的地址以后的地址将自动生成在第二种情形中必须在数组中给出整个地址序列对于输出总是随机方式即在数组中给出所有地址通常的格式是与系统相关的见附录参考件的条输入或输出端口的范围和中相应元素之间的关系是与处理器相关的在附录的条中提供了某些推荐的设计指导顺序模拟数据输入执行对子例行程序的引用将从一串具有顺序地址的模拟输入端口读入调用形式为其中为要读的模拟输入端口个数它是整型表达式为用于获取和转换第一个和后继的模拟端口的硬件或软件信息的描述它是整型数组名或数组元素名见附录的条为用于记录已转换的模拟值的数组它是整型数组名或数组元素名见附录的条如第章所述按随机次序的模拟数据输入执行
49、对子例行程序的引用将按指定次序从一串模拟输入端口读入调用形式为其中为要读的输入端口个数它是整型表达式为用于获取和转换每个模拟值的硬件或软件信息的描述它是整型数组名见附录的条为用于记录已转换的模拟值的数组见附录的条如第章所述模拟数据输出执行对子例行程序的引用将按指定次序向一批模拟输出端口输出一串模拟值调用形式为其中为模拟输出端口的个数它是整型表达式为包含用于数据转换和传送的信息它是整型数组名见附录条为包含要输出的模拟值的数组它是整型数组名见附录的条如第章所述数字值的输入输出对于这类输入输出假定尽管有时可以用单个二进制位来表示有效信息但是仍然必须把数字值被看作使用整个数值存储单元或字的整体传送到或传送出整型数组例如每个数值存储单元为个二进制位数字值输入调用形式为其中为数字值输入的个数它是一个整型表达式为包含用于转换和传送的硬件信息和某些情形中的软件信息它是整型数组名在中也可以包含可复位的说明为用于存储数字值的数组它是整型数组名如第章所述数字值输出对于输出来说应把脉冲输出瞬时的数字输出与具有永久保持值的数字输出锁存数字输出区分开数字值的脉冲输出执行对子例行程序的引用将对于