2011-06-03 110 views
1

我一直在使用基於狀態機的設計工具,並且已經看到UML建模工具允許您在一個狀態內執行您的邏輯(調用函數,做其他事情) 。但是,在花了IAR VisualState幾天之後,看起來你不能在沒有觸發器的狀態下執行你的邏輯。我很困惑,因爲對於一個州內的每一個動作都沒有意義。IAR VisualState需要一個狀態內的每個表達式的觸發器

下面是我期望從狀態圖工具: 如果我輸入StateA,一旦進入狀態我在入口部分設置我的值,那麼我想調用一個函數(我只是想調用它,NO TRIGGER),並且在該函數內部,我想基於某種邏輯觸發事件,並且該事件將觸發從StateA到StateB或StateC的狀態轉換。

這種期望有什麼不對嗎?在VisualSTATE中可能嗎?

非常感謝幫助。

回答

2

與任何圖形用戶界面程序一樣,VisualSTATE強加事件驅動範例。在這樣的系統中發生的任何事情都是由事件觸發的。系統然後通過執行動作(計算)並且可能通過改變狀態(狀態轉換)來響應。

事件驅動系統的最困難的方面可能是控制反轉,也就是說,只有在有事件需要處理時才調用你的(狀態機)代碼。否則,你的代碼甚至沒有活動。這意味着你在控制而不是,事件是。你的工作是迴應事件。

也許在您使用visualSTATE玩之前,您可以拿起任何關於Windows GUI編程的書籍(Visual Basic是一個很好的起點),並構建一對事件驅動的應用程序。做完這些之後,visualSTATE背後的哲學將變得更加清晰。

+0

謝謝。不需要一本書,但不同的哲學,不適合我的工作。 – Rob 2011-06-05 18:21:12

0

創建3個狀態:A,B,C,其中狀態A是默認狀態。 通過輸入狀態A,調用動作函數[按照某種算法爲變量a和b設置 ],然後是^ Signal1。

Entry/ action()^Signal1

使由信號1驅動的轉變[將竭誠爲您服務作爲一個事件]從狀態A與2名後衛:

a <= b, transition to state C

a > b, transition to state B