2010-01-25 20 views
14

Sono uno sviluppatore di software. Ho programmato in lingue di alto livello per alcuni anni.Quanto è difficile per uno sviluppatore di software imparare come programmare un microcontrollore?

Mi piacerebbe sapere come fare il primo passo verso la programmazione dell'hardware. Non è una cosa complicata, ma forse un normale dispositivo CE? Supponendo che non ho bisogno di mettere il PCB insieme a vari componenti, ma solo per programmare la CPU minuscola?

Quanto è necessario il livello basso? ASM? C? manipolare registri? o il kit di sviluppo è abbastanza alto ora? Java è anche nella foto? La codifica OO nell'hardware è forse anche un sogno o una realtà? Hai bisogno di un controllo di realtà.

Tendo anche a imparare meglio con libri o siti che sono scritti in un formato tutorial. Qualcosa che mi guida da qualcosa di semplice a qualcosa di più complesso. Qualche consiglio? Forse qualcosa che mi introdurrà all'hardware popolare (microprocessore/microcontrollore) disponibile oggi?

Molto apprezzato, grazie a tutti.

risposta

8

La programmazione attuale non è un grosso problema. La parte frustrante e fastidiosa è la configurazione dell'ambiente di sviluppo e il funzionamento degli strumenti. Una volta che lo hai fatto, sei a metà finito.

Suggerirei di acquistare un kit di sviluppo ('kit di sviluppo') con USB integrato e compatibile con il sistema operativo selezionato. Funziona, e sei a metà strada.

Se ti manca la conoscenza, è anche importante conoscere le basi di come funziona un processore. Programmerai a un livello molto inferiore rispetto a qualsiasi altra programmazione, quindi i fondamentali sono un po 'più importanti.

+0

che tipo di kit di sviluppo consigliate? – Henry

+0

o .. ci sono macchine virtuali per uController/microprocessore su PC? Ti piace ... fare lo sviluppo di J2ME senza il telefono J2ME? Mi stavo solo chiedendo ... – Henry

+0

@ Henry: consiglierei di iniziare con un processore Atmel (sono abbastanza popolari e semplici) o un Motorola MSP430 o simile (bassa potenza). Fondamentalmente, qualsiasi kit di sviluppo con USB sarà buono. Per quanto riguarda una VM su un PC - non so se riuscirai a riceverli in questi giorni, ma consiglierei * non * di ottenere una metà della sfida/pratica/soddisfazione che sta facendo funzionare la toolchain. – Peter

2

Se si conosce C, è solo questione di imparare i passaggi della catena di strumenti per scaricare il codice.

Facile punto di partenza (a buon mercato hardware/software) http://www.arduino.cc/en/Guide/HomePage

+2

Si apprende anche come funzionano le porte IO, limitazioni/requisiti di memoria incl. possibilmente paging, interrompe le routine di servizio. È un po 'più che conoscere solo C e la toolchain. –

+0

Paul, hai un libro che consigli per imparare quelli che hai menzionato? grazie. – Henry

+0

@Henry: Non ho personalmente imbattuto in un bel libro di testo/soluzione per quelle cose. Dovrei scriverne uno :-) Troverete la discussione di quelli (in una certa misura) nella documentazione tecnica per un dato processore. Alcune di quelle aree sono in 1 CPU, non in un'altra. –

0

Anche qualcosa da esaminare è lo Microsoft Robotics Studio. Supportano un bel po 'di schede hardware (incluso CE) e con esso è abbastanza facile far funzionare un piccolo robot. E cosa c'è di più interessante in un progetto per imparare la programmazione embedded?

Si integra perfettamente in Visual Studio (Express) e il loro devkit include anche una versione Express gratuita.

+0

cosa sono le schede hardware che supportano? thx – Henry

+0

irobot, fischertechnik, roombo, mindstorms, pioniere, ecc. La cosa migliore è che puoi solo programmare in C#. E ancora meglio, prima di acquistare un robot, puoi simulare il tutto e il mondo è in 3D. E quando inizia a funzionare, si acquista l'hardware e dovrebbe funzionare con minimi ritocchi – Toad

+0

thx, ma non sto studiando la costruzione di robot. – Henry

0

Ottieni un beagleboard. Economici, molti utenti (il supporto della community sarà fondamentale), molte opzioni del sistema operativo. http://beagleboard.org/

+0

Beagleboard, come si confronta con Arduino? Sembra che sia già un computer su Linux ... ho ragione? Programmare questo simile a scrivere un'app linux? – Henry

+0

