Perché dovrei imparare un'architettura a microcontrollore? [chiuso]


8

Di recente ho iniziato a lavorare in una piccola azienda che produce elettronica per la diagnosi automobilistica. Il mio capo, che ha circa la metà degli anni '50, disse che stava usando 8051 derivati ​​e che stavano facendo il lavoro. Ho continuato a cercare su Google per sapere se l'8051 è ancora popolare oggi. E a Quora, ho visto questi:

... è probabilmente l'architettura MCU più semplice in circolazione. Ogni periferica sembra la versione bare-bones. I miei concetti di timer, clock, UART ecc. Si sono chiariti molto! E poi ho iniziato ad apprezzare altre architetture, perché in realtà ho capito la differenziazione.

... ovviamente, non verrà utilizzato da nessun settore per sviluppare un prodotto a causa della sua semplicità ...

Ma perché? Finora, almeno come studente, facevo molte cose senza fare confusione con l'architettura. Ho felicemente codificato con C, ho usato periferiche LCD, collegato ad altri circuiti integrati con protocolli diversi (SPI, I2C ecc.)

Perché dovrei preoccuparmi dell'architettura del mio microcontrollore, a parte campi limitati di applicazioni real-time e time-critical?


3
O per divertimento, o perché devi fare un progetto con una tale architettura, ovviamente.
PlasmaHH,

Oggi l'8051 è al massimo un livello di hobby. D'altra parte, se inizi a lavorare con qualcosa di moderato come ARM Cortex M4, non hai davvero bisogno di imparare l'architettura. Per non cominciare almeno
Gregory Kornblum,

@PlasmaHH Vorrei avere abbastanza tempo per "divertirmi" con ogni singolo argomento sull'elettronica, ma era durante i miei anni da studente :)
CK

6
devi essere consapevole dell'architettura quando hai bisogno di prestazioni, che probabilmente non accadranno. Per fare un esempio, se è necessario eseguire ripetutamente alcuni calcoli e il tempo è limitato, potrebbe essere necessario non utilizzare i dati memorizzati in Flash o ottimizzare l'utilizzo dei registri. Ma succede oggi solo a un numero molto limitato di professionisti. Ci vorrà del tempo per arrivarci. Per ora non commetterei un errore supponendo che scrivere C sia sufficiente per i tuoi prossimi anni.
Gregory Kornblum,

2
Lascerò a coloro che potrebbero conoscere meglio :)
Gregory Kornblum,

Risposte:


30

8051 e altri microcontrollori low-bit sono ancora in uso oggi?

Sì, quasi ovunque. Sono piccoli e facili, ci sono molti core che fluttuano intorno al tuo silicio personalizzato a basso o nessun costo, ci sono compilatori maturi. Tutto ciò rende l'8051 ancora una delle architetture centrali più popolari tra i produttori di silicio. I core ARM potrebbero essere disponibili in più prodotti diversi, ma poi, quando parli con qualcuno che sta costruendo molti dispositivi con un vincolo di prezzo molto rigoroso, è probabile che preferirà un core 8051 più economico / gratuito se lo farà il lavoro . Giusto per opporci alla pretesa di @ Nitro2k01 di utilizzo solo di nicchia: Mouser ha in magazzino quasi 800 modelli di microcontrollori 8051 ¹. E il fatto che questi inizino, anche da Mouser, a prezzi inferiori a 40 ct potrebbe essere un'indicazione di ciò per cui sono utilizzati:

MCU tradizionali, a basso rendimento e ad alto volume

in tal modo:

... ovviamente, non verrà utilizzato da nessun settore per sviluppare un prodotto a causa della sua semplicità ...

è un'assurdità assoluta di alta qualità. Soprattutto dal momento che stai fornendo un contro-esempio tu stesso

Il mio capo, che ha circa la metà degli anni '50, disse che stava usando 8051 derivati ​​e che stavano facendo il lavoro.

Esattamente! Sono utilizzati ovunque, sono ben collaudati ed economici e sono sufficienti ; non sottovalutare mai il vantaggio di avere una soluzione a un problema comune in un cassetto da qualche parte!

