Domanda:
Sviluppo integrato: il passo successivo
NickHalden
2011-06-30 23:52:20 UTC
view on stackexchange narkive permalink

Inizierò raccontandoti quello che so. Poi ti dirò che voglio arrivare in questa magica terra di sapere tutto sullo sviluppo di sistemi embedded. Allora ti chiederò quali dovrebbero essere i miei prossimi passi per arrivarci. Questa risposta è piuttosto istruttiva, ma sto cercando di essere un po 'più dettagliato:

Quello che so

Let's vedi, sono onesto con C e C ++. Ovviamente, voglio migliorare con quei linguaggi, ma penso che a questo punto il modo migliore per migliorarmi sia continuare a usarli e cercare continuamente di migliorare il mio codice mentre lo scrivo. Non penso che sarebbe molto vantaggioso dedicare più esercizi di apprendimento solo all'apprendimento del C.

Mi trovo abbastanza a mio agio nel progettare circuiti semplici. Vedo un chip con un'uscita a collettore aperto e so di aver bisogno di un pull up ecc. Sono abbastanza fiducioso che, dato un IC e la sua scheda tecnica, posso capire come interfacciarmi con esso o almeno porre le domande giuste a capire come interfacciarlo.

Sono molto bravo in matematica e pensiero logico. Ci sono pochi algoritmi / concetti di progettazione che mi gettano per un ciclo. Questa è sicuramente la mia area di forza.

Cosa ho fatto

Fino ad ora, tutta la mia esperienza è stata con microcontrollori a 8 bit . Il mio corso universitario utilizzava un Motorola HC08, un Intel 8051 e uno Zilog EZ8. Il mio professore aveva costruito una piccola scheda di sviluppo per tutti e tre con un display a 7 seg e alcune altre cose. Li abbiamo programmati in assembly, quindi ho una certa familiarità con l'assemblaggio e ho seguito un corso di architettura del computer di base, quindi ho un'idea decente dell'hardware. Tuttavia, abbiamo lavorato su un ambiente Windows e tutti e 3 gli MCU avevano il loro IDE e catena di strumenti già configurati, quindi non ho mai imparato davvero come il mio codice sia passato dall'assemblaggio all'esecuzione sull'MCU.

Il passo successivo è stato imparare da solo. Ho acquisito molta familiarità con l'ambiente Arduino interfacciandomi con sensori / memorie / display che entrambi avevano librerie pre-scritte e altri che non lo avevano. Successivamente ho costruito la mia scheda Arduino con un ICSP su di essa e connessioni a un altro MCU in modo da poter eseguire il flashing del bootloader su ATmega328 nudi. Anche in questo caso, tuttavia, l'IDE e la catena di strumenti erano già impostati e non ho mai capito come sono passato da C / Arduino al codice effettivamente in esecuzione sull'MCU.

Cosa voglio sapere

Quindi, dalla risposta precedentemente collegata, penso che le cose più interessanti / utili per me sarebbero il proiettile sull'apprendimento degli strumenti (compilatore e linker) e l'apprendimento di diversi stili di architettura software ( passando da loop di controllo basati su interrupt a scheduler e RTOS). Questa è la mia opinione su ciò che sarebbe più utile ... ma dal momento che non lo so ancora è difficile dire se sia corretto o no, quindi sentiti libero di suggerire altri punti elenco da quella risposta se pensi che sarebbero migliori e si prega di fornire una spiegazione del motivo per cui lo si pensa.


Quindi, prendendo le mie attuali conoscenze come punto di partenza e la descrizione sopra di ciò che voglio sapere come obiettivo, sto cercando suggerimenti molto specifici su dove andare dopo. Sto cercando suggerimenti esatti per progetti, siti web / post di blog da leggere, capitoli di libri, ecc.

Inoltre, ci sono altri buchi nella mia base di conoscenza che pensi dovrei colmare prima di passare a gli argomenti sopra menzionati?

Grazie

Questa è una domanda molto aperta e soggettiva, ma è ben ponderata e ha dato ottime risposte. Tali domande dovrebbero essere CW.
@Kevin Vermeer Ah ok, come posso farlo per riferimento futuro?
@JGord, devi contrassegnare per l'attenzione del moderatore. Solo i moderatori possono creare CW.
Nove risposte:
Toby Jaffey
2011-07-01 00:05:51 UTC
view on stackexchange narkive permalink

