Come sono programmate le macchine di tutti i giorni?


147

Come sono programmate le macchine di tutti i giorni (non tanto computer e dispositivi mobili quanto elettrodomestici, orologi digitali, ecc.)? Che tipo di codice viene inserito nella programmazione di un distributore automatico Coca-Cola? In che modo la mia caffettiera accetta un orario pre-programmato e inizia a preparare una tazza di caffè ore dopo, quando arriva quel momento?

Questi tipi di macchine hanno al loro interno dei sistemi operativi o è qualcosa di ancora più semplice? Sono scritti in Assembly, C o in qualche altra lingua?

E vorrei davvero trovare alcune risorse che elencano questi sistemi operativi o sistemi di codice sottostanti, possibilmente anche con il codice sorgente, se possibile. Se qualcuno fosse a conoscenza di una tale risorsa (la ricerca non ha prodotto nulla per me), sarebbe fantastico.


12
Domanda fantastica! Mi sono chiesto la stessa cosa me stesso.
Jonathan Sterling,

7
Fai qualche ricerca / ricerca su "sistemi integrati" (ho anche aggiunto il tag per te).
mu è troppo corto l'

InRe i voti stretti: non vedo questo come materiale per i programmatori perché si tratta di programmazione . D'altra parte, potrebbe andare bene sul sito dell'elettronica SE, semplice perché ci saranno più specialisti. La risposta, ovviamente, è una parte di tutto quanto sopra. Devi scegliere una classe più piccola prima di poter ottenere una risposta.
dmckee --- ex-moderatore gattino

La sua domanda molto ampia che copre almeno 3 discipline ingegneristiche e molte sfumature tra di loro.
Jodrell,

FWIW, potresti essere interessato a giocare con una piattaforma di microcontrollori come Arduino (~ $ 30) arduino.cc .
piroscafo25

Risposte:


47

Gran parte di ciò di cui stai parlando sono sistemi basati su embedded in cui C è un lusso spesso non disponibile. Non hanno software nel senso tradizionale. Il più delle volte il software è scritto in C, assembly o persino nel codice macchina. C e ASM richiedono che i compilatori siano scritti per usarli per quella piattaforma. Il codice macchina è scritto come binario senza compilatore.

La tua caffettiera e i sistemi più semplici del genere non portano un sistema operativo. Si caricano semplicemente da un indirizzo iniziale in memoria e si inserisce il codice lì. Spesso questi sistemi hanno il loro "codice" inserito nelle EEPROM che fungono da disco rigido del sistema. Svita il codice dopo aver bruciato i balli, butta via i gettoni e rigira il codice sul gettone, e ricomincia. Esistono chip FPGA più recenti che i dispositivi di fascia alta utilizzano per semplificare i test, la distribuzione, ecc., Ma sono la stessa cosa.

Le macchine per la coca-cola, i router, ecc. In genere usano un sistema operativo in tempo reale come QNX, EMBOS o talvolta RTlinux se sei fortunato. La maggior parte di questi sono sistemi operativi proprietari concessi in licenza per un sacco di soldi, ma hanno compilatori C, driver per lavorare con hardware, ecc.

http://www.qnx.com/

http://www.segger.com/cms/embos.html

http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH

RTLinux


