openamp — biedt standaard Asymmetric Multiprocessing (AMP)-ondersteuning¶
De module openamp biedt een standaard infrastructuur voor communicatie tussen processoren voor MicroPython. De module handelt alle details van OpenAMP af, zoals het opzetten van de gedeelde resourcetabel, het initialiseren van vrings, enzovoort. Het biedt een API voor het gebruik van de RPMsg-businfrastructuur met de klasse Endpoint, en biedt ondersteuning voor Life Cycle Management (LCM) van processoren, zoals het laden van firmware en het starten en stoppen van een externe core, via de klasse RemoteProc.
Voorbeeldgebruik:
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")
Functies¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Stel de callback voor nieuwe services in.
Het argument ns_callback is een functie die wordt aangeroepen wanneer de externe processor nieuwe services aankondigt. Op dat moment kan de host-processor ervoor kiezen om het aangekondigde endpoint aan te maken, als deze specifieke service wordt ondersteund, of om het te negeren als dat niet zo is. Als deze functie niet is ingesteld, moet de host-processor het endpoint eerst lokaal registreren, waarna het automatisch wordt gebonden wanneer de externe processor de service aankondigt.
Endpoint-klasse¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Construeer een nieuw RPMsg-Endpoint. Een endpoint is een bidirectioneel communicatiekanaal tussen twee cores.
De argumenten zijn:
name is de naam van het endpoint.
callback is een functie die wordt aangeroepen wanneer het endpoint gegevens ontvangt, met als argumenten het bronadres van het externe punt en de gegevens als bytes, doorgegeven per referentie.
src is het bronadres van het endpoint. Als er geen wordt opgegeven, wijst de bibliotheek er een aan het endpoint toe.
dest is het bestemmingsadres van het endpoint. Als het endpoint vanuit de new_service_callback wordt aangemaakt, moet dit worden opgegeven en moet het overeenkomen met het bronadres van het externe endpoint. Als het endpoint lokaal wordt geregistreerd, vóór de aankondiging, wordt het bestemmingsadres door de bibliotheek toegewezen wanneer het endpoint wordt gebonden.
- is_ready() bool¶
Geeft True terug als het endpoint klaar is om te verzenden (d.w.z. zowel een bron- als een bestemmingsadres heeft)
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Verstuur een bericht naar de externe processor via dit endpoint.
De argumenten zijn:
buffer is de berichtinhoud (elk object dat het bufferprotocol ondersteunt, bijv.
bytes,bytearrayofstr).src is het bronadres van het endpoint voor het bericht. Als er geen wordt opgegeven, wordt het bronadres gebruikt waaraan het endpoint is gebonden.
dest is het bestemmingsadres van het endpoint voor het bericht. Als er geen wordt opgegeven, wordt het bestemmingsadres gebruikt waaraan het endpoint is gebonden.
timeout geeft de tijd in milliseconden aan om op een vrije buffer te wachten. Standaard is de functie blokkerend.
RemoteProc-klasse¶
Waarschuwing
Op de STM32H7 is de tweede AMP-core een Cortex-M4 die niet kan worden gestopt en vervolgens ter plaatse opnieuw kan worden gestart. Het aanroepen van RemoteProc.stop() of RemoteProc.shutdown() op dat platform voert daarom een volledige systeemreset uit in plaats van een stop per core.
- class openamp.RemoteProc(entry: str | int)¶
Het RemoteProc-object biedt ondersteuning voor Life Cycle Management (LCM) van processoren, zoals het laden van firmware en het starten en stoppen van een externe core.
Het argument entry kan een pad naar een firmware-image zijn, in welk geval de firmware vanuit een bestand naar het doelgeheugen wordt geladen, of een instappuntadres, in welk geval de firmware al op het opgegeven adres geladen moet zijn.
- shutdown() None¶
Shutdown stopt de externe processor en geeft al zijn resources vrij. Het exacte gedrag is platformafhankelijk, maar doorgaans schakelt het de voeding en klokken naar de externe core uit. Deze functie wordt ook gebruikt als finaliser (d.w.z. aangeroepen wanneer het
RemoteProc-object wordt opgeruimd).