Certo, spesso succede che potresti aver bisogno di una soluzione con due bus automobilistici tipici, un'interfaccia ad alta velocità con un ADC, alcuni timer di watchdog affidabili, tre unità PWM ... e poi inizi a mettere insieme qualcosa composto da quattro derivati ​​8051 e 8080 .. uh. Questa è una brutta situazione e molto probabilmente potrebbe essere risolta molto più velocemente e in modo più affidabile utilizzando un unico MCU più versatile, più potente (ad esempio un ARM). Ma che "abbiamo le conoscenze dell'azienda su come funziona qualcosa con la vecchia tecnologia" vs "siamo a prova di futuro avendo la capacità di funzionare su hardware moderno" è un classico compromesso di sicurezza degli investimenti. Se incontri uno di quel tipo di progetti, proverei a parlare con il capo in quel contesto. Per piccoli lavori facili, sì, 8051.

Dovrei preoccuparmi di conoscere le architetture MCU in generale?

Sì! Penso che @jfkowes lo spieghi molto bene. Ma onestamente: è un po 'come chiedere "dovrei imparare come funziona il motore a combustione interna se voglio fare il meccanico d'auto"; la risposta è "potresti vivere bene se riesci a eseguire abbastanza bene i manuali di riparazione, ma probabilmente sarai un tecnico molto migliore (lascia solo il tecnico) se capisci cosa fa il tuo hardware.

Non appena dovessi affrontare un problema che non può essere cercato su Google, saresti praticamente una tartaruga sulla schiena se non capissi approssimativamente come funziona il tuo processore.

Dovrei preoccuparmi di imparare l'architettura 8051?

Probabilmente no. Nel senso che, sì, fintanto che il costo non è il tuo obiettivo principale, molto probabilmente puoi semplicemente usare MCU molto più potenti e versatili basati su core ARM o altre architetture più moderne.

Inoltre, il core 8051 è così semplice che in realtà consiglierei di capire quali sono le sue unità prima di provare ad affrontare un core MCU più moderno, complesso. È un bell'esempio.

Quindi, se 8051 non è il core che sto cercando in un'applicazione a basso volume, cosa sto cercando?

Quindi, personalmente: scegli un ARM Cortex-M0, -M3, -M4F; questi sono abbondanti in tutti i tipi di microcontrollori convenienti, facili da programmare (yay, supporto GCC maturo, librerie standard CMSIS, molti sistemi operativi integrati in esecuzione su questi) e comunemente vengono forniti con interfacce di debug standard (il che è un grande vantaggio).

Gli ARM sono, dall'esterno, di solito relativamente facili da capire, poiché in genere si mappano tutte le periferiche nello spazio di memoria, e basta. Internamente, hanno vari gradi di sofisticazione e ottimizzazioni di velocità / robustezza / dimensioni, il che li rende non perfettamente comprensibili nei dettagli, ma immagino che potrebbe essere un po 'troppo chiedere a meno che non ti piaccia la progettazione della CPU.

Se sei interessato alla progettazione della CPU, penso (questa è davvero una convinzione personale basata sulla mia osservazione delle attività di ricerca e degli investimenti del settore "promessi") stiamo attualmente osservando l'ascesa di un nuovo importante ISA - il RISC-V. Esistono varie implementazioni di questa architettura per FPGA o silicio e persone come Nvidia sembrano giocare anche con l'idea di sostituire i loro multiprocessori di flusso con questo tipo di core.


¹: È molto probabile che mi manchi più della metà degli 8051 attuali di Mouser (perché, ehi, ho appena selezionato tutti gli MCU il cui nome principale era * 80 * 5 *). È probabile che se scegli un microcontrollore a 8 bit casuale, è probabile che il suo nucleo sia almeno parzialmente derivato dall'8051. Voglio dire, dai un'occhiata alla "lista dei [8051] fornitori di derivati" di Wikipedia .


AVR è anche un'ottima architettura di apprendimento, con documentazione eccezionale e supporto gcc.
Chrylis

@Chrylis odia non essere d'accordo, ma personalmente non penso che gli ATMega 8bitter siano una grande architettura, né la loro documentazione o il supporto GCC sono eccezionali rispetto a ARM cortx m0, con cui competono. Ma questa è un'opinione personale!
Marcus Müller,

