Voglio iniziare a creare dispositivi e leggo di microcontrollori e altre cose su Internet. Mi chiedo se ci siano altri linguaggi con cui programmare microcontrollori oltre a C.
Voglio iniziare a creare dispositivi e leggo di microcontrollori e altre cose su Internet. Mi chiedo se ci siano altri linguaggi con cui programmare microcontrollori oltre a C.
I chip non usano affatto C direttamente. Hanno set di istruzioni che variano notevolmente tra le diverse architetture.
Come astrazione di livello molto basso di questi set di istruzioni, la maggior parte dei produttori fornisce un assemblatore, attraverso il quale puoi tradurre i programmi scritti nel relativo linguaggio assembly (che è più o meno una forma più leggibile dalle persone ) in formato binario che puoi caricare sul tuo chip.
Al livello successivo, ci sono linguaggi come C. C è di gran lunga il linguaggio più dominante per la programmazione di microcontrollori a questo livello. Per alcune architetture, troverai anche lo strano compilatore Pascal, BASIC o forse Fortran.
In teoria, l'unica cosa di cui hai bisogno per usare un dato linguaggio su una data architettura è un compilatore adatto (sebbene alcuni , come Java, C # e così via, di solito dipendono dagli ambienti di runtime e per la maggior parte degli UC sono proibitivamente assetati di risorse). In pratica, non ci sono molti compilatori disponibili.
Come abbiamo detto us2012, un µc non esegue affatto il linguaggio C. Funziona invece con il linguaggio macchina che è una rappresentazione binaria del set di istruzioni di µc, con campi per un codice operativo (cosa fare) e specificatori di registro e / o indirizzi (da dove vengono recuperati e / o memorizzati i dati). Il linguaggio assembly è una rappresentazione simbolica di questo linguaggio macchina binario.
Nel caso del linguaggio C, queste istruzioni macchina sono generate da un compilatore C, che quasi sempre gira su un computer separato da µc (un'eccezione è Linux incorporato, che include il compilatore gcc, che esegue su un µc con risorse sufficienti per eseguire un compilatore).
Quando il compilatore viene eseguito su un PC, questo è noto come cross-compilazione. Ogni file sorgente separato contenente le istruzioni in linguaggio C viene compilato separatamente e l'output di ciascuno viene combinato in un unico file scaricabile dal programma linker. Questo file scaricabile contiene le istruzioni in linguaggio macchina menzionate sopra e può essere eseguito direttamente su µc.
Se vuoi eseguire una lingua diversa su µc, avrai bisogno di un compilatore diverso per quella lingua. Tuttavia ci sono un certo numero di linguaggi che non sono compilati in codice macchina, ma invece sono compilati in bytecode; questi non possono essere eseguiti direttamente da µc ma devono invece essere eseguiti da un interprete in esecuzione su µc (una variazione è compilare i bytecode in linguaggio macchina la prima volta che vengono eseguiti dall'interprete).
Un altro linguaggio candidato per la programmazione di microcontrollori è Ada. Offre ottime strutture per la programmazione di basso livello, oltre a una migliore rilevazione di alcuni tipi di errore prima di arrivare alla fase di esecuzione del programma, che trovo mi aiuti a sviluppare notevolmente più velocemente rispetto a C. L'eseguibile risultante può essere altrettanto piccolo come C, non così sorprendente quando ti rendi conto che la maggior parte del compilatore Gnat Ada è lo stesso ottimizzatore e generatore di codice del più comune compilatore C (gcc).
Un altro vantaggio è che il codice può essere molto di più leggibile di C; un altro modo per rendere i problemi più facili da eliminare.
Oltre ai microcontrollori più piccoli, offre anche buone funzionalità orientate agli oggetti e multitasking; l'equivalente di un RTOS è integrato nella lingua.
Due aspetti negativi:
Ada ha una reputazione immeritatamente scarsa ereditata da una versione di 30 anni che difficilmente incontrerai oggigiorno: tu può sentire reazioni piuttosto emotive contro di esso. Ada-2005 è un linguaggio molto diverso ...
E non tutti i microcontrollori hanno un compilatore e una toolchain Ada. Due popolari che lo fanno, sono Atmel AVR (così puoi programmare le tue schede Arduino in Ada) e la serie Texas Instruments MSP430. Sono disponibili anche build Gnat per molte varietà di processori ARM, inclusa la distribuzione Debian Raspberry Pi.
Qualsiasi altro target di GCC può potenzialmente supportare Ada, anche se la creazione di GCC di solito non è un progetto banale ...
Come dicono le altre risposte, la maggior parte degli UC viene fornita con toolchain che supportano il C e altri linguaggi simili, perché i linguaggi più grandi, specialmente quelli con garbage collection, sono molto affamati di risorse.
Ma, nello spirito della Legge di Atwood: "Alla fine tutto sarà portato su Javascript", ti do Espruino, "Il primo microcontrollore JavaScript al mondo per principianti o esperti.":
Come uno degli altri utenti ha commentato sotto la tua domanda, Arduino è molto popolare e versatile in termini di progetti e usi. Ha un proprio linguaggio che è molto simile al C ... per esempio, dichiara librerie, variabili e effettua chiamate di funzioni. Tuttavia, ha alcune delle sue funzioni intrinseche per le quali dovrai imparare la sintassi.