Quindi, dalla risposta precedentemente collegata, penso che le cose più interessanti / utili per me sarebbero il proiettile sull'apprendimento degli strumenti (compilatore e linker) e l'apprendimento di diversi stili di architettura software (passando dal controllo basato sugli interrupt loop a scheduler e RTOS)

Portare un piccolo sistema operativo su un nuovo dispositivo potrebbe aiutarti a capire gli scheduler e gli RTOS. FreeRTOS è popolare e ben documentato. eCos è un altro.

Scrivere un bootloader è un buon modo per fare i conti con un linker poiché ti consigliamo di dividere la memoria e il flash in regioni.

Un altro suggerimento è quello di scegliere un'architettura o un chip completamente nuovo e costruirsi una scheda di sviluppo. Costringersi a ricominciare dall'inizio e cercare tutto nella scheda tecnica è un buon modo per imparare.

Esplora Protothread. Prova a scrivere gli stessi programmi sia in stile threaded sia in stile macchina a stati. Una volta che hai finito con Protothreads, scrivi un vero scheduler di thread.

Ehi Joby, grazie per la tua risposta, ma in realtà questo è il tipo di risposta che stavo cercando di evitare. Cerco cose come "come imparare RTOS" su Google e non ci sono link utili. Hai delle buone guide o risorse di apprendimento per le cose che hai menzionato?
Se sta davvero cercando di imparare queste cose, un RTOS oscurerà solo le cose all'inizio. Ho realizzato oltre 100 progetti di microcontrollori e non ne ho ancora trovato uno in cui un RTOS sarebbe stato una buona risposta. Ho usato un semplice task scheduler cooperativo round-robin un sacco di volte, ma è molto meno di quello che la maggior parte delle persone considera un RTOS. I miei task scheduler per le famiglie PIC 18 e dsPIC sono disponibili gratuitamente sul mio sito web.
@Olin potresti approfondire questo? Vuoi dire che dovrei iniziare a imparare i thread e la pianificazione prima di passare a un RTOS?
@Olin Per i piccoli sistemi preferisco il multitasking cooperativo con compiti con polling. È deterministico e leggero, ideale per sistemi vincolati. Il multitasking preventivo con thread, sebbene molto potente, può causare incubi di debug, con condizioni di gara e bug irripetibili. Dammi una macchina a stati ogni giorno.
@JGord Il miglior percorso per il miglioramento è farlo. Sto suggerendo alcune attività per migliorare le tue capacità, non una guida allo studio. Mi sembra di scoprire spesso le domande interessanti solo dopo la prima implementazione.
@JGord: No, sto dicendo che un RTOS completo non è appropriato per i microcontrollori, con il massimo di cui hai davvero bisogno per essere uno scambiatore di attività cooperativo. RTOS è qualcosa per i "grandi" sistemi embedded, che i microcontrollori non sono. Ci sono molti PC incorporati e simili là fuori in cui gli RTOS o altri sistemi operativi hanno senso, ma non ne ho ancora trovato uno in cui avesse senso per un microcontrollore.
@Joby: OK, non era chiaro dalla tua risposta. Sembrava che tu stessi sostenendo alcuni RTOS per questo caso.
Per informazioni su RTOS, controlla il libro di Jean Labrosse sul suo RTOS: MicroC OS II Real Time Kernel. Ha un meraviglioso capitolo che parla dei meccanismi RTOS in generale. Con il suo libro, ottieni i diritti per utilizzare il suo RTOS.
old_timer
2011-07-01 08:59:09 UTC
view on stackexchange narkive permalink

Il libro MicroC OS II è probabilmente qualcosa su cui investire. Dovresti anche creare progetti per imparare le varie interfacce i2c, spi, mdio, ecc. In particolare come bit bang ciascuna di esse. Di tanto in tanto l'hardware supporterà il bus (è necessario impararlo fornitore per fornitore) ma spesso per vari motivi non sarai in grado di utilizzare l'hardware i2c / spi e dovrai fare il bit bang.

