openamp --- 提供標準的非對稱多處理(Asymmetric Multiprocessing,AMP)支援¶
openamp 模組為 MicroPython 提供標準的處理器間通訊基礎架構。此模組處理 OpenAMP 的所有細節,例如設定共用資源表、初始化 vring 等。它透過 Endpoint 類別提供使用 RPMsg 匯流排基礎架構的 API,並透過 RemoteProc 類別提供處理器生命週期管理(Life Cycle Management,LCM)支援,例如載入韌體以及啟動與停止遠端核心。
使用範例::
import openamp
def ept_recv_callback(src, data):
print("Received message on endpoint", data)
# Create a new RPMsg endpoint to communicate with the remote core.
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
# Create a RemoteProc object, load its firmware and start it.
rproc = openamp.RemoteProc("virtual_uart.elf") # Or entry point address (ex 0x081E0000)
rproc.start()
while True:
if ept.is_ready():
ept.send("data")
函式¶
Endpoint 類別¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
建構一個新的 RPMsg 端點。端點是兩個核心之間的雙向通訊通道。
引數為:
name 為端點的名稱。
callback 是一個函式,當端點接收到資料時會被呼叫,並傳入遠端點的來源位址,以及以位元組形式透過參照傳遞的資料。
src 為端點來源位址。若未提供,函式庫將指派一個位址給該端點。
dest 為端點目的位址。若端點是從 new_service_callback 建立的,則必須提供此位址,且必須與遠端端點的來源位址相符。若端點是在宣告之前於本機註冊的,則目的位址會在端點繫結時由函式庫指派。
RemoteProc 類別¶
警告
在 STM32H7 上,第二個 AMP 核心是一個 Cortex-M4,無法停止後再就地重新啟動。因此在該平台上呼叫 RemoteProc.stop() 或 RemoteProc.shutdown() 會執行完整的系統重設,而非單一核心的停止。