Q
如何讀取FSM圖
5
A
回答
9
裏面帶有文本的圓圈是狀態。文本描述了狀態。
虛線箭頭指向起始狀態。
傳出的箭頭決定了狀態可能改變的地方。箭頭旁邊是文字,分爲上半部分和下半部分。下半部分是執行箭頭轉換時應該發生的操作。上半部分是條件。當它們是真實的時候 - 這個轉換被執行(和更低的部分)。
Lambda符號意味着除非在轉換髮生時更改當前狀態,否則不應該執行任何操作。
所以較低的零件有粗糙對應於您的功能。上面的部分是你應該等待的條件 - 輪詢或異步等待懸而未決的I/O數據包,無論如何。
下面是一些僞代碼類似於C(我寫它只是在這裏所以不要以爲它的工作原理,甚至編譯):
enum State { WaitFor0Call, WaitForAck0, WaitForCall1, WaitForAck1 }
int main() {
State state = WaitFor0Call;
while (1) {
switch (state) {
case WaitFor0Call:
if (rdt_rcv(rcvpkt)) continue;
if (rdt_send(data)) {
state = WaitForAck0;
sndpkt = make_pkt(0, data, checksum);
udt_send(sndpkt);
start_timer();
}
break;
case WaitForAck0:
// ...similar code...
break;
case WaitForCall1:
// ...similar code...
break;
case WaitForAck1:
// ...similar code...
break;
}
}
}
你也應該考慮到,接收和發送功能可能會被阻止,因此代碼if (rdt_rcv(rcvpkt)) whatever;
在技術上是不正確的,因爲您不檢查rdt_send
,直到它返回控制。所以FSM只傳達邏輯流程,而不是技術方面的應該如何組織,線程管理等等。而且我的代碼並沒有顯示這個方面,因爲它可能是複雜的,取決於你的需求,因爲你沒有提供足夠的細節就這些樣的東西:)明智的建議
我唯一的猜測是,你將有某種雙向管理流(用於輸入和輸出分別)和條件會像if (there_is_ready_for_consuming_packet_in_the_input_queue) continue;
和if (data_was_put_to_outgoing_stream_successfully) ...;
相關問題
- 1. 如何在FSM
- 2. 圖形函數中的FSM
- 3. 如何讀取coplot()圖
- 4. 在FSM
- 5. 如何永遠運行fsm模型
- 6. 如何修復Automata FSM中的錯誤?
- 7. Qt讀取許多圖像優化 - 如何只讀取大小?
- 8. 如何通過IDataReader讀取圖像
- 9. 如何使用libpng讀取png圖像?
- 10. 如何正確讀取PGM圖像C
- 11. 如何在java中讀取xls圖表?
- 12. 如何讀取圖像的塊?
- 13. 如何讀取Java中的PGM圖像?
- 14. 如何從PostAsync(HttpClient)讀取圖像?
- 15. 如何從xml文件讀取圖像?
- 16. 如何讀取OCAML中的位圖?
- 17. 如何讀取GAE中的位圖
- 18. Matlab - 如何從目錄讀取圖像
- 19. 如何正確讀取圖像文件?
- 20. 如何讀取圖像中的iphone
- 21. 如何從意圖中讀取「額外」?
- 22. 如何使用Java API讀取圖像?
- 23. 如何讀取圖像中的數字?
- 24. Spark如何有效讀取100K圖像?
- 25. 如何從圖像中讀取文字
- 26. Python - 如何從URL讀取圖像?
- 27. 如何從JSON讀取地圖數據
- 28. 以VHDL實現FSM
- 29. 需要FSM框架
- 30. 組合狀態,FSM
嗯ok了。這有幫助。我會看看我能想出什麼。我真的只是試圖實施RDT 3.0。 – Matt
我已經實現了一些低級網絡協議,但不幸的是我不熟悉RDT。所以我只能跟大家分享一下FSM的一般信息。那麼,已經分享:) –