L'avr / arduino va bene, dovresti imparare ARM, thumb e thumb2, e il msp430 e alcune immagini più vecchie (non mips). Guarda il codice del bootloader per arduino e scopri come creare un programma di caricamento, cancellare il flash su di esso e prendere il controllo della scheda / chip. Ottieni un micro braccio basato su lpc, stesso affare guarda il protocollo di programmazione della porta seriale. Prendi un sam7s o qualcosa con un arm7 che ha un jtag tradizionale, prendi un olimex wiggler o un jtag-tiny (io consiglio quest'ultimo). Prendi confidenza con openocd. Il swd di ARM è più doloroso del normale jtag, ma in questo mercato prevarrà (per i prodotti a base di corteccia-m). In breve, impara i vari modi che i fornitori forniscono nella programmazione dei circuiti. Di tanto in tanto farai le assi di mattoni e vorrai sentirti a tuo agio nel toglierle. In questo modo, scrivi del codice per analizzare i file intel hex, srec ed elf, un giorno potresti aver bisogno di scrivere un caricatore e devi supportare uno o più di questi formati popolari.

Hai menzionato gli strumenti. Non puoi sbagliare imparando gcc e binutils, impara come eseguire la compilazione incrociata, almeno per le piattaforme supportate (di solito coinvolge --target = msp430 --prefix = / qualcosa per esempio). Le piattaforme supportate per la linea principale gcc e binutils sono un target mobile, quindi avrgcc e mspgcc e simili sono fondamentalmente fatti per te. Devi imparare a scrivere gli script del linker, come scrivere il tuo codice C in modo che, ad esempio, le tabelle fisse vengano visualizzate nella rom e non nella ram. Prova anche a smontare i binari, devi assicurarti che le tabelle siano nel posto giusto, assicurarti che il codice sia dove pensi che sia, che le tabelle vettoriali e il codice di avvio / avvio siano dove il processore ha bisogno che sia stivale. Inoltre non fa male scoprire cosa fanno le ottimizzazioni del compilatore e come appare il codice C quando viene compilato in codice assembler / macchina. se possibile, non limitarti a gcc / gnu. llvm è un giocatore forte, ha il potenziale per passare da gcc come strumento migliore. Potresti aver già utilizzato sdcc. prova le versioni eval di kiel, iar, ecc. Scoprirai rapidamente che ci sono molte aree grigie negli standard C / C ++ e ogni compilatore le interpreta in modo diverso, anche differenze drammatiche nella qualità del codice prodotto dallo stesso livello sorgente di livello. Se ti attieni a questa professione, ci saranno momenti in cui sarai costretto a usare un compilatore non così eccezionale e dovrai aggirare le sue verruche e debolezze. Nel settore dei desktop puoi spesso farla franca rifiutandoti di utilizzare strumenti non conformi agli standard. Nel mondo dei microcontrollori, a volte ottieni quello che ottieni e basta. A volte ci sono fornitori che modificano / migliorano il linguaggio C per soddisfare le loro caratteristiche hardware o presumibilmente per semplificarti la vita (mi vengono in mente i semi di coniglio e xmos). (xmos è una piattaforma molto interessante per molti motivi, la considero avanzata, ma dai suoni della tua esperienza probabilmente sei pronto, gli strumenti sono scaricabili gratuitamente, un simulatore davvero buono, importante per imparare a studiare .vcd / forme d'onda del tuo codice in esecuzione).

chibios è un altro da guardare.

La creazione di bootloader di successo è un'abilità importante. Il bootloader, o almeno la parte iniziale di vuole essere solido come una roccia, non vuoi fornire un prodotto che sia facilmente murabile. Un semplice avvio con un modo per ricaricare la parte dell'applicazione della flash senza compromettere la parte di accesso del bootloader è la chiave.

Le schede eval stellaris sono caricate con periferiche, sebbene forniscano librerie che vale la pena imparare, specialmente dal momento che il modo in cui ti dicono che funziona e come funziona effettivamente differiscono e devi esaminare il loro codice e altre risorse per scoprirlo.

Essendo un fan di avr, se ancora là fuori, ti consiglio di ottenere una farfalla avr. Impara un po 'di programmazione seriale, salda un connettore e riprogrammalo. Ci sono alcune periferiche per imparare a programmare.

forse prendi un ex semi dallas, ora massima credo, un dispositivo a filo. Come i loro sensori di temperatura. Ancora più doloroso di i2c e mdio con il loro bus dati bidirezionale, questa cosa un filo, è un filo (e terra). Potenza, da master a dipendente e dipendente da padroneggiare tutto su un filo.

Quando ero dove sei ora, ho trovato divertente decodificare i protocolli di telecomando a infrarossi. I moduli di ricezione IR sono facili da trovare, in realtà Radio Shack ne aveva uno buono. Fondamentalmente l'opposto del bit banging, si desidera misurare il tempo tra i cambiamenti di stato, utilizzando quel rilevamento di temporizzazione e / o decodificare il protocollo. Non è necessario un ricevitore universale, va bene un protocollo alla volta. Allo stesso modo essere in grado di inviare comandi bitbang a un led ir, in particolare se si batti la frequenza portante.

Anche parlare con una scheda SD tramite spi è probabilmente una buona idea. Sicuramente impara a cancellare e programmare parti i2c e / o spi flash, ti imbatterai spesso in questi per numeri di serie e indirizzi mac e simili.

Raccomando anche di imparare i protocolli Ethernet di base. Essere in grado di analizzare e creare pacchetti arp e udp (da zero) (e anche icmp / ping). Abbastanza facile creare uno stack udp se imbrogliate un po ', non seguendo le regole effettive di arp, se qualcuno vi invia qualcosa, rimandate la risposta al mac / ip di invio. O forse arrivare al punto di guardare i pacchetti arp per altre persone che vanno a comprare e tengono traccia degli indirizzi mac / ip intorno a te. tcp richiede molto più lavoro, fattibile, ma è meglio leggerlo prima che cercare di implementarlo.

Buona fortuna e, cosa più importante, divertiti.

Se non ti dispiace se te lo chiedo, quanti anni avevi "quando eri dove sono adesso?"
Direi all'inizio / metà degli anni '20 quando ero a un punto in cui mi sono interessato a provare microcontrollori e avevo un lavoro e potevo permettermelo. A quel tempo la foto era quella giusta ed era di circa $ 150 per il più economico di qualsiasi tipo di configurazione, e quello era solo un programmatore zif socket per una parte con foro passante, usava una scheda prototipi radio shack e dovevo comprare oscillatori, ecc. per iniziare. Il volume di tabelloni sotto i $ 50 oltre a Internet ha cambiato totalmente il gioco. Avrei avuto circa 15 anni se ciò che era disponibile oggi fosse disponibile allora.
Dovevi rimuovere la parte dalla scheda, inserirla nel programmatore, riprogrammarla, quindi rimettere la parte nella scheda. Niente di tutto questo nelle cose del circuito.
Sì, questo è in realtà il mondo in cui ho lavorato più o meno ma per molto molto meno. La maggior parte delle volte uso l'arduino come un modo per programmare, quindi lo tolgo e lo metto in qualsiasi destinazione voglio. Sono contento che tu avessi più di 20 anni quando hai iniziato perché non sono entrato in questa roba fino a quando non sono arrivato al college e ho capito che c'era un universo al di fuori di Java sul desktop. È stata colpa mia però, hai ragione sul fatto che è molto più facile iniziare presto oggi.
Allo stesso tempo, anche se da adolescente il vic20 e il pc ibm erano nuovi di zecca e costavano una fortuna, ma con un'ispirazione ben piazzata i miei genitori comprarono (uno, beh, entrambi) nel caso in cui uno dei bambini avesse imparato qualcosa da esso e All'epoca ho fatto l'equivalente, ho letto i manuali di base e ho scritto programmi per imparare ogni comando. In seguito ho imparato le cose da fare con l'assemblatore, poi con C e alla fine dopo aver avuto un vero lavoro e dei soldi e altri ingegneri per parlarmi di questi microcontrollori, POI ho intrapreso quella strada.
Per me, IMO, atmel avr butterfly era l'arduino del giorno, una scheda completamente funzionante da $ 20, con il microcontrollore, programmabile sul campo (aggiungi un connettore a tre fili e un connettore dsub a 9 pin). Aveva anche un display e altre cose e I / O di riserva. poi è uscito il dallas tini (ho scartato il java e ho scritto uno stack udp nell'assembler 8051). ezusb, anche l'8051 ha aperto il mondo USB. e queste schede sotto i $ 50 hanno continuato ... Presumo che il launchpad msp430 e la scoperta della prima linea di valore vengano venduti in perdita per ottenere il prodotto là fuori.
Oggi è un mondo completamente diverso e, purtroppo, troppi programmatori sono molto lontani da ciò che sta realmente accadendo nei compilatori, nel processore, nei bus e nei protocolli, ecc. (A causa dei linguaggi di altissimo livello). Con così tanto facile ottenere informazioni, hardware e simulatori, non viene utilizzato. Felice di vedere qualcuno con un interesse, per favore continua così.
Olin Lathrop
2011-07-01 00:43:11 UTC
view on stackexchange narkive permalink

