openamp --- 提供标准的非对称多处理(AMP)支持¶
openamp 模块为 MicroPython 提供了标准的处理器间通信基础设施。该模块处理 OpenAMP 的所有细节,例如设置共享资源表、初始化 vring 等。它通过 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")
函数¶
Endpoint 类¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
构造一个新的 RPMsg 端点。端点是两个核心之间的双向通信通道。
参数为:
name 是端点的名称。
callback 是一个函数,当端点接收到数据时会被调用,并传入远程点的源地址,以及以引用方式传递的字节数据。
src 是端点的源地址。如果未提供,库将为该端点分配一个。
dest 是端点的目标地址。如果端点是从 new_service_callback 创建的,则必须提供此地址,且必须与远程端点的源地址匹配。如果端点是在宣告之前在本地注册的,则目标地址将在端点被绑定时由库分配。
RemoteProc 类¶
警告
在 STM32H7 上,第二个 AMP 核心是一个无法原地停止后重启的 Cortex-M4。因此在该平台上调用 RemoteProc.stop() 或 RemoteProc.shutdown() 会执行一次完整的系统复位,而不是单核心停止。