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.

deinit() None

Tuhoaa endpointin ja vapauttaa kaikki sen resurssit.

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, bytearray tai str).

  • 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.

start() None

Käynnistää etäprosessorin.

stop() None

Pysäyttää etäprosessorin. Tarkka toiminta riippuu alustasta.

shutdown() None

Sammutus pysäyttää etäprosessorin ja vapauttaa kaikki sen resurssit. Tarkka toiminta riippuu alustasta, mutta tyypillisesti se katkaisee etäytimen virran ja kellot. Tätä funktiota käytetään myös viimeistelijänä (eli sitä kutsutaan, kun RemoteProc-olio kerätään roskien keruussa).