Questa è una grande domanda. Sfortunatamente non esiste un modo per imparare lo sviluppo di microcontrollori incorporati, proprio come con l'apprendimento di quasi tutto il resto. Presumo che dal momento che stai chiedendo, non vuoi solo portare a termine un progetto specifico ma vuoi davvero capire cosa sta succedendo in modo da poter portare a termine qualsiasi progetto in seguito. Questo è un buon inizio.

Non c'è sostituto per fare alcuni progetti in assembler per capire veramente le cose. Parte del lavoro dei linguaggi di alto livello è nascondere parte della complessità, ma questo oscura anche le cose che vuoi capire. Arduino è ancora un altro livello da quello. Può andare bene per qualcuno che non vuole sapere come funzionano le cose per fare qualcosa, ma è davvero brutto se l'obiettivo è imparare i dettagli. Quindi abbandona arduino, dimentica di avere un compilatore, arrotola i tuoi sleaves e preparati a tuffarti davvero.

Il primo punto da cui iniziare con qualsiasi microcontrollore è con la sua scheda tecnica. Le varie linee di micrcontrollori hanno dettagli differenti, ma i concetti sono gli stessi. Scegline uno e mantienilo fino a quando non avrai completato alcuni progetti e ti sentirai a tuo agio. I PIC TI MSP430, Atmel e Microchip sono tutte linee di microcontrollori tradizionali. Sono un ragazzo di PIC, quindi ne parlerò. Non è sbagliato andare con uno degli altri, ma penso che ci sia un supporto della comunità più accessibile per i PIC là fuori, e la linea PIC è molto ampia, quindi sarà più facile andare a micro più grandi e più piccoli da dove inizi.

