openamp — standart Asimetrik Çok İşlemcilik (AMP) desteği sağlar

openamp modülü, MicroPython için standart bir işlemciler arası iletişim altyapısı sağlar. Modül, paylaşılan kaynak tablosunu kurma, vring’leri başlatma vb. gibi OpenAMP’nin tüm ayrıntılarını yönetir. Endpoint sınıfı ile RPMsg veri yolu altyapısını kullanmak için bir API sağlar ve RemoteProc sınıfı aracılığıyla aygıt yazılımı (firmware) yükleme, uzak bir çekirdeği başlatma ve durdurma gibi işlemci Yaşam Döngüsü Yönetimi (LCM) desteği sunar.

Örnek kullanım:

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")

Fonksiyonlar

openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None

Yeni servis geri çağırmasını (callback) ayarlar.

ns_callback argümanı, uzak işlemci yeni servisleri duyurduğunda çağrılacak bir fonksiyondur. O noktada ana işlemci, bu belirli servis destekleniyorsa duyurulan uç noktayı (endpoint) oluşturmayı seçebilir veya desteklenmiyorsa görmezden gelebilir. Bu fonksiyon ayarlanmazsa, ana işlemci önce uç noktayı yerel olarak kaydetmelidir ve uzak işlemci servisi duyurduğunda otomatik olarak bağlanacaktır.

Endpoint sınıfı

class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)

Yeni bir RPMsg Endpoint oluşturur. Bir uç nokta (endpoint), iki çekirdek arasında çift yönlü bir iletişim kanalıdır.

Argümanlar:

  • name uç noktanın adıdır.

  • callback, uç nokta uzak noktanın kaynak adresiyle veri aldığında çağrılan bir fonksiyondur ve veri referansla aktarılan baytlar olarak gelir.

  • src uç nokta kaynak adresidir. Hiçbiri sağlanmazsa, kütüphane tarafından uç noktaya bir adres atanır.

  • dest uç nokta hedef adresidir. Uç nokta new_service_callback’ten oluşturulduysa bu sağlanmalıdır ve uzak uç noktanın kaynak adresiyle eşleşmelidir. Uç nokta duyurudan önce yerel olarak kaydedilirse, uç nokta bağlandığında hedef adresi kütüphane tarafından atanacaktır.

deinit() None

Uç noktayı yok eder ve tüm kaynaklarını serbest bırakır.

is_ready() bool

Uç nokta göndermeye hazırsa (yani hem kaynak hem de hedef adreslerine sahipse) True döndürür

send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int

Bu uç nokta üzerinden uzak işlemciye bir mesaj gönderir.

Argümanlar:

  • buffer mesaj yüküdür (arabellek protokolünü destekleyen herhangi bir nesne, ör. bytes, bytearray veya str).

  • src mesajın kaynak uç nokta adresidir. Hiçbiri sağlanmazsa, uç noktanın bağlı olduğu kaynak adresi kullanılır.

  • dest mesajın hedef uç nokta adresidir. Hiçbiri sağlanmazsa, uç noktanın bağlı olduğu hedef adresi kullanılır.

  • timeout, boş bir arabellek için beklenecek süreyi milisaniye cinsinden belirtir. Varsayılan olarak fonksiyon engelleyicidir.

RemoteProc sınıfı

Uyarı

STM32H7’de ikinci AMP çekirdeği, durdurulup ardından yerinde yeniden başlatılamayan bir Cortex-M4’tür. Bu nedenle bu platformda RemoteProc.stop() veya RemoteProc.shutdown() çağrılması, çekirdek başına bir durdurma yerine tam bir sistem sıfırlaması gerçekleştirir.

class openamp.RemoteProc(entry: str | int)

RemoteProc nesnesi, aygıt yazılımı (firmware) yükleme, uzak bir çekirdeği başlatma ve durdurma gibi işlemci Yaşam Döngüsü Yönetimi (LCM) desteği sağlar.

entry argümanı, bir aygıt yazılımı (firmware) imajının yolu olabilir; bu durumda aygıt yazılımı dosyadan hedef belleğine yüklenir veya bir giriş noktası adresi olabilir; bu durumda aygıt yazılımı verilen adrese zaten yüklenmiş olmalıdır.

start() None

Uzak işlemciyi başlatır.

stop() None

Uzak işlemciyi durdurur. Kesin davranış platforma bağlıdır.

shutdown() None

Shutdown, uzak işlemciyi durdurur ve tüm kaynaklarını serbest bırakır. Kesin davranış platforma bağlıdır, ancak tipik olarak uzak çekirdeğe giden gücü ve saatleri devre dışı bırakır. Bu fonksiyon ayrıca sonlandırıcı olarak da kullanılır (yani RemoteProc nesnesi toplandığında çağrılır).