Nota : sebbene questa domanda riguardi i microcontrollori, è al suo interno una domanda Java e quindi credo che possa essere risolta da qualsiasi Java stanco della battaglia guru.
Mi sono imbattuto in questo blog che parlava di sun.misc.Unsafe
e Stavo cercando di capire tutte le sue capacità per vedere se fosse appropriato per un mio progetto di hobby.
Alla vista di 30.000 piedi, sto provando a programmare un chip ARM (Arduino Due - un MCU ARM SAM3X8E) per pilotare alcune periferiche IO (flash alcuni LED, servo drive, ecc.) su un semplice dispositivo elettronico. Per un buon sport, vorrei amare per farlo in puro Java, se possibile. Fino a leggere quell'articolo, non pensavo nemmeno che fosse possibile, e ho pensato che avrei dovuto fare la maggior parte se non tutta la programmazione in C. Perché questo sapore di ARM può supportare Linux, in particolare uno stile unikernel ridotto al minimo "di Linux, mi piacerebbe scrivere il mio programma di controllo interamente in Java e distribuirlo in una posizione (ad esempio /opt/myapp
) su un'immagine Linux che posso quindi visualizzare sul chip ARM. Con un po 'di complicazioni / hacking, dovrei essere in grado di ottenere il chip ARM per eseguire l'app Java quando il dispositivo si accende.
La mia domanda
Per pilotare le periferiche IO del mio dispositivo, ho bisogno di accedere a specifici indirizzi di memoria che esisteranno al di fuori del processo JVM che esegue la mia app. Fino ad ora avevo l'impressione che le JVM " sandbox " le loro app residenti, impedendo loro di accedere direttamente a qualsiasi cosa nella memoria di sistema. Quindi il mio piano doveva scrivere un po 'di codice C (che in realtà guida le periferiche, lampeggia i LED, ecc.) E poi fare in modo che la mia app invochi il codice C attraverso JNI.
Ma se leggo correttamente il blog, sembra che sun.misc.Unsafe
mi dia accesso alla memoria di sistema esterna della JVM. Se questo è vero, allora tecnicamente non ho bisogno di alcun codice C. Certo, sto commettendo ogni sorta di sicurezza no-no, rendendo il mio codice non portatile, ecc. Ma va bene: questo è solo un progetto per hobby che gira su una piattaforma specifica che non intendo cambiare.
Quindi chiedo: sto comprendendo correttamente Unsafe
, e se sì, ci sono altri avvertimenti / limitazioni / limitazioni che dovrei prendere in considerazione mentre lo uso?