openamp — pruža standardnu podršku za asimetrično višeprocesiranje (AMP)¶
Modul openamp pruža standardnu infrastrukturu za međuprocesorsku komunikaciju za MicroPython. Modul obrađuje sve detalje OpenAMP-a, poput postavljanja zajedničke tablice resursa, inicijalizacije vringova itd. Pruža API za korištenje infrastrukture sabirnice RPMsg putem klase Endpoint te pruža podršku za upravljanje životnim ciklusom procesora (LCM), poput učitavanja ugrađenog programa (firmware) te pokretanja i zaustavljanja udaljene jezgre, putem klase RemoteProc.
Primjer korištenja:
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")
Funkcije¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Postavlja povratni poziv za nove usluge.
Argument ns_callback je funkcija koja se poziva kada udaljeni procesor najavi nove usluge. U tom trenutku procesor domaćin može odlučiti stvoriti najavljenu krajnju točku ako je ta usluga podržana, ili je zanemariti ako nije. Ako ova funkcija nije postavljena, procesor domaćin bi prvo trebao lokalno registrirati krajnju točku, a ona će se automatski povezati kada udaljeni procesor najavi uslugu.
Klasa Endpoint¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Stvara novu RPMsg krajnju točku. Krajnja točka je dvosmjerni komunikacijski kanal između dviju jezgri.
Argumenti su:
name je naziv krajnje točke.
callback je funkcija koja se poziva kada krajnja točka primi podatke, s izvorišnom adresom udaljene točke i podacima proslijeđenima po referenci kao bajtovi.
src je izvorišna adresa krajnje točke. Ako nije navedena, biblioteka će je dodijeliti krajnjoj točki.
dest je odredišna adresa krajnje točke. Ako se krajnja točka stvara iz new_service_callback, ovo mora biti navedeno i mora se podudarati s izvorišnom adresom udaljene krajnje točke. Ako je krajnja točka registrirana lokalno, prije najave, odredišnu adresu će dodijeliti biblioteka kada se krajnja točka poveže.
- is_ready() bool¶
Vraća True ako je krajnja točka spremna za slanje (tj. ima i izvorišnu i odredišnu adresu)
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Šalje poruku udaljenom procesoru preko ove krajnje točke.
Argumenti su:
buffer je sadržaj poruke (bilo koji objekt koji podržava protokol međuspremnika, npr.
bytes,bytearrayilistr).src je izvorišna adresa krajnje točke poruke. Ako nije navedena, koristi se izvorišna adresa na koju je krajnja točka povezana.
dest je odredišna adresa krajnje točke poruke. Ako nije navedena, koristi se odredišna adresa na koju je krajnja točka povezana.
timeout određuje vrijeme u milisekundama čekanja na slobodni međuspremnik. Prema zadanom, funkcija je blokirajuća.
Klasa RemoteProc¶
Upozorenje
Na STM32H7 druga AMP jezgra je Cortex-M4 koju nije moguće zaustaviti i zatim ponovno pokrenuti na licu mjesta. Pozivanje RemoteProc.stop() ili RemoteProc.shutdown() na toj platformi stoga izvodi potpuni reset sustava umjesto zaustavljanja pojedinačne jezgre.
- class openamp.RemoteProc(entry: str | int)¶
Objekt RemoteProc pruža podršku za upravljanje životnim ciklusom procesora (LCM), poput učitavanja ugrađenog programa (firmware) te pokretanja i zaustavljanja udaljene jezgre.
Argument entry može biti putanja do slike ugrađenog programa (firmware), u kojem slučaju se ugrađeni program učitava iz datoteke u njegovu ciljnu memoriju, ili adresa ulazne točke, u kojem slučaju ugrađeni program mora već biti učitan na zadanu adresu.