openamp --- 標準の非対称マルチプロセッシング(AMP)サポートを提供します¶
openamp モジュールは、MicroPython 向けに標準のプロセッサ間通信インフラストラクチャを提供します。このモジュールは、共有リソーステーブルのセットアップや vring の初期化など、OpenAMP の詳細をすべて処理します。Endpoint クラスを使用して RPMsg バスインフラストラクチャを利用するための API を提供し、また RemoteProc クラスを介してファームウェアのロードやリモートコアの起動・停止といったプロセッサのライフサイクル管理(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")
関数¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
新しいサービスコールバックを設定します。
ns_callback 引数は、リモートプロセッサが新しいサービスを通知したときに呼び出される関数です。その時点で、ホストプロセッサは、その特定のサービスがサポートされている場合は通知されたエンドポイントを作成することを選択でき、サポートされていない場合は無視できます。この関数が設定されていない場合、ホストプロセッサはまずエンドポイントをローカルに登録するべきであり、リモートがサービスを通知すると自動的にバインドされます。
Endpoint クラス¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
新しい RPMsg Endpoint を構築します。エンドポイントは、2 つのコア間の双方向通信チャネルです。
引数は次のとおりです:
name はエンドポイントの名前です。
callback は、エンドポイントがデータを受信したときに、リモートポイントの送信元アドレスと、参照渡しされたバイト列としてのデータとともに呼び出される関数です。
src はエンドポイントの送信元アドレスです。指定しない場合は、ライブラリによってエンドポイントに割り当てられます。
dest はエンドポイントの宛先アドレスです。エンドポイントが new_service_callback から作成される場合、これは指定する必要があり、リモートエンドポイントの送信元アドレスと一致する必要があります。エンドポイントが通知の前にローカルに登録される場合、宛先アドレスはエンドポイントがバインドされるときにライブラリによって割り当てられます。
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
このエンドポイントを介してリモートプロセッサにメッセージを送信します。
引数は次のとおりです:
buffer はメッセージのペイロードです(
bytes、bytearray、strなど、バッファプロトコルをサポートする任意のオブジェクト)。src はメッセージの送信元エンドポイントアドレスです。指定しない場合は、エンドポイントがバインドされている送信元アドレスが使用されます。
dest はメッセージの宛先エンドポイントアドレスです。指定しない場合は、エンドポイントがバインドされている宛先アドレスが使用されます。
timeout は、空きバッファを待機する時間をミリ秒単位で指定します。デフォルトでは、この関数はブロッキングです。
RemoteProc クラス¶
警告
STM32H7 では、2 番目の AMP コアは Cortex-M4 であり、停止してからその場で再起動することはできません。そのため、このプラットフォームで RemoteProc.stop() または RemoteProc.shutdown() を呼び出すと、コアごとの停止ではなく、システム全体のリセットが実行されます。