openamp — szabványos aszimmetrikus többszálú feldolgozás (AMP) támogatást nyújt¶
Az openamp modul szabványos processzorok közötti kommunikációs infrastruktúrát biztosít a MicroPython számára. A modul kezeli az OpenAMP minden részletét, például a megosztott erőforrás-tábla beállítását, a vringek inicializálását stb. API-t biztosít az RPMsg busz infrastruktúra használatához az Endpoint osztályon keresztül, valamint processzor-életciklus-kezelési (LCM) támogatást nyújt, például firmware betöltését, illetve egy távoli mag indítását és leállítását a RemoteProc osztályon keresztül.
Példa a használatra:
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")
Függvények¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Az új szolgáltatás visszahívás beállítása.
Az ns_callback argumentum egy függvény, amely akkor hívódik meg, amikor a távoli processzor új szolgáltatásokat hirdet meg. Ezen a ponton a gazda processzor dönthet úgy, hogy létrehozza a meghirdetett endpointot, ha az adott szolgáltatás támogatott, vagy figyelmen kívül hagyja, ha nem. Ha ez a függvény nincs beállítva, a gazda processzornak először helyileg kell regisztrálnia az endpointot, és az automatikusan összekapcsolódik, amikor a távoli mag meghirdeti a szolgáltatást.
Endpoint osztály¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Új RPMsg Endpoint létrehozása. Az endpoint egy kétirányú kommunikációs csatorna két mag között.
Az argumentumok:
A name az endpoint neve.
A callback egy függvény, amely akkor hívódik meg, amikor az endpoint adatot fogad; a távoli pont forráscímét, valamint az adatot bájtokként, referencia szerint átadva kapja meg.
A src az endpoint forráscíme. Ha nincs megadva, a könyvtár automatikusan hozzárendel egyet az endpointhoz.
A dest az endpoint célcíme. Ha az endpoint a new_service_callback-ből jön létre, ezt meg kell adni, és meg kell egyeznie a távoli endpoint forráscímével. Ha az endpoint helyileg, a meghirdetés előtt van regisztrálva, a célcímet a könyvtár rendeli hozzá az endpoint összekapcsolásakor.
- is_ready() bool¶
True értéket ad vissza, ha az endpoint kész a küldésre (azaz rendelkezik forrás- és célcímmel is).
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Üzenet küldése a távoli processzornak ezen az endpointon keresztül.
Az argumentumok:
A buffer az üzenet hasznos tartalma (bármely, a pufferprotokollt támogató objektum, pl.
bytes,bytearrayvagystr).A src az üzenet forrás-endpointcíme. Ha nincs megadva, az endpointhoz kötött forráscím használatos.
A dest az üzenet cél-endpointcíme. Ha nincs megadva, az endpointhoz kötött célcím használatos.
A timeout megadja a szabad pufferre való várakozás idejét ezredmásodpercben. Alapértelmezés szerint a függvény blokkoló.
RemoteProc osztály¶
Figyelem
Az STM32H7-en a második AMP mag egy Cortex-M4, amely nem állítható le, majd nem indítható újra a helyén. A RemoteProc.stop() vagy a RemoteProc.shutdown() hívása ezen a platformon ezért teljes rendszer-visszaállítást hajt végre az egyes magok leállítása helyett.
- class openamp.RemoteProc(entry: str | int)¶
A RemoteProc objektum processzor-életciklus-kezelési (LCM) támogatást nyújt, például firmware betöltését, illetve egy távoli mag indítását és leállítását.
Az entry argumentum lehet egy firmware-képfájl elérési útja, amely esetben a firmware fájlból töltődik be a célmemóriájába, vagy egy belépési pont címe, amely esetben a firmware-nek már be kell töltődnie az adott címre.
- shutdown() None¶
A leállítás (shutdown) megállítja a távoli processzort és felszabadítja minden erőforrását. A pontos viselkedés platformfüggő, azonban tipikusan kikapcsolja a tápellátást és az órajeleket a távoli mag számára. Ez a függvény véglegesítőként (finaliser) is szolgál (azaz akkor hívódik meg, amikor a
RemoteProcobjektum begyűjtésre kerül).