openamp — tarjoaa standardin epäsymmetrisen moniprosessoinnin (AMP) tuen¶
openamp-moduuli tarjoaa MicroPythonille standardin prosessorien välisen viestintäinfrastruktuurin. Moduuli hoitaa kaikki OpenAMP:n yksityiskohdat, kuten jaetun resurssitaulukon pystyttämisen, vringien alustamisen ja niin edelleen. Se tarjoaa rajapinnan RPMsg-väyläinfrastruktuurin käyttöön Endpoint-luokan avulla sekä prosessorin elinkaaren hallinnan (LCM) tuen, kuten laiteohjelmiston lataamisen ja etäytimen käynnistämisen ja pysäyttämisen, RemoteProc-luokan kautta.
Esimerkkikäyttö:
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")
Funktiot¶
- openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None¶
Asettaa uuden palvelun takaisinkutsun.
ns_callback-argumentti on funktio, jota kutsutaan, kun etäprosessori ilmoittaa uusista palveluista. Tällöin isäntäprosessori voi joko luoda ilmoitetun endpointin, jos kyseinen palvelu on tuettu, tai jättää sen huomiotta, jos sitä ei tueta. Jos tätä funktiota ei aseteta, isäntäprosessorin tulisi rekisteröidä endpoint ensin paikallisesti, jolloin se sidotaan automaattisesti, kun etäpää ilmoittaa palvelusta.
Endpoint-luokka¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
Luo uuden RPMsg-endpointin. Endpoint on kaksisuuntainen viestintäkanava kahden ytimen välillä.
Argumentit ovat:
name on endpointin nimi.
callback on funktio, jota kutsutaan, kun endpoint vastaanottaa dataa; sille välitetään etäpään lähdeosoite ja data tavuina viittauksena.
src on endpointin lähdeosoite. Jos sitä ei anneta, kirjasto määrittää endpointille osoitteen.
dest on endpointin kohdeosoite. Jos endpoint luodaan new_service_callbackista, tämä on annettava ja sen on vastattava etäendpointin lähdeosoitetta. Jos endpoint rekisteröidään paikallisesti ennen ilmoitusta, kirjasto määrittää kohdeosoitteen, kun endpoint sidotaan.
- is_ready() bool¶
Palauttaa True, jos endpoint on valmis lähettämään (eli sillä on sekä lähde- että kohdeosoite).
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
Lähettää viestin etäprosessorille tämän endpointin kautta.
Argumentit ovat:
buffer on viestin hyötykuorma (mikä tahansa puskuriprotokollaa tukeva olio, esim.
bytes,bytearraytaistr).src on viestin lähde-endpointin osoite. Jos sitä ei anneta, käytetään lähdeosoitetta, johon endpoint on sidottu.
dest on viestin kohde-endpointin osoite. Jos sitä ei anneta, käytetään kohdeosoitetta, johon endpoint on sidottu.
timeout määrittää millisekunteina ajan, jonka verran odotetaan vapaata puskuria. Oletuksena funktio on estävä.
RemoteProc-luokka¶
Varoitus
STM32H7:llä toinen AMP-ydin on Cortex-M4, jota ei voi pysäyttää ja sitten käynnistää uudelleen paikallaan. RemoteProc.stop()- tai RemoteProc.shutdown()-kutsu suorittaa tällä alustalla siksi täydellisen järjestelmän nollauksen ydinkohtaisen pysäytyksen sijaan.
- class openamp.RemoteProc(entry: str | int)¶
RemoteProc-olio tarjoaa prosessorin elinkaaren hallinnan (LCM) tuen, kuten laiteohjelmiston lataamisen sekä etäytimen käynnistämisen ja pysäyttämisen.
entry-argumentti voi olla polku laiteohjelmiston levykuvaan, jolloin laiteohjelmisto ladataan tiedostosta sen kohdemuistiin, tai sisäänkäyntipisteen osoite, jolloin laiteohjelmiston on jo oltava ladattuna annettuun osoitteeseen.