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.

deinit() None

Az endpoint megsemmisítése és minden erőforrásának felszabadítása.

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, bytearray vagy str).

  • 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.

start() None

Elindítja a távoli processzort.

stop() None

Leállítja a távoli processzort. A pontos viselkedés platformfüggő.

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 RemoteProc objektum begyűjtésre kerül).