35
La gente codifica in binario? Gli assemblatori sono così stupidamente semplici da scrivere che trovo difficile da credere. Hai una fonte per questo? Inoltre, questa risposta dà la falsa impressione che tutti i sistemi contengano un microprocessore che esegue codice. Sebbene questo stia diventando sempre più popolare poiché i microcontrollori e la EEPROM (che rendono più facile il debug e l'aggiornamento) diventano meno costosi, non vale comunque la pena per sistemi molto economici o che non sono cambiati molto negli ultimi 20 anni. Ad esempio, alcuni orologi digitali.
BlueRaja - Danny Pflughoeft l'

6
Questo è semplicemente troppo forte. Non è necessario ospitare il compilatore sulla destinazione. I cross-compilatori sono molto comuni nella programmazione integrata.
dmckee --- ex-moderatore gattino

12
Una macchina da coke che esegue QNX? WTF - questo è un altro tipo di coca cola! E sì, esiste un compilatore C per ogni singola piattaforma attualmente disponibile in volume. Nessuno vuole scrivere assembly, la mancanza di C sarebbe un enorme handicap. (Alcuni compilatori non sono molto bravi , scontato.)
Potatoswatter,

8
Inoltre, la EEPROM per definizione può essere riscritta più di 100000 volte. Le memorie write-once sono obsolete; tutti i microcontrollori popolari oggi hanno Flash. FPGA è un mercato completamente diverso dall'MCU di fascia bassa ... non hai idea di cosa stai parlando.
Potatoswatter,

7
Ho un amico che lavora su distributori automatici piuttosto complessi. Hanno radio cellulari, monitorano l'inventario, tengono traccia della temperatura, riportano i dati finanziari e inviano chiamate HTTP ai server per aggregare tutti questi dati in modo da poter tracciare su tutte le macchine. E sì, questi marchi di macchine utilizzano un sistema operativo incorporato. Penso che stiano usando RTLinux usando C. Quindi sì, anche il modesto distributore automatico sta diventando abbastanza complesso da giustificare il sistema operativo incorporato.
Chubbsondubs

29

Usano i microcontrollori, l'8051 è quello classico. Questi sono core a 8 o 16 bit, raramente hanno un sistema operativo. Il programmatore scrive il codice per inizializzare le periferiche integrate e implementare i gestori di interrupt. Le lingue utilizzate sono assembly e C. I lavori di debug difficili richiedono un emulatore in-circuit.

C'è molto spazio in crescita oltre a questo, con core integrati a 32 bit (ARM è il gorilla da 100 libbre) che avvia una versione integrata di Linux e / o Java JVM.


5
È un gorilla piuttosto piccolo, ma immagino che i vincoli di potere siano piuttosto importanti con grandi scimmie incorporate;)
Piskvor ha lasciato l'edificio l'

Grazie! La tua risposta mi è stata utile e ti ho dato un voto.
Josh Leitzel,

Anche i chip ARM stanno entrando nella fascia bassa ... con prezzi <1USD, ingombro 2x2mm.
domen

24

Questi sono sistemi integrati e verrebbero programmati usando un linguaggio di livello molto basso come C o assembly. In generale un tale sistema funzionerà senza un sistema operativo, anche se alcune nuove "macchine di uso quotidiano" come lettori DVD e router wireless a raggi blu eseguono il loro codice su un sistema operativo basato su unix.


Aggiornare

Sulla base di quanto affermato da altri, molti moderni sistemi embedded hanno anche un sapore di windows. Dipende dall'applicazione. Inoltre, vi è una tendenza in molti spazi a funzionare su una piattaforma più potente con un sistema operativo, a gestire casi come i lettori Blu-ray che necessitano di eseguire Java e altri casi in cui l'utente finale desidera più funzionalità.


Per chiarire, Bluray utilizza Java.
Andrew Marshall,

6
Forse, ma i giocatori attuali usano Linux e sono scritti in C / C ++
Justin Ethier l'

Registratori di cassa e pompe di benzina e simili stavano facendo funzionare dos (alcuni marchi), purtroppo alcuni di quelli gestiscono finestre ora (negozio di alimentari o altre linee di self checkout). Il desiderio di avere programmi televisivi che ti squillano mentre pompi il tuo gas e che balla baloney sullo schermo quando non lo è, ha portato a più potenza. Allo stesso modo il coke e le macchine per l'acqua con il grabber a due assi.
old_timer

@Justin, beh sì certo, Java ha bisogno di sedersi in cima a qualcosa per funzionare. Il mio punto era che utilizza un linguaggio di alto livello (relativamente) come Java.
Andrew Marshall,

@Andrew: E su quale sistema operativo esegue l'interprete Java nel blue ray? E in che lingua è scritto quel sistema operativo?
Gunther Piez,

18

Pensiamo al processore sul desktop. Tutto ciò che fa è eseguire le istruzioni della macchina e, di per sé, non è veramente preoccupato per "sistemi operativi" o "programmi".

Accendi il computer, il processore punta alla prima istruzione e inizia l'esecuzione.

Sul desktop, inizia l'esecuzione del "sistema operativo". Ma non c'è motivo per cui il processore non possa eseguire alcuna serie di istruzioni scelte. (Questo potrebbe non essere molto utile, dal momento che vorresti comunque visualizzare i risultati sullo schermo e che la funzionalità risieda nel sistema operativo.) Allo stesso tempo, se le istruzioni della tua macchina fossero costituite dai giusti codici operativi in ​​modo che il processore potesse emettere la sequenza corretta di segnali per dipingere un'immagine sul monitor, tanto meglio. Nessun sistema operativo necessario.

