openamp --- menyediakan dukungan Asymmetric Multiprocessing (AMP) standar¶
Modul openamp menyediakan infrastruktur komunikasi antar-prosesor standar untuk MicroPython. Modul ini menangani semua detail OpenAMP, seperti menyiapkan tabel sumber daya bersama, menginisialisasi vring, dll. Modul ini menyediakan API untuk menggunakan infrastruktur bus RPMsg dengan kelas Endpoint, serta menyediakan dukungan Life Cycle Management (LCM) prosesor, seperti memuat firmware dan memulai serta menghentikan inti jarak jauh, melalui kelas RemoteProc.
Contoh penggunaan:
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")
Fungsi¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Menetapkan callback layanan baru.
Argumen ns_callback adalah fungsi yang akan dipanggil ketika prosesor jarak jauh mengumumkan layanan baru. Pada saat itu prosesor host dapat memilih untuk membuat endpoint yang diumumkan, jika layanan tertentu ini didukung, atau mengabaikannya jika tidak. Jika fungsi ini tidak ditetapkan, prosesor host harus terlebih dahulu mendaftarkan endpoint secara lokal, dan akan otomatis terikat ketika prosesor jarak jauh mengumumkan layanan tersebut.
Kelas Endpoint¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Membuat RPMsg Endpoint baru. Endpoint adalah saluran komunikasi dua arah antara dua inti.
Argumen adalah:
name adalah nama endpoint.
callback adalah fungsi yang dipanggil ketika endpoint menerima data dengan alamat sumber dari titik jarak jauh, dan data sebagai byte yang diteruskan dengan referensi.
src adalah alamat sumber endpoint. Jika tidak ada yang diberikan, satu akan ditetapkan ke endpoint oleh pustaka.
dest adalah alamat tujuan endpoint. Jika endpoint dibuat dari new_service_callback, ini harus disediakan dan harus sesuai dengan alamat sumber endpoint jarak jauh. Jika endpoint didaftarkan secara lokal, sebelum pengumuman, alamat tujuan akan ditetapkan oleh pustaka ketika endpoint terikat.
- is_ready() bool¶
Mengembalikan True jika endpoint siap mengirim (yaitu, memiliki alamat sumber dan tujuan)
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Mengirim pesan ke prosesor jarak jauh melalui endpoint ini.
Argumen adalah:
buffer adalah payload pesan (objek apa pun yang mendukung protokol buffer, misalnya
bytes,bytearray, ataustr).src adalah alamat endpoint sumber pesan. Jika tidak ada yang diberikan, alamat sumber yang terikat pada endpoint digunakan.
dest adalah alamat endpoint tujuan pesan. Jika tidak ada yang diberikan, alamat tujuan yang terikat pada endpoint digunakan.
timeout menentukan waktu dalam milidetik untuk menunggu buffer bebas. Secara default fungsi ini bersifat blocking.
Kelas RemoteProc¶
Peringatan
Pada STM32H7, inti AMP kedua adalah Cortex-M4 yang tidak dapat dihentikan dan kemudian dimulai ulang di tempat. Memanggil RemoteProc.stop() atau RemoteProc.shutdown() pada platform tersebut oleh karena itu melakukan reset sistem penuh daripada penghentian per-inti.
- class openamp.RemoteProc(entry: str | int)¶
Objek RemoteProc menyediakan dukungan Life Cycle Management (LCM) prosesor, seperti memuat firmware, memulai dan menghentikan inti jarak jauh.
Argumen entry dapat berupa jalur ke citra firmware, di mana firmware dimuat dari file ke memori targetnya, atau alamat titik masuk, di mana firmware harus sudah dimuat di alamat yang diberikan.
- shutdown() None¶
Shutdown menghentikan prosesor jarak jauh dan melepaskan semua sumber dayanya. Perilaku tepatnya bergantung pada platform, namun biasanya menonaktifkan daya dan clock ke inti jarak jauh. Fungsi ini juga digunakan sebagai finaliser (yaitu, dipanggil ketika objek
RemoteProcdikumpulkan).