openamp — підтримка стандартної асиметричної багатопроцесорної обробки (AMP)¶
Модуль openamp забезпечує стандартну інфраструктуру міжпроцесорного зв’язку для MicroPython. Модуль бере на себе всі деталі OpenAMP: налаштування спільної таблиці ресурсів, ініціалізацію vring тощо. Він надає API для роботи з інфраструктурою шини RPMsg через клас Endpoint, а також підтримку управління життєвим циклом процесора (LCM) — завантаження мікропрограми, запуск і зупинку віддаленого ядра — через клас RemoteProc.
Приклад використання:
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. Кінцева точка являє собою двонаправлений канал зв’язку між двома ядрами.
Аргументи:
name — назва кінцевої точки.
callback — функція, яка викликається при отриманні даних кінцевою точкою; їй передається адреса джерела віддаленої точки та дані у вигляді байтів за посиланням.
src — адреса джерела кінцевої точки. Якщо не вказана, бібліотека призначить адресу автоматично.
dest — адреса призначення кінцевої точки. Якщо кінцева точка створюється з new_service_callback, цей аргумент обов’язковий і має збігатися з адресою джерела віддаленої кінцевої точки. Якщо кінцева точка реєструється локально до оголошення, бібліотека призначить адресу призначення при прив’язці.
- is_ready() bool¶
Повертає True, якщо кінцева точка готова до відправлення (тобто має як адресу джерела, так і адресу призначення).
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Надсилає повідомлення до віддаленого процесора через цю кінцеву точку.
Аргументи:
buffer — корисне навантаження повідомлення (будь-який об’єкт, що підтримує протокол буфера, наприклад
bytes,bytearrayабоstr).src — адреса джерела кінцевої точки для повідомлення. Якщо не вказана, використовується адреса, до якої прив’язана кінцева точка.
dest — адреса призначення для повідомлення. Якщо не вказана, використовується адреса призначення, до якої прив’язана кінцева точка.
timeout — час очікування вільного буфера в мілісекундах. За замовчуванням функція є блокуючою.
Клас RemoteProc¶
Попередження
На STM32H7 другим ядром AMP є Cortex-M4, яке не можна зупинити та перезапустити на місці. Тому виклик RemoteProc.stop() або RemoteProc.shutdown() на цій платформі виконує повне скидання системи, а не зупинку окремого ядра.
- class openamp.RemoteProc(entry: str | int)¶
Об’єкт RemoteProc забезпечує підтримку управління життєвим циклом процесора (LCM): завантаження мікропрограми, запуск і зупинку віддаленого ядра.
Аргумент entry може бути шляхом до образу мікропрограми — тоді мікропрограма завантажується з файлу до цільової пам’яті, — або адресою точки входу, тоді мікропрограма має бути заздалегідь завантажена за вказаною адресою.