openamp — fournit la prise en charge standard du multitraitement asymétrique (AMP)¶
Le module openamp fournit une infrastructure standard de communication inter-processeurs pour MicroPython. Le module gère tous les détails d’OpenAMP, tels que la mise en place de la table de ressources partagée, l’initialisation des vrings, etc. Il fournit une API permettant d’utiliser l’infrastructure de bus RPMsg avec la classe Endpoint, et offre la prise en charge de la gestion du cycle de vie (LCM) des processeurs, comme le chargement du micrologiciel ainsi que le démarrage et l’arrêt d’un cœur distant, via la classe RemoteProc.
Exemple d’utilisation
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")
Fonctions¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Définit la nouvelle fonction de rappel de service.
L’argument ns_callback est une fonction qui sera appelée lorsque le processeur distant annonce de nouveaux services. À ce moment-là, le processeur hôte peut choisir de créer le point de terminaison annoncé, si ce service particulier est pris en charge, ou de l’ignorer dans le cas contraire. Si cette fonction n’est pas définie, le processeur hôte doit d’abord enregistrer le point de terminaison localement, et celui-ci sera automatiquement lié lorsque le distant annonce le service.
Classe Endpoint¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Construit un nouveau point de terminaison RPMsg. Un point de terminaison est un canal de communication bidirectionnel entre deux cœurs.
Les arguments sont :
name est le nom du point de terminaison.
callback est une fonction qui est appelée lorsque le point de terminaison reçoit des données, avec l’adresse source du point distant et les données sous forme d’octets passées par référence.
src est l’adresse source du point de terminaison. Si aucune n’est fournie, la bibliothèque en attribue une au point de terminaison.
dest est l’adresse de destination du point de terminaison. Si le point de terminaison est créé depuis le new_service_callback, elle doit être fournie et doit correspondre à l’adresse source du point de terminaison distant. Si le point de terminaison est enregistré localement, avant l’annonce, l’adresse de destination sera attribuée par la bibliothèque lors de la liaison du point de terminaison.
- is_ready() bool¶
Renvoie True si le point de terminaison est prêt à émettre (c’est-à-dire qu’il possède à la fois une adresse source et une adresse de destination).
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Envoie un message au processeur distant via ce point de terminaison.
Les arguments sont :
buffer est la charge utile du message (tout objet prenant en charge le protocole tampon, par exemple
bytes,bytearrayoustr).src est l’adresse source du point de terminaison du message. Si aucune n’est fournie, l’adresse source à laquelle le point de terminaison est lié est utilisée.
dest est l’adresse de destination du point de terminaison du message. Si aucune n’est fournie, l’adresse de destination à laquelle le point de terminaison est lié est utilisée.
timeout spécifie le temps en millisecondes à attendre pour qu’un tampon se libère. Par défaut, la fonction est bloquante.
Classe RemoteProc¶
Avertissement
Sur le STM32H7, le second cœur AMP est un Cortex-M4 qui ne peut pas être arrêté puis redémarré sur place. Appeler RemoteProc.stop() ou RemoteProc.shutdown() sur cette plateforme effectue donc une réinitialisation complète du système plutôt qu’un arrêt par cœur.
- class openamp.RemoteProc(entry: str | int)¶
L’objet RemoteProc fournit la prise en charge de la gestion du cycle de vie (LCM) des processeurs, comme le chargement du micrologiciel ainsi que le démarrage et l’arrêt d’un cœur distant.
L’argument entry peut être un chemin vers une image de micrologiciel, auquel cas le micrologiciel est chargé depuis le fichier vers sa mémoire cible, ou une adresse de point d’entrée, auquel cas le micrologiciel doit déjà être chargé à l’adresse donnée.
- shutdown() None¶
Shutdown arrête le processeur distant et libère toutes ses ressources. Le comportement exact dépend de la plateforme, mais il désactive généralement l’alimentation et les horloges du cœur distant. Cette fonction est également utilisée comme finaliseur (c’est-à-dire appelée lorsque l’objet
RemoteProcest collecté).