1

我使用基于状态机的设计工具已经有一段时间了,并且已经看到 UML 建模工具允许您在状态内执行逻辑(调用函数、执行其他操作)。但是,在使用 IAR VisualState 几天后,您似乎无法在没有触发器的状态下执行您的逻辑。我很困惑,因为对状态内的每一个动作都有一个触发器是没有意义的!

这是我对状态图工具的期望:如果我进入 StateA,在进入状态后,我在 entry 部分设置我的值,然后我想调用一个函数(我只想调用它,NO TRIGGER),然后在里面那个函数,我想根据一些逻辑触发一个事件,那个事件会触发从StateA到StateB或StateC的状态转换。

这种期待有问题吗?在 VisualSTATE 中可能吗?

非常感谢您的帮助。

4

2 回答 2

2

VisualSTATE 强加了事件驱动范例,就像任何图形用户界面程序一样。在这样的系统中发生的任何事情都是由事件触发的。然后系统通过执行动作(计算)并可能通过更改状态(状态转换)来响应。

事件驱动系统最困难的方面可能是控制反转,也就是说,只有在有要处理的事件时才调用您的(状态机)代码。否则,您的代码甚至不会处于活动状态。这意味着你无法控制,事件是。你的工作是响应事件。

或许在使用 visualSTATE 之前,您可以阅读任何有关 Windows 的 GUI 编程的书(Visual Basic 是一个很好的起点)并构建几个事件驱动的应用程序。完成此操作后,visualSTATE 背后的理念将变得更加清晰。

于 2011-06-04T21:38:15.937 回答
0

创建 3 个状态:A、B、C,其中状态 A 是默认状态。通过进入状态 A,调用动作函数 [根据某种算法设置变量 a 和 b],然后是 ^Signal1。

Entry/ action()^Signal1

由 Signal1 驱动的转换 [将作为事件为您服务] 从状态 A 与 2 个守卫:

a <= b, transition to state C

a > b, transition to state B

于 2013-08-02T17:34:52.647 回答