Domanda:
Sono disponibili dispositivi programmabili per linguaggi più moderni?
arussell84
2011-05-21 12:01:20 UTC
view on stackexchange narkive permalink

Perdonate la mia ingenuità, ma sembra che la maggior parte dei dispositivi programmabili (FPGA, PLC, PIC, ecc.) siano programmabili utilizzando i linguaggi C o C ++, o una variante di uno di questi. Esistono dispositivi là fuori che utilizzano qualcosa come D, Mozilla Rust o Google Go? Mi rendo conto che le ultime due, soprattutto, sono lingue immature; ma sicuramente qualcuno, da qualche parte, ha rilasciato un prodotto sperimentale.

Qualcuno ha qualche suggerimento?

Ti piace Forth? È un linguaggio popolare per i dispositivi incorporati. C'è stato un recente articolo [qui] (http://www.forth.org/lost-at-c.html) e una discussione su Hacker News [qui] (http://news.ycombinator.com/item?id= 2574204), con commenti molto istruttivi. Al momento, però, non ho tempo per portare nulla di tutto ciò qui. Se qualcuno vuole trasformare quell'informazione in una risposta, sarei molto grato!
@reemrevnivek In realtà ho visto quell'articolo oggi, e non credo che Forth si adatti ai miei gusti personali, ma sicuramente grazie per averlo condiviso!
@arussell - Sì, non ero sicuro che si adattasse allo stampo di D, Rust o Go.
Cosa porterebbero i linguaggi moderni alla programmazione (realmente) incorporata? PS. In questo contesto per programmazione incorporata intendo la programmazione in cui un Cortex-M3 è una bestia dalle prestazioni urlanti e si utilizzano solo SRAM e Flash su chip.
correlati: [Quali sono le buone opzioni per iniziare la programmazione hardware utilizzando linguaggi di alto livello?] (http://stackoverflow.com/questions/366991/what-are-good-options-for-beginning-hardware-programming-using-high -level-linguag)
correlate: [Quali sono i linguaggi interattivi disponibili che funzionano in una memoria minuscola?] (http://stackoverflow.com/questions/1082751/what-are-the-available-interactive-languages-that-run-in-tiny-memory )
@davidcary Stavo cercando più risposte sui linguaggi di programmazione di sistema piuttosto che sui linguaggi interpretati o di livello superiore, ma ci sono ancora alcune buone informazioni in quei collegamenti. Grazie.
@jpc Mi sembra che invece di essere sinceramente curioso, tu stia semplicemente insinuando che non sei interessato alle risposte alla mia domanda. Se non ti interessa nient'altro che C, puoi semplicemente ignorare la mia domanda. In caso contrario, sarei felice di rispondere a domande più specifiche.
@arussell84: Sono sinceramente interessato alla risposta sia alla tua domanda che alla mia. Inoltre: credimi che sono davvero stufo del semplice C nella programmazione incorporata. Credo che ci sia molto da migliorare nel campo dei linguaggi di programmazione incorporati, ma non credo che i linguaggi di programmazione "normali" per i grandi computer offriranno molto di questo miglioramento. Questo è il motivo per cui ho chiesto come ti aspetti che ti aiutino.
@jpc In tal caso, abbiate pazienza, poiché i commenti possono contenere solo così tanti caratteri. D dovrebbe essere un miglioramento di C ++. Non intendo un livello superiore come C # o Java. Può ancora gestire manualmente la memoria e utilizzare i puntatori. Leggi la [panoramica D] (http://www.digitalmars.com/d/2.0/overview.html). Due caratteristiche che mi interessano particolarmente sono le chiusure e le funzioni anonime. Go and Rust credo che potrebbe diventare popolare, ma potrebbe non essere effettivamente adatto per dispositivi embedded. Troppo presto per dirlo. Objective-C potrebbe funzionare, però; Non ho guardato.
Ho sempre avuto l'impressione che le chiusure senza raccolta dei rifiuti fossero un problema. Forse dovresti guardare i blocchi (una recente funzionalità LLVM di Apple). Puoi controllare Objective-C poiché ha alcune belle sostituzioni per le chiusure (il protocollo di destinazione / azione) e credo che una libobjc compatibile con il sistema integrato non sarebbe molto lavoro. OTOH quando inizi a scrivere cose come server HTTP o simili (dove credo che l'associazione dinamica e le lingue moderne siano più utili), allora finirai rapidamente la memoria con o senza un linguaggio moderno.
Nove risposte:
starblue
2011-05-21 17:12:20 UTC
view on stackexchange narkive permalink

Non hai bisogno di dispositivi diversi per usare queste lingue, hai solo bisogno del sistema software appropriato.

I problemi principali per cui questo non viene fatto più spesso sono:

  • Questi linguaggi in genere richiedono più risorse (memoria, runtime) per lo stesso compito. Per grandi volumi lo sforzo ridotto nella programmazione sarebbe più che compensato da costi hardware più elevati.

  • La maggior parte dei linguaggi di livello superiore richiede un'allocazione dinamica della memoria con garbage collection, cosa difficile da fare in un'impostazione in tempo reale.

  • È più difficile ottenere sviluppatori incorporati per questi linguaggi.

Detto questo, ci sono cose come Real-Time Java, che vengono utilizzate in sistemi embedded reali.

Pur non fornendo tutti i dettagli che stavo cercando, la tua risposta alla fine mi ha portato alla mia risposta. Prendendo un PIC come esempio, ci sono più passaggi tra il processo di scrittura del codice sul computer e l'esecuzione del codice sul PIC. Devi compilarlo e caricarlo, e ci sono diversi modi per farlo anche questo. Per, diciamo, scrivere con D per un PIC, qualcuno dovrebbe scrivere un equivalente di [SDCC] (http://sdcc.sourceforge.net/) per D.
Punto aggiuntivo: nei sistemi embedded, (specialmente quelli piccoli senza SO ecc.) Molte delle caratteristiche (e dei costi generali / penalità) dei linguaggi di livello più alto / più moderni sono nella migliore delle ipotesi irrilevanti o effettivamente indesiderabili.
Dr. Watson
2011-05-21 17:18:43 UTC
view on stackexchange narkive permalink

Ci sono progetti open source che lavorano su questi obiettivi. C'è un progetto per Ada sugli MCU Atmel (anche se non sono riuscito a farlo funzionare). Uno dei miei colleghi sta programmando il suo MCU 68HC11 con una versione ridotta di Ruby su cui ha lavorato lui stesso. E c'è una società, BlueSpec, che ha un nuovo HDL per FPGA / ASIC basato su Haskell. Ma non è uno strumento a cui la maggior parte avrebbe accesso.

I fornitori tendono a rimanere fedeli a C perché c'è un vasto pubblico per C ed è ampiamente accettato. Allo stesso modo, per FPGA / PLD, VHDL / Verilog sono ampiamente accettati e collaudati. Invece di dover supportare molti linguaggi diversi, la maggior parte preferisce concentrarsi sui propri chip, cercando di migliorare le prestazioni dei propri compilatori C e offrire strumenti migliori per la configurazione e la gestione delle risorse sui propri chip. Sono d'accordo con questo approccio anch'io. Preferisco di gran lunga che Texas Instruments migliori i propri strumenti per la configurazione di periferiche avanzate sui propri chip piuttosto che implementare la metaprogrammazione avanzata dei modelli sul proprio compilatore C ++ minimo.

Gorgen
2011-05-21 14:08:15 UTC
view on stackexchange narkive permalink

Sei perdonato.

Il motivo per cui C, e meno C ++, (tra l'altro linguaggio come VHDL) viene utilizzato per questo tipo di dispositivi è che è facile tradurre dai costrutti del linguaggio all'hardware sottostante. Il C è considerato lingua franca, compreso da molti e trasferire una nuova lingua sul dispositivo, specialmente se leggere / scrivere nei registri è scomodo, non vale lo sforzo se la lingua non è molto più brava nell'esprimere costrutti utili.

Gli esempi che usi come linguaggi più nuovi e più brillanti, D, per esempio, potrebbero essere candidati per un linguaggio di "basso livello" se più programmatori lo usano. D è pubblicizzato come il moderno C ++ senza tutti i compromessi con C e implementato fin dall'inizio. Purtroppo senza tutte le librerie C ++. Penso che tu possa chiamare le librerie C da D.

La domanda non è se è più recente, la domanda è se sono strumenti migliori. Per quanto posso vedere, non è così.
modifica
Quando ho scritto codice incorporato (in C), ho desiderato macro / modelli migliori di quelli che C può offrire. Poiché è un costrutto in fase di compilazione, non ha davvero nulla a che fare con l'hardware sottostante. Ma molto più complicato da implementare in un compilatore.

Potresti usare un macro-processore esterno, come m4. È molto potente.
Mi sono ritrovato a desiderare la capacità di sovraccaricare le funzioni inline in base al fatto che il compilatore possa valutare un parametro come costante. In una funzione come "alza x alla potenza y", varrebbe la pena per una versione inline con potenze costanti in casi speciali da 0 a 3, e chiamare una funzione di libreria per altre potenze. Tuttavia, non varrebbe la pena generare codice inline per verificare tali costanti. Sfortunatamente, non conosco anzi compilatori, per qualsiasi linguaggio, in grado di distinguere i sovraccarichi in base a valori costanti.
@supercat: Puoi fare la specializzazione del template in C ++ per risolvere alcuni di questi problemi, ma quando lo fai i tuoi argomenti devono essere nell'istanziazione del template "<>" invece degli argomenti della funzione "()", che non è l'ideale.Non puoi avere la tua torta e mangiarla anche tu.
Leon Heller
2011-05-21 14:06:00 UTC
view on stackexchange narkive permalink

I dispositivi sono stati progettati per utilizzare altri linguaggi in modo efficiente, come LISP / Scheme, Forth e Java. Non credo che siano stati progettati per quei linguaggi che hai citato, forse non sono adatti per i sistemi embedded (a parte D che dovrebbe funzionare in modo efficiente su qualsiasi cosa progettata per C / C ++). Potrebbero, presumibilmente, essere implementati su qualsiasi MCU adatto, se qualcuno volesse farlo.

Forse Go e Rust alla fine non saranno adatti per la programmazione embedded. Sono un po 'nuovi, immagino, ma affermano di essere linguaggi di programmazione di sistemi, motivo per cui li ho elencati come esempi. Ci sono state anche alcune notizie riguardo questi linguaggi recentemente nei circoli di programmazione, quindi ho provato a scegliere linguaggi che non fossero troppo oscuri.
jamesotron
2011-05-24 09:18:51 UTC
view on stackexchange narkive permalink

C'è sempre netduino, che ti consente di scrivere codice in .NET.

Non sono un fan di .NET, ma questo è più o meno il tipo di cosa che stavo cercando. =)
Peter Gibson
2014-06-19 16:50:32 UTC
view on stackexchange narkive permalink

Dai un'occhiata a Micro Python http://micropython.org/

Micro Python è un'implementazione snella e veloce del linguaggio di programmazione Python 3 che è ottimizzato per funzionare su un microcontrollore. La scheda Micro Python è un piccolo circuito elettronico che esegue il linguaggio Micro Python.

È stato finanziato con successo come progetto kickstarter nel dicembre 2013 e hanno un tavola di riferimento.

Philippe
2011-05-21 18:03:21 UTC
view on stackexchange narkive permalink

Stai cercando un microprocessore. Intel li vende, così fanno AMD e ARM. Puoi usare qualsiasi lingua di programmazione su questi dispositivi.

Per quanto riguarda gli FPGA: la tua scelta di linguaggi è limitata. Questo perché hai bisogno di uno strumento di sintesi che traduca il tuo codice in una netlist. Oltre a VHDL, Verilog e (C limitato), puoi utilizzare linguaggi più moderni come MyHDL (basato su Python) o Bluespec (simile a Haskell).

I microcontrollori sono semplicemente microprocessori a bassa potenza con periferiche integrate. Non è possibile eseguire alcun vecchio linguaggio di programmazione su un FPGA (con soft core, credo che stiamo assumendo) o microcontrollore perché sono troppo lenti, troppo piccoli e di livello troppo basso perché altri linguaggi funzionino bene (e, di conseguenza, non hanno compilatori scritti per quei linguaggi Microprocessore vs microcontrollore non è la distinzione che ci interessa qui.
Non ho detto microcontrollore, ho detto microprocessore, che include microcontrollori, ma anche il tuo normale processore Intel Core i7. Per quanto riguarda gli FPGA con soft core o hard core; sono disponibili in molte dimensioni diverse e sì, possono funzionare in qualsiasi lingua. Gestiscono un intero sistema operativo Linux.
La tua citazione di Intel mi ricorda quel vecchio chip: 8052AH-BASIC.http://www.dusko-lolic.from.hr/i8052fract/sbc1.jpg.Aveva un interprete BASIC in ROM!
Johan
2011-05-24 18:47:53 UTC
view on stackexchange narkive permalink

In primo luogo i tuoi esempi sono piccoli dispositivi che hanno un insieme limitato di risorse, quindi i vecchi linguaggi vicini all'hardware come ce vhdl fanno bene il lavoro.

I nuovi linguaggi "interessanti" hanno bisogno di più risorse per funzionare bene, quindi la mia ipotesi è che ciò che stai cercando arriverà abbastanza presto poiché l'MCU sta diventando più potente nel tempo.

Il punto è che la maggior parte degli MCU: s è ancora programmata in C, e il ragazzo in gamba ha appena iniziato a giocare con C ++ su quei dispositivi.

Ma se dai un'occhiata all'MCU basato su ARM a 32 bit che ha molte più risorse rispetto al vecchio 8 bit una volta che può trovare progetti folli come eLua, che cerca di eseguire il linguaggio di script lua su un mcu basato su Cortex-M3 ...

Quindi ci arriveremo, ma lo farà impiegano un paio di anni in più e non penso che nessuno di quei folli progetti sia pronto per l'uso in produzione (ancora), ma alcuni lo saranno poiché è più veloce si sviluppano in linguaggi con un livello di astrazione più alto.

Unslander Monica
2014-10-06 21:23:20 UTC
view on stackexchange narkive permalink

Esiste un ' applicazione proof-of-concept in esecuzione sotto Rust sui microcontrollori ARM STM32F4xx. Le sorprendentemente piccole modifiche necessarie per portare Rust sono disponibili in questo fork di Rust.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...