Se inizi con la linea PIC, ti consiglio il 18F2520. È un microcontrollore abbastanza capace, viene fornito in un pacchetto a 28 pin facile da avvitare, ha una discreta quantità di memoria di programma e RAM e un set decente di periferiche comuni. Prendi una piccola manciata e usala per iniziare anche per piccoli progetti che avrebbero potuto essere realizzati con qualcosa di meno. Il punto è conoscerlo bene. Alla fine vorrai fare qualcosa che richiede più di quello che il PIC può fare. Si spera che a quel punto sarai abbastanza bravo con le cose di base e potrai facilmente sostituire un modello diverso. In realtà, tutti i PIC 18F sono gli stessi tranne che per la quantità di pin, memoria del programma, RAM e mix di periferiche. Dopo alcuni progetti con il 18F2520, non avrai problemi a saltare direttamente a qualsiasi PIC 18.

Se finisci per farlo professionalmente, alla fine ti imbatterai in requisiti che impongono qualcosa di più piccolo o più economico . Questo è quando guardi le famiglie 16F o forse anche 12F o 10F. Le cose sembreranno in gran parte familiari, ma alcune cose saranno un po 'più difficili. Questo non dovrebbe essere un problema da gestire se inizi con una solida conoscenza di un 18F. Al giorno d'oggi, le famiglie 16F e inferiori sono in realtà solo per la produzione di volume o forse quando lo spazio fisico e talvolta il potere sono molto importanti. C'è poco vantaggio in loro rispetto a un 18F per un hobbista.

Salendo, puoi guardare le 24, 30 e 33 famiglie. Questi sono fondamentalmente tutti uguali tranne che per alcune piccole rughe come il voltaggio a cui corrono, la velocità massima e se hanno l'ALU matematica DSP o meno. Sono più complicati da programmare in assembler, ma anche stranamente più facili. Ci sono più istruzioni da tenere a mente, ma è quindi anche più facile fare molte cose. Questo è anche un buon punto per iniziare a tornare a C se è lì che vuoi andare. Il compilatore C per queste parti è in realtà abbastanza buono, a differenza dei compilatori C per PIC 18 e inferiori. È anche più facile combinare C e assemblaggio nello stesso progetto su queste parti. Non dimenticare però l'assemblatore per questi. Sarà comunque utile sapere quando devi scrivere un bootloader, gestire il multitasking che esegue atti innaturali sullo stack, scrivere codice davvero stretto per leggere un mucchio di A / D e calcolare il ciclo di lavoro PWM per il prossimo impulso del tuo Alimentazione PFC da 100 KHz, ecc.