Arduino è di livello inferiore, ottimo per l'interfacciamento con l'hardware. Questo è il motivo per cui penso che beagleboard sia probabilmente più accessibile a chi non è interessato all'hacking hardware. Esempio: http://letsmakerobots.com/node/11252 – ergosys

+0

Vedo ... programmare Beagleboard è come programmare un LEGO MINDSTORMS di fascia alta? – Henry

0

Bene, se si vuole sapere cosa si sta facendo, è necessario comprendere il linguaggio assembly del processore e dell'architettura del processore.

Avrete bisogno di imparare C per essere competente nei microcontrollori. Non c'è modo di aggirare questo.

Ci sono alcuni linguaggi a livello VM su sistemi embedded. Rivedo l'eccezione Java out-of-memory di tanto in tanto sul mio telefono cellulare (che aiuta anche a darmi un parere forte su lingue embedded a livello VM).

L'ARM ha un certo supporto per bytecode Java a livello di hardware.

La soluzione migliore è prendere qualcosa come il chip PIC o Atmel e iniziare a fare hacking con loro.

Se si desidera eseguire l'hardware esistente, ottenere un hypervisor per il PC e iniziare a scrivere un kernel di base.

2

Sono stato codificante in C sia come hobby che professionalmente da circa 16 anni, ma sempre per codice userland (cioè programmi, non kernel o driver). La maggior parte dei miei lavori riguardava linguaggi di alto livello (ho eseguito molto di programmazione Perl e Ruby, con gli occasionali script Java, Python e shell in mezzo). Ho sviluppato molto per MS-DOS (che era probabilmente il più vicino alla programmazione bare metal come si farebbe con una macchina x86), ma il mio ultimo lavoro ha coinvolto 5 anni di sviluppo web Perl e Ruby on Rails.

Detto questo, ora sono un ingegnere senior per lo sviluppo di Linux embedded, sviluppo di driver (tra cui un emulatore per un'eredità semplice microprocessore all'interno di un modulo del kernel) per uClinux sulla piattaforma Blackfin. Ci sono momenti in cui la mia inesperienza con problemi legati all'hardware (ad esempio, livelli di segnale fluttuanti a causa della mancanza di un pull-up/pull-down su una spilla) ha intralciato la strada, ma è stata per lo più un'esperienza molto divertente ed elettrizzante. Come affermato da altri, la comprensione dei tuoi strumenti è essenziale: per uClinux, ciò significava lo GNU Toolchain, che fortunatamente conoscevo già a causa del mio background sulle tecnologie FOSS.

Il Blackfin è certo un microprocessore entry-level (in particolare, non ha una MMU, che ha qualche relevant effects on Linux development), ma, come già detto, è possibile acquistare un Beagleboard per circa US $ 200 con tutti gli accessori e inizio richieste scherzare con esso in pochi giorni. Se vuoi qualcosa di più semplice, ci sono molte opzioni Arduino là fuori, anche se se hai qualche reale esperienza di sviluppo sotto la cintura credo che troverai il loro ambiente di sviluppo un po 'limitante (lo so che l'ho fatto).

Dopo esserti comodo con i tuoi strumenti, potresti voler spendere dei soldi su un in-circuit emulator (o ICE). Questi sono in genere altamente specifici della piattaforma (sia in termini di architettura di destinazione che di ambiente di sviluppo), ma sono altamente raccomandati per qualsiasi cosa al di là dei soliti esempi di LED lampeggianti dopo la pressione dei tasti. Sono sicuro che supererete rapidamente.

In pochi mesi ti troverai a creare immagini personalizzate per hackable customer devices utilizzando Buildroot e divertendoti molto. Tutto quello che posso dire è, provaci, è molto avvincente e non particolarmente costoso da fare oggigiorno.

+0

Beagleboard, come si confronta con Arduino? Sembra che sia già un computer su Linux ... come il micro-controller su steroidi? Funziona su Linux già? Allora ... la programmazione sarebbe più alta, relativa ad Arduino? Grazie. – Henry

+0

@Henry Beagleboard è almsot un PC da alcuni anni fa, esegue linux ha una rete, si inserisce in una tastiera e monitor - probabilmente si può anche sviluppare direttamente su di esso Arduino è un vero controller micor. È crudo C comandi più per cambiare le tensioni sui pin. Si codice su un PC, scaricare il programma finito, collegare il potere e sperare! –

+0

Can Beagleboard può anche fare ciò che fa Arduino? come ... cambiare le tensioni su spilli e cose? – Henry

Problemi correlati