跳轉到內容

嵌入式控制系統設計/非同步活動

來自華夏公益教科書,開放書籍,開放世界

本章介紹瞭如何在兩個並行執行的活動之間交換資料,或者同步它們的執行。

中斷和ISR

[編輯 | 編輯原始碼]

中斷和ISR(中斷服務程式)是非同步活動的最底層。所有更高層都是建立在這個基礎之上的。在某些情況下,RTOS 將為您處理所有底層細節。

我們在其他章節中更詳細地討論了中斷和ISR --

執行緒共享記憶體

[編輯 | 編輯原始碼]

在兩個共享記憶體的執行緒之間交換資料...

中等水平

程序間通訊

[編輯 | 編輯原始碼]

高階(= 透過在獨立受保護記憶體區域中的程序之間非同步訊息傳遞進行程序間通訊)。

計算機到計算機通訊

[編輯 | 編輯原始碼]

RPC(遠端過程呼叫)...

軟體問題

[編輯 | 編輯原始碼]

在機器人中實現軟體程式碼時,同步執行緒可能存在問題。本節提供了多執行緒系統中的一些不良程式設計示例。它以C程式碼來說明。它們之所以引起關注是因為它是瞭解由於在更高層面上進行併發工程而導致的問題的第一步。


  • 當一個程式有一個全域性變數和同步執行緒時,執行緒 1 可能在全域性變數被寫入之前被中斷,而執行緒 2 可能在舊資料上工作。這可能仍然是可以接受的,但程式的結果不是程式設計師想要的。



  • 當全域性變數在第 4 行和第 8 行之間從正值變為負值時,沒有一個條件為真。沒有函式呼叫,這會導致問題。


  • 當兩個執行緒使用相同的資源時,可以使用互斥原則。這可以使用全域性變數計數器來實現。當計數器為負數時,一個執行緒在進入臨界區之前被阻塞,而另一個執行緒仍在執行臨界區內的程式碼。第一個執行緒設定全域性變數,第二個執行緒使用它進行計算。

如果第一個執行緒遞減計數器,然後被搶佔,第二個執行緒也會遞減計數器,並在之後對其進行評估。兩個執行緒都無法繼續,因為計數器現在為 -1。在執行的程式中出現了死鎖情況。

這個問題也可能出現在更高級別的抽象中。下一節將描述Petri網中的死鎖情況。

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書