Una cosa bella della linea Microchip è che un singolo programmatore / debugger funziona in tutto il lotto. Se sei seriamente intenzionato a farlo professionalmente, prendi il Real Ice. Per risparmiare un po 'di soldi, puoi ottenere l'ICD3, che è solo un Real Ice leggermente ridotto. L'unica cosa che non è è un ICE (il marketing stupido colpisce ancora), ma è un buon debugger in-circuit. MPLAB, il loro debugger e simulatore IDE, funziona anche su tutta la linea di prodotti.

Ancora una volta, per i professionisti o per coloro che vogliono diventare professionisti in questo, andate alla conferenza annuale Microchip Masters. Sì, è in Arizona in estate, ma tu sei lì per imparare, quindi dimentica i 115 gradi all'ombra. (In realtà mi piace esplorare l'Arizona in estate, quindi esco una settimana prima con la mia piccola tenda e giro per l'entroterra. È incredibile quante poche persone siano nelle vaste foreste nazionali a breve distanza da Phoenix.) Anche Masters è un buon posto per raccogliere strumenti di sviluppo. Di solito li vendono per qualcosa come il 45% di sconto su Masters. (Sono un partner di progettazione Microchip di livello platino, quindi ottengo sempre uno sconto del 45%, motivo per cui non sono all'altezza dello sconto esatto Masters).

Se inizi a esplorare i microcontrollori da facendo progetti PIC, dai un'occhiata al mio sito web dove ottengo maggiori dettagli su come di solito strutturo i progetti PIC e ti do un sacco di strumenti gratuiti per fare alcune cose fantasiose. Se comprendi una buona progettazione e pulizia del software, sarai esasperato da MPASM. Fai uno o due progetti per capire cosa fa e cosa non fa, quindi guarda i miei wrapper e altri strumenti che ti consentono di fare molto di più mentre ti attieni alle buone pratiche di progettazione del software. L'assemblatore non deve essere un disastro solo perché la maggior parte lo è. Se ti piace davvero, potresti fermarti alla lezione che insegno al Master quest'estate su questo argomento.

