3

我想我可以区分eventguard。但是我遇到了一个类似于守卫的事件:

counter > 4 [pin is high] / switch on
^^^^^^^^^^^ 
   event

我将变量计数器从小于 4 的某个值更改为大于 4 的事件视为事件。这是否意味着事件也可以是守卫之类的条件?

4

1 回答 1

2

事件是触发转换的事物。在您的情况下counter > 4是一个更改事件,这意味着“计数器值已更改并且其值现在大于 4 ”。

括号之间的代码是guard。在您的情况下pin is high,意思是“只有在引脚为高电平时才启用转换”。

switch on是执行转换时执行的行为。

脚注:在您的示例中,事件确实与警卫非常相似。

在 C 中,它可能看起来像这样:

/** 
 * this interrupt is triggered when the
 * counter exceeds the threshold (4)
 */
static void counter_isr(void)
{
   if (pin_is_high(PIN))
       switch_on();
} 

从 UML 2.5 规范:

14.2.3.8 转换 ...一个转换可能拥有一组触发器,每个触发器指定一个事件,其发生在调度时可能触发转换的遍历。如果调度的事件发生与其事件类型匹配,则称启用了转换触发器。

14.2.4.9 转换...转换的默认文本符号由以下 BNF 表达式定义:

[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]

换句话说:trigger [guard] / behavior

于 2015-09-04T18:54:17.147 回答