1
@MarcusMüller Dopo alcune esperienze con Atmel, non le avrei mai più utilizzate (tranne l'hobbistica). Atmel dipendeva dall'attività di un hobbista per supportare le aziende più piccole di una certa "dimensione" - di cui ero sempre più piccola, dato che i nostri qty non superavano mai 6000 all'anno. Le FAE sono state carine, ma questo non ha aiutato la Francia (AT91) e quindi le ho lasciate andare. Microchip, d'altra parte, mi ha supportato a livelli incredibilmente folli, indipendentemente dal progetto. Supporta il loro prof. gli strumenti "per sempre" e anche i vecchi chip sono ancora realizzati. Atmel ora acquistato da Microchip. Quindi forse cambi a piedi lì e guarderò di nuovo.
Jon

1
@jonk così, mentre PIC / microchip ha una buona reputazione di servizio e potrebbe sopravvivere da solo, l'estensione del portafoglio Atmel potrebbe arrestarsi. E, la mia speranza per il prossimo decennio: come abbiamo discusso nei commenti ad un'altra risposta qualche tempo fa, se si dimostra giusto che i "servizi navetta" per wafer diventano sempre più convenienti e con 32 bit / facoltativamente 64 bit / opzionalmente RT garantisce architetture come RISC-V in varie dimensioni e velocità (implementate come core con il nome BOOM, Rocket-chip o PicoRV32), "diamine, ho un problema speciale, posso ottenere un MCU speciale" ...
Marcus Müller,

1
@ MarcusMüller Si può sperare. Se le cose si rivolgono all'assistenza clienti, Microchip massacra semplicemente tutti gli altri. Avevo uno strumento professionale, di 12 anni, in cui l'interruttore di alimentazione è diventato "traballante". Ho chiamato per chiedere se potevano darmi il numero di parte dell'interruttore in modo che potessi ordinarne uno e riparare l'unità. Invece, hanno chiesto di inviarmi un'unità sostitutiva, me l'hanno spedita e una scatola per restituirle quella vecchia, ed è arrivata la seguente AM! Nessun costo. Ho chiesto, "Hai bisogno della prova di acquisto?" Dissero: "No. Restituisci l'altra unità. Il possesso fisico è tutto ciò di cui abbiamo bisogno." La cosa maledetta era antica.
Jon

12

In generale, ecco alcuni buoni motivi per apprendere (o almeno avere una conoscenza pratica) dell'architettura del microcontrollore che si sta utilizzando.

Avvertenza: nel contesto del tuo lavoro, dell'azienda, dell'applicazione, dell'hardware associato ecc., Potrebbero esserci dei motivi per cui non dovresti imparare la particolare architettura che stai utilizzando in questo momento.

Debug

Quando le librerie di alto livello funzionano, potrebbe non essere necessario conoscere l'architettura. Quando inizi ad avere problemi, conoscere i componenti interni del tuo microcontrollore può aiutare molto a isolarli e risolverli rapidamente.

Efficienza e semplicità del codice

Se conosci l'architettura, potresti essere in grado di spostare funzionalità dal software all'hardware. Ciò ha il potenziale per ridurre il carico del software e rimuovere le fonti di bug.

Riduzione dei costi

La conoscenza dell'architettura può ridurre l'utilizzo della memoria di programmi e dati e il carico del processore. Ciò può significare che è possibile selezionare un microcontrollore con meno risorse, riducendo potenzialmente i costi.

Aumenta la tua utilità

Anche se non si utilizzano le conoscenze in questo momento, è possibile che vengano avviate discussioni con colleghi / venditori / tecnici dell'assistenza, ecc. Ad esempio, qualcosa che conosci potrebbe aiutare qualcun altro a risolvere un problema. Salvare la giornata è qualcosa che la gente ricorda.

Sapere è potere

Anche se non hai bisogno delle conoscenze del tuo lavoro attuale, quando vedi una pubblicità per un lavoro che sembra incredibile che dice "È richiesta / preferita la conoscenza della <famiglia di microcontrollori" , sarai in una posizione migliore per farlo.


Inoltre, non so se leggerai spesso quella frase in un annuncio di lavoro: è una sorta di conoscenza arcana e chiunque sia il meno informato su qualsiasi architettura della CPU sarà in grado di raccogliere l'8051 nei suoi primi tre giorni di lavoro, immagino
Marcus Müller il

Bene, l'ho modificato per essere più generale.
jfowkes,

7

8051 e altri microcontrollori low-bit sono ancora in uso oggi?

Sì, anche se principalmente per casi d'uso di nicchia. Sono principalmente utilizzati per compiti semplici, prodotti di serie, prodotti orientati ai costi o dove è auspicabile una comprovata esperienza. Sono spesso concessi in licenza e integrati in una soluzione a chip singolo. Grazie alla loro semplice architettura, è facile integrarli con periferiche personalizzate sullo stesso chip. Un altro vantaggio è che possono essere prodotti su una piccola area con tecniche di produzione di semiconduttori più vecchie (e più economiche).

Uno di questi esempi è rappresentato dal chip di controllo nelle smart card, che spesso utilizzano un core 8051 o simile con estensioni hardware crittografiche. Probabilmente troverai nuclei di microcontrollori a 8 bit in cose come il controller per un monitor per spazzolino elettrico intelligente. Una centralina elettronica del veicolo utilizzerà spesso un microcontrollore a 8 bit, insieme a uno a 32 bit, come watchdog a causa della loro maggiore affidabilità e complessità inferiore.

Dovresti impararlo?

A parte la possibilità che tu possa effettivamente finire in una situazione in cui è necessaria la conoscenza di quella particolare architettura, direi che si tratta di un'abilità utile in generale. Anche se programmi C nel tuo lavoro quotidiano, è utile avere una comprensione generale di ciò che accade "a un livello inferiore". Quando si risolvono bug strani o problemi di prestazioni, potrebbe essere molto più semplice individuare il problema se si ha una comprensione generale dell'hardware sottostante. È inoltre possibile analizzare più facilmente l'output del linguaggio assembly dal compilatore C. L'apprendimento di un'architettura renderà anche più semplice apprenderne di diversi in futuro. Queste competenze potrebbero anche aiutarti a scrivere codice migliore anche per core CPU più moderni.


Non sarei così leggermente in disaccordo con l'affermazione "Nicchia"; vedi la mia risposta qui sotto :) ma comunque, la tua è una buona risposta!
Marcus Müller,

1

Puoi imparare molto sul design digitale imparandoli. L'elettronica digitale è costruita usando due cose. Innanzitutto sono la logica, le interconnessioni degli elementi AND, OR, NOT che implementano un'espressione logica. (In pratica vengono effettivamente utilizzati altri elementi logici come NAND, ma AND, OR e NOT sono più facili da comprendere.) In secondo luogo sono elementi di memoria che possono contenere uno o più bit. Quando vengono introdotti elementi di memoria, i dispositivi possono avere quello che viene chiamato uno stato . Diverse combinazioni di bit nei suoi elementi di memoria corrispondono a stati diversi.

Considera un distributore automatico che inizia nello stato 0 e si sposta in un altro stato ogni volta che viene inserita una moneta. In tal modo la macchina può tenere traccia della quantità totale di denaro, sapere quando è stato messo abbastanza denaro e sapere quante modifiche restituire.

Per progettare i circuiti della macchina, iniziando con un diagramma degli stati con frecce che mostrano le transizioni verso altri stati insieme alle condizioni che li innescano. Per ogni freccia, un'espressione logica identifica una condizione. Si può quindi capire quali sono tutte queste espressioni e implementarle con elementi logici.

Per un distributore automatico, questo non è molto difficile. Per i controller complessi diventa molto più difficile. I microcontrollori sono un modo semplice e veloce per fare la stessa cosa. Si consideri una "memoria" che (nel senso di un byte o una parola) ha una larghezza di k bit e ha n righe di indirizzo che risultano in 2 ^ n posizioni nella memoria. Questa memoria è programmata con un disegno ed è di sola lettura in pratica. Si noti che utilizzando i bit di indirizzo della memoria come "input" e i bit di dati come output, la memoria può essere programmata per realizzare qualsiasi funzione logica.

Aggiungendo un registro anche k bit di larghezza per contenere il contenuto di una posizione di memoria si ottiene una macchina a stati.

Se i bit k sono divisi in, ad es , un codice operativo e un indirizzo. L'insieme di bit del codice operativo controlla altri pezzi del circuito (come l'erogazione di un prodotto del distributore automatico) e gli altri sono un indirizzo di memoria largo n bit, ogni insieme di k bit diventa una microistruzione con capacità di ramificazione.

Aggiungete a questo un po 'di logica aritmetica, alcuni più registri (in cui uno o più di questi prendono gli input di controllo per spostarsi a sinistra ea destra) e potete costruire una CPU le cui istruzioni di macchina sono implementate da una sequenza di microistruzioni.

Negli anni '70 e '80 un certo numero di computer di successo furono costruiti usando questo design. Uno di questi (VAX 11 di Digital Equipment) aveva un'istruzione macchina per calcolare un polinomio intero, destinato ai calcoli degli indirizzi (think array). Si è scoperto che l'istruzione potrebbe essere implementata più velocemente usando istruzioni più semplici.

I microcontrollori possono essere e di solito sono un'implementazione meno efficiente di una macchina a stati tradizionale. Ma possono essere facilmente cambiati, molto più veloci da progettare e sono ottime soluzioni di controllo.

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.