Ehi Olin, prima di tutto, grazie per aver dedicato così tanto tempo a quella risposta. Secondo, ho già scelto la linea Atmel come arma preferita da quando ho fatto 4 o 5 progetti con essa ... scusa = (. Non sono sicuro di quanto tempo mi dedicherò Il montaggio avviene per scelta però, controllerò il tuo sito web e penso che i tuoi suggerimenti si dimostreranno utili anche se al momento non sto seguendo la linea PIC.
È molto facile abbandonare la sandbox di arduino e scrivere applicazioni per l'hardware in asm o C o qualsiasi altra cosa per cui puoi trovare un compilatore. Molte altre buone piattaforme, il launchpad msp430, il rilevamento della linea di valore stm32, sam7s.
Jon L
2011-07-01 01:36:38 UTC
view on stackexchange narkive permalink

Per rispondere direttamente alla tua domanda su "Quello che voglio sapere":

Ho scoperto che chiamare il compilatore direttamente tramite riga di comando, familiarizzare con le sue opzioni e poi scrivere i tuoi Makefile in fare tutte le tue build è stato estremamente utile per me nell'apprendimento del processo di costruzione, che suona come qualcosa che vuoi imparare. Questo fondamentalmente separa la catena di strumenti dall'IDE e ti consente di apprendere la catena di strumenti più dell'IDE. Questa è una cosa continua che sto cercando di migliorare.

Ho notato che hai usato arduino in passato, il che è fantastico perché ora posso consigliare di usare avr-gcc come il tuo compilatore da ora in poi. Provalo, è disponibile su tutte le piattaforme (Linux, WinAVR per Windows, Mac) e la documentazione sulla catena di strumenti avr-gcc e avrdude (programmatore) è eccezionale, e dovrebbero esserci molti Makefile di esempio disponibili per te impara da. Una buona parte di queste informazioni è trasferibile anche ad altro hardware, ad esempio arm-gcc.

Perfetto, potrebbe essere la prima cosa che provo. E ancora più perfetto perché ARM sarà quasi certamente la seconda architettura che imparo una volta che sarò completamente a mio agio con gli AVR
Jay Atkinson
2011-07-01 04:37:43 UTC
view on stackexchange narkive permalink

Ecco un'altra idea. Implementa il tuo sistema di attività in background che ti consente di creare attività a tempo e attività su richiesta che vengono eseguite solo quando le attività a tempo non sono in esecuzione. Non è un vero RTOS, ma si comporta più come uno scheduler cooperativo. Converti un progetto precedente per utilizzare il nuovo sistema di tasking.

Questo tipo di sistema ha funzionato molto bene su un prodotto che usavamo su un 8051. Era originariamente scritto in assembly, ma in seguito lo abbiamo convertito in C per aiutare con il porting su altre architetture. Era davvero fluido dove il battito cardiaco di questo sistema era su un tick di 5 ms e le attività a tempo venivano eseguite con incrementi di 5 ms. Avevamo un file che usavamo per denominare tutte le nostre attività (puntatori a funzione) con i loro valori temporali e quelli che erano su richiesta. Quel file è stato quindi convertito in assembly o in C a seconda di come lo abbiamo implementato e compilato nel codice.

Se riesci a farlo funzionare abbastanza bene, puoi iniziare a scrivere il tuo semplice RTOS per qualcosa di un po ' più pesante.

Sembra piuttosto interessante! Qualche suggerimento per risorse di apprendimento su programmatori di attività, ecc?
Il Capitolo 15, Real Time Kernels di "The Firmware Handbook", di Jean Labrosse, ed Jack Ganssle è un buon punto di partenza, e anche il resto del libro è consigliato.
Majenko
2011-07-01 00:12:51 UTC
view on stackexchange narkive permalink

Una cosa che non hai menzionato sono le comunicazioni.

Sembra che un buco che potresti collegare sarebbe imparare le varie comunicazioni standard protocolli utilizzati nell'industria - cose come:

ecc.

Ah, sì comunicazioni +1 Leggerò sicuramente questi link, avete suggerimenti di progetto che mi costringano ad applicare ciò che "imparo" solo leggendoli?
L'interfacciamento con qualsiasi dispositivo che abbia quel bus disponibile è spesso un buon progetto. Forse scrivere un driver di qualche tipo. Ci sono molti chip per bus come I2C, SPI, 1wire ecc. Quelli menzionati nella risposta sono più bus da dispositivo a dispositivo. Potrei inserire il MIDI, che potrebbe essere interessante.
user924
2011-07-01 18:38:24 UTC
view on stackexchange narkive permalink

Quindi la domanda è "Come imparare, quando ogni toolchain è una scatola nera?"

Suggerisco di trovare uno sperimentatore molto vecchio pronto all'uso, scheda di debug con qualsiasi CPU comune. Qualcosa come un aggeggio largo 2 piedi con CPU, LED, interruttori e pulsante "Esegui un singolo passaggio". Crea manualmente un programma a ciclo lungo di 5-10 istruzioni utilizzando le istruzioni binarie del codice macchina dal foglio dati. Mettilo su un enorme chip ROM collegabile. Inserisci la ROM, premi accensione / ripristino ed esegui il debug passo dopo passo.

Joe
2011-07-01 00:03:12 UTC
view on stackexchange narkive permalink

Qual è la tua comprensione di registri, operazioni e simili su un micro a 8 bit? Potrebbe essere una buona idea fare un piccolo assemblaggio. Questo ha il vantaggio di insegnarti esattamente cosa sta succedendo. Questo può aiutare a risolvere strani bug con linguaggi superiori.

Gli AVR hanno un semplice assemblatore e registri. È una buona piattaforma per bagnare il tuo feed. Ci sono anche alcuni buoni tutorial per quella piattaforma là fuori.

Questo ti darà il risultato finale di ciò che sta facendo il micro. Quindi il passaggio successivo di come il compilatore e il linker portano C / Arduino al codice macchina sarà più facile da capire.

Ho già utilizzato 3 diversi linguaggi di assemblaggio. Penso di stare bene su questo fronte. Grazie per l'input e sono assolutamente d'accordo sul fatto che il learning assembly abbia aiutato a scrivere meglio C (o almeno a capire cosa sto scrivendo)
Sandeep
2011-07-05 08:20:03 UTC
view on stackexchange narkive permalink

Realtime Mantra contiene diversi articoli sullo sviluppo di software incorporato.



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...