2015-12-05 28 views
1

什麼是微控制器環境下的「原子操作」?什麼是微控制器中的原子操作?

我在學習TI F28027 MCU。

The data sheet says that its operations are atomic。這是什麼意思?

+1

原子(希臘語)意思是不能/不應該分裂成更多的片斷。在計算中,原子指令/操作意味着在執行時不能/不應該中斷(其較低級別的步驟被分開),或者存在不希望的副作用的風險。中斷禁用是迫使一系列指令行爲幾乎就像1的最粗糙的方式。在RTOS /多任務處理中,訪問相同變量的兩個或多個任務需要在原子操作中讀取/更新變量。這是通過信號量來完成的,或者通過確保同時訪問是不可能的。 – tonypdmtr

+0

簡單,通用的定義:如果你反彙編一個高級語言指令,並且它只產生1個彙編指令,那它就是原子性的。如果它產生超過1個彙編指令,它不是原子的。 – Lundin

+0

@Lundin不太如此。有一些體系結構具有可中斷的某些指令。 – tonypdmtr

回答

7

閱讀關於atomic operations的維基百科文章,以獲取關於「原子」一般意義的描述。這裏的果殼摘錄:

在並行編程,操作(或一組操作)是 原子,線性化,不可分割或不間斷,如果它似乎 系統的其餘部分瞬間發生。原子性是保證從併發進程中隔離出來的。

的TI的F28x短笛微控制器系列具有允許待原子方式執行讀 - 修改 - 寫的指令的特殊原子ALU(算術邏輯單元)。這C2000 Piccolo Workshop document有一些信息。我相信特殊彙編語法需要利用原子ALU(第1-6頁)。我懷疑TI的Code Composer編譯器會在可能的情況下生成原子彙編語法。儘管如何編寫C代碼可能會影響編譯器的效率(第3-5頁)。

考慮更多的幫助諮詢TI's E2E Community

1

我不熟悉具體的MCU,但通常情況下,原子操作是指那些修改內存位置,且沒有其他方面,硬件或軟件,可以中斷讀取和寫入susiquent子操作。這保證沒有其他操作可以改變內存位置。

例如,增量操作者必須讀取目標存儲器位置,添加一個到值,然後寫回同一位置。如果它不是原子的,其他東西可能會寫入它們之間的相同位置。然後當發生回寫時,中間寫入將會丟失。

因此,通過原子操作被阻止什麼樣的其他情況下的?

  • ISR寫入內存的中斷。
  • DMA寫入RAM。
  • 多核處理器中的其他內核。
+1

這不是特定的內存操作。這是任何不能被打斷的操作。 –

0

它通常與資源或功能做了要求/資源的願望兩(不止一個)的訪問,並要求對沒有被其他無關的訪問被打斷這兩個訪問。所以讀 - 修改 - 寫,或測試和設置是兩個常見的例子。

如果您沒有任何原子或原子類型需要,那麼您將在軟件中確保兩個訪問不會中斷或受到干擾(如果可能的話),如果不可能,那麼您需要其他解決方案。硬件通常會給你至少一個(如測試和設置),你可以用軟件創建其他受保護的功能。例如,軟件解決方案可能使用中斷服務例程保護前臺任務,如果中斷髮生在兩次訪問之間(測試和設置,讀取 - 修改 - 寫入讀取和寫入是兩次訪問),則isr可能會在第一次讀取之後但在下一次寫入之前修改數據現在第一次讀取過時/不正確。因此,在保護自己免受中斷時,通常會暫時禁用中斷,然後重新啓用。讓硬件做到這一點,它可以確保即使發生中斷,或者即使有其他外圍設備可以訪問,它也會被關閉,並且/或者您根據優先級被關閉,所以您的原子操作可以不中斷地發生。