I desktop fanno così tante cose che generalmente richiediamo l'astrazione di un sistema operativo. Ma alla base, tutto ciò che il processore fa è eseguire le istruzioni.

Lo stesso vale per il processore di macchine per coke e macchine da caffè. Tutto ciò che fa è eseguire le istruzioni.

Bene, scrivere le istruzioni della macchina bit per bit è noioso. Quindi, proprio come con i desktop, in genere scriviamo codice in C, che viene quindi compilato in codice macchina. Quel codice macchina viene caricato sul processore incorporato e viene eseguito.

I sistemi integrati fanno così poco che non hanno bisogno di sistemi operativi completi. Un microcontrollore potrebbe avere 8 o 16 pin sul chip, rispetto ai decine di pin presenti nel normale socket della CPU.

Quindi il flusso di lavoro è scrivere del codice (diciamo, in C), compilarlo sul tuo computer desktop. Quel compilatore genera il codice macchina per il chip incorporato. Quindi quel codice viene caricato sul microprocessore (e per farlo è necessario un hardware speciale). Quindi si alimenta il chip e inizia l'esecuzione delle istruzioni. Semplice!


2
Grazie mille! Se avessi potuto scegliere un'altra migliore risposta, sarebbe stata tua. L'ho trovato molto utile. +1
Josh Leitzel,

I processori moderni sono sorprendentemente molto preoccupati per i sistemi operativi. Forniscono funzionalità come Memory Management Unit , istruzioni e modalità privilegiate e virtualizzazione hardware . I moderni sistemi operativi dipendono da alcune di queste funzionalità. Questo è il motivo per cui non puoi ( facilmente ) eseguire Linux su piccoli microcontrollori.
Mira Weller,

12

Molti dispositivi che svolgono una funzione specifica non contengono alcun "codice". Svolgono le loro funzioni tramite le proprietà dei loro componenti elettronici. I sistemi più avanzati, che possono svolgere molte funzioni diverse o devono essere facilmente aggiornabili, conterranno un microcontrollore e una sorta di "sistema operativo". Poiché questi hanno ancora alcuni limiti alla loro funzionalità, il sistema operativo sarà semplice e appositamente progettato. Sempre più avanzato, il dispositivo conterrà qualcosa di simile a un computer. Avrà un sistema operativo più complicato in grado di comunicare con diverse parti del sistema. Infine, raggiungi dispositivi come gli smartphone, che contengono un sistema operativo completo in grado di eseguire il codice a livello di utente e avere un input dell'utente molto maggiore rispetto ai dispositivi più semplici. Però, anche i processori moderni sono essenzialmente circuiti elettrici molto grandi. Ogni istruzione riconosciuta dalla CPU farà sì che un circuito diverso venga utilizzato per eseguire quella funzione.

Ecco alcune pagine di Wikipedia che potrebbero interessarti:

http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki / Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller


Questo è sbagliato. Un fattore importante nel costo dei chip a basso costo è il pacchetto che trasporta il silicio. Per questo motivo, è più economico sostituire la logica discreta con un microcontrollore quando si arriva a un paio di dozzine di porte ... e una dozzina di porte non fanno molto. L'ubiquità MCU ha aumentato il costo delle porte discrete, modificando l'equilibrio. Inoltre, la maggior parte degli MCU di fascia bassa non esegue alcun tipo di sistema operativo.
Potatoswatter,

7

Questa è una domanda molto ampia e dipende molto dalla macchina. Posso solo immaginare che la maggior parte di questi distributori automatici sono controllati da microcontrollori (8051, PIC, ARM7, per citarne alcuni dei più utilizzati) e raramente hanno un sistema operativo e, se ce ne sono, sarebbe un qualche tipo di RTOS, come FreeRTOS .

Macchine più complesse, come lettori DVD / BluRay o telefoni cellulari, funzionano su piattaforme sofisticate, come OMAP4 . Di solito un sistema operativo Unix funziona su di essi.


La ringrazio per la risposta! +1
Josh Leitzel,

7

I microcontrollori di fascia bassa presenti negli apparecchi di uso quotidiano in genere non eseguono un sistema operativo. Sono scelti a basso costo e i principali fattori che determinano tale costo sono il numero di pin sul chip (da una dozzina a un paio di centinaia) e la quantità di memoria interna (da un paio di kilobyte a una megabyte ROM, da alcuni byte a cento kilobyte di RAM).

Mentre il creep di funzionalità fa la sua magia, può accadere che un forno a microonde possa richiedere il multitasking. In questo caso, il programmatore ricorda il corso dei loro sistemi operativi e implementa il passaggio di messaggi, la pianificazione delle attività, l'I / O asincrono, ecc., Se necessario!

Naturalmente, per motivi di convenienza, semplicità, dimensioni del codice, ecc., Le funzionalità tendono ad essere eseguite in modo rudimentale. Spesso dipende da come si analizza il programma, per trovare funzionalità del sistema operativo generalizzate all'interno di codice specifico dell'attività. Ma è molto lontano da un programmatore di attività hardcoded a un sistema operativo e quando hai solo pochi kilobyte con cui lavorare, un sistema operativo standard non è la soluzione.

Dai un'occhiata a DigiKey, un popolare sito di selezione di componenti elettronici, per conoscere le MCU di fascia bassa. Ecco le loro informazioni su un MCU molto economico con un controller LCD, come potrebbe essere trovato in una macchina da caffè. È abbastanza facile ottenere il manuale di programmazione e tutto il resto.


5

Il compito di un sistema operativo è fornire accesso condiviso alle risorse - tempo di esecuzione della CPU, RAM, I / O ecc. La maggior parte dei semplici sistemi embedded basati su microcontrollori hanno un solo programma in esecuzione alla volta e accedono (e gestiscono) queste risorse da soli , quindi non hanno bisogno di un sistema operativo.

I sistemi integrati sono in genere programmati in C e talvolta in assembly per tempistiche estreme o ottimizzazione della memoria. Alcuni compilatori incorporati consentono di separare l'assemblaggio in un linguaggio di livello superiore.


4

Di recente mi sono imbattuto in un distributore automatico di sigarette con Ubuntu (la macchina si stava riavviando, così ho potuto vedere il logo).



1

Se stai cercando su Google informazioni generali, cerca cose come "sistemi integrati", "soc" (system-on-a-chip). Direi che gran parte di questi tipi di dispositivi funzionano in linguaggi di basso livello, come C.

Curiosità: Java è stato originariamente concepito come una soluzione per la programmazione di sistemi embedded: http://en.wikipedia.org/wiki/Oak_(programming_language )


Grazie, cercherò di ricercare ulteriormente quelli! +1
Josh Leitzel,

1

La maggior parte dei chioschi, registri, schermi drive-thru e persino macchine da caffè e microonde di fascia alta eseguono effettivamente Windows XP o Linux, come le macchine della serie "Jura Impressa"; puoi SSH in loro e preparare il caffè.

Ecco uno script github di un lavoro cron di una macchina da caffè: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

La maggior parte dei router, i nuovi forni, i nuovi frigoriferi, le automobili, i lettori DVD, i vari componenti elettronici, i nuovi prodotti per l'automazione domestica tra cui le lampadine, eseguono una versione di ARM Linux o Linux incorporato.

La maggior parte dei dispositivi più economici, meno di $ 20, se sono più recenti, funzionano su ESP8266 o dispositivo simile (possono eseguire LUA o un server Node ridotto per $ 2 in blocco - follemente economici)

http://nodemcu.com/index_en.html

L'uso di FPGA e sistemi embedded come 8051, Z80 o altri dispositivi embedded come PICC, AVR e Arduino saranno presto sostituiti da sistemi all-in-one / SoC (System on Chip) come ESP8266. Sono semplicemente troppo facili da programmare e sono un sistema completo su un chip che esegue il proprio server Web; li accendi, carichi il tuo codice sorgente e hai un server in rete per $ 2.

Sono cresciuto codificando PICC e AVR e 8051, e sono triste vederli andare via, ma non ho toccato nulla di diverso da ESP8266es da anni perché sono 1/10 del prezzo e sono un ordine di grandezza più facile da lavorare . Puoi ottenerli su schede di sviluppo con pacchi batteria e layout di pin esplosi per $ 5 su ebay o $ 10 su adafruit.


-2

Ho sentito da un ingegnere che i treni pendolari della metropolitana leggera Siemens corrono su 386s.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.