Hai bisogno di aiuto per scegliere la dimensione del flash in un microcontrollore


9

Devo decidere di selezionare la dimensione del flash e la RAM per un progetto. Il microcontrollore che preferisco usare è la serie TI MSP430. A causa del suo basso consumo energetico e dei costi delle serie di valore. Tuttavia, sono completamente alle prime armi nel decidere la raccolta dei requisiti. La maggior parte della mia esperienza di programmazione riguarda i sistemi basati su desktop in cui generalmente le dimensioni del programma, la RAM e la velocità del processore non sono molto importanti per le attività algoritmiche comuni.

Ho le seguenti domande:

  1. Esistono linee guida o pratiche standard per decidere la dimensione della RAM e Flash per un microcontrollore?
  2. Quante righe di codice (C) si traducono in quale quantità di dimensioni Flash sull'MCU?
  3. Il linguaggio assembly è l'unica via d'uscita se le dimensioni di Flash devono essere ridotte al minimo?

Per quanto riguarda la selezione generale di un microcontrollore per un progetto, come fanno i professionisti in questo campo a decidere il microcontrollore più appropriato per l'attività? Quali risorse cercano? Quali linee guida seguono?

Risposte:


7

Le risposte a tutte le tue domande dipenderanno da ciò che vuoi fare.

Come hai detto, sei un principiante, quindi ti suggerisco di utilizzare il più grande microcontrollore e provare a fare il progetto. Dopodiché puoi visualizzare quanto codice usi e quindi ridimensionarlo in base a ciò che è stato utilizzato.


Concordato. Inizia con qualcosa di grande e, se necessario, riduci alla parte più piccola che soddisfa i tuoi requisiti finali.
W5VO,

"Più grande" deve essere qualificato con "Nella serie che stai prendendo di mira". Trova le periferiche di cui hai bisogno e la classe di velocità di cui hai bisogno, scegli un'architettura / famiglia e quindi sviluppa con il processore più grande di quella famiglia. Non iniziare con qualcosa con 512kB di Flash e 64kB di RAM perché è il più grande microcontrollore che puoi trovare; restringilo a Cortex-M3 vs. AVR vs. PIC18 vs. MSP430 (ad esempio) prima di iniziare a preoccuparti delle dimensioni. Sospetto che Daniel se lo aspettasse, ma ho pensato che dovesse essere dichiarato da qualche parte.
Kevin Vermeer,

7

Per quanto riguarda msp430, è una buona architettura, strumenti abbastanza buoni là fuori mspgcc e mspgcc4 e llvm per quella materia. binutils senza patch. Puoi ottenere un launchpad per meno di $ 5 a quel prezzo, acquistarne alcuni (alla fine riuscirai a mettere qualcosa in cortocircuito o a cortocircuitare e scioglierlo, avere un ricambio, specialmente a questo prezzo) ...

Scarica gli strumenti, sono tutti gratuiti, scrivi alcune righe di codice, impara come collegarlo, vedi quanto diventa grande il binario, fatti un'idea di come incorporare, linee di codice in dimensioni rom, ecc.

Come lo fanno i professionisti. Quasi tutti i modi in cui puoi immaginare:

Alcune società il mandato viene dall'alto e non c'è altro da fare che uscire. E potresti non sapere mai perché è stata scelta quella piattaforma.

A volte l'appaltatore / cliente preferito determina la piattaforma, a volte puoi educare / negoziare, a volte no.

Alcune persone hanno solo un preferito, paura dell'ignoto, qualunque cosa. Lo stesso motivo per cui alcune persone acquistano solo una marca di auto, perché mio padre l'ha fatto e suo padre ha fatto prima di quello, e questo potrebbe essere il motivo.

Alcune persone si concentrano sugli strumenti. Anche in questo caso hai persone fedeli al marchio, che si limitano alla loro società di compilazione preferita e agli obiettivi che supportano, o allo strumento open source preferito e a ciò che supporta. Sistema operativo incorporato preferito e limite alle destinazioni che supporta.

In alcuni casi si tratta di strumenti ma in un modo diverso, nel tempo potresti aver investito molti soldi in contratti di supporto annuali con un fornitore (ad esempio arm o xilinx o motorola per esempio) e potrebbe essere che ti sia piaciuto il loro supporto e non vuoi cambiare o il diavolo che conosci è meglio del diavolo che non conosci. O potrebbe essere che, poiché gli altri 5 progetti attivi nell'azienda utilizzano questa cosa e abbiamo già un contratto di supporto e continueremo a pagare per quell'anno dopo anno, devi scegliere una di quelle soluzioni di fornitori.

A volte si tratta di salvare i millepiedi. Questa parte è più economica dell'1,5% rispetto a quella parte, falla funzionare con questa parte, non preoccuparti della NRE, pensa ai risparmi di produzione in termini di volume.

A volte si tratta di aspetti negativi. Un fornitore potrebbe aver fregato la tua azienda in un modo o nell'altro. Mancato rispetto della fornitura pubblicizzata di parti che causa ritardi o annullamento dei prodotti. Esca e scambia truffe (la tassa di $ 50.000 per il software non includeva la tassa di $ 1200 per il dongle richiesto per sbloccare la licenza, che è un elemento di costo aggiuntivo. Oh e quello era per utente per la licenza mobile). Una volta firmata la NDA per vedere il manuale di riferimento dei programmatori o la guida alla progettazione di riferimento, scopri quanto sia terribile la loro ingegneria e puoi scegliere di inserire nella lista nera tutti i loro prodotti per la vita. Storia passata con orribile supporto tecnico. Qualsiasi numero di motivi potrebbe non consentire mai ai loro addetti alle vendite di entrare nella porta principale o impedirti di rivedere il loro sito Web.

A volte ha a che fare con prestazioni, interfacce, ecc. Caso in questione afferma che hai un'interfaccia cablata e necessita di un pull up, il marchio di microcontrollori XYZ per $ 3 per parte ha un set di pin I / O che possono essere utilizzati senza altri hardware esterni richiesti, il marchio ABC ha una parte di $ 3 che richiederà un transistor esterno e un resistore per farlo funzionare al minimo. Il tuo esempio di msp430, dice che riguarda il consumo di energia, la parte A potrebbe richiedere all'utente di utilizzare solo una batteria AAA e funzionare per mesi, la parte B potrebbe aver bisogno di due batterie AAA e funzionare per settimane.

Il caso più raro di tutti è effettivamente fare l'ingegneria, sondare tutti i fornitori, fare la matematica del consumo di energia, il prezzo per unità della matematica del tuo prodotto, la grandezza di una rom di cui abbiamo bisogno e la frequenza con cui eseguire il chip, logica di colla, avanti e indietro. Di solito qualcuno (capo / cliente / ingegnere senior) prende i suoi anni di esperienza e spara dall'anca (spesso usando uno o più di quanto sopra) per scegliere il percorso (spesso un buon percorso risparmiando tonnellate di tempo in programma e dollari) e il la progettazione viene eseguita una volta per ottimizzare la piattaforma scelta.

La mia raccomandazione personale è quella di essere flessibile. La maggior parte dei marchi / famiglie di microcontrollori in qualche forma o moda può essere posseduta su una scheda di valutazione per meno di $ 50. Sparkfun, olimex o direttamente dal fornitore (ti per msp430 o stellaris, ecc.). Prova uno o più di ciascuno, fatti un'idea di ciò che è in comune e di ciò che è diverso, strumenti, caricatori, quanto sia difficile da rimuovere, ecc. Ottieni almeno due cose da questo, uno è che quando sei costretto a seguire un percorso dall'alto o dal cliente puoi raggiungere il suolo correndo, in secondo luogo quando è il tuo turno di scegliere la piattaforma sei meglio istruito su ciò che è e non è là fuori e puoi scegliere la piattaforma giusta (parola caricata) in base al problema a essere risolto.

Anche se non riesci o non puoi uscire e spendere quel tipo di denaro sull'hardware, la maggior parte ha strumenti che puoi scaricare (gratuitamente), in casi come il microchip ora puoi ottenere il compilatore C (un tempo era Hi-tech) ma devi iscriverti (rinuncia al tuo indirizzo email). gcc piace o odio sarà nel tuo futuro, desktop o incorporato, sporcarsi le mani e imparare a usarlo come cross-compilatore. Prova anche llvm, resterà in circolazione per un po 'e darà a gcc un po' di competizione seria. Comunque scrivi o trova alcuni emulatori, mame ne ha molti, gdb ne ha alcuni, ecc. Ne ho scritto uno chiamato il thumbulator su github, solo modalità pollice ARM, simile a una cortex-m3 tranne che non supporto thumb2 (posso ancora imparare un bel po ' e far funzionare i programmi su entrambi prima di passare solo all'hardware). Ho montato un emulatore msp430 ma mi sono bloccato su questo. Il set di istruzioni è così piccolo che la maggior parte del lavoro è un progetto serale o forse di sabato. Lo stesso vale per il PIC, un lungo pomeriggio e hai un simulatore di set di istruzioni con cui esercitarti. Se non altro, puoi semplicemente scrivere i programmi compilati e collegati per avere un'idea di come farlo e di quanto siano grandi i programmi, come ottimizzare i programmi per produrre codice più stretto, ecc.

Per quanto riguarda C vs assemblatore, alcuni set di istruzioni sono compatibili con C e altri no. Alcuni compilatori sono medi e alcuni sono davvero cattivi e solo alcuni sono davvero buoni (e di solito costano qualche migliaio di dollari una volta o all'anno da usare). Come per le prestazioni ovunque, se si desidera spingerlo davvero, potrebbe essere necessario un mix di linguaggio di alto livello (diciamo solo C) e assemblatore. Quindi l'abilità non sta scrivendo l'intera applicazione nell'assemblatore, l'abilità sta determinando quale codice ti sta impedendo di soddisfare i tempi / le prestazioni e quindi sapendo come risolverlo tramite C, le opzioni del compilatore, scegliendo il compilatore giusto o scrivendo l'assemblatore.

Ti consiglio di conoscere assemblatore per tutte le piattaforme che scegli di utilizzare, se nient'altro conoscenza leggibile come con embedded ti consiglio di smontare spesso (mentre capisci dove sono i tuoi problemi di prestazioni). Molte piattaforme è richiesto o desiderato un certo assemblatore per il codice di avvio.

Se si desidera risparmiare quel 10-20% sul prezzo per unità e si desidera acquistare il microcontrollore o l'oscillatore più economico / più lento o la parte flash da 32 KB anziché la parte flash da 64 KB e in grado di coprire i costi di sviluppo con il volume delle vendite e forse un lungo elenco di altre cose che potresti benissimo scegliere di scrivere tutto in assemblatore, veloce, a bassa potenza, a basso costo, clienti felici.

A seconda del tuo background finora, forse non dovresti preoccuparti di scrivere in tutti gli assemblatori e forse degli aspetti di ingegneria elettrica incorporati con i microcontrollori, leggere schemi, sapere cosa open collector, tri state, push pull, pwm, adc, dac e a lunga lista di altri termini e come usarli. bit banging i2c, spi, mdio, dallas one wire, ecc. Utilizzo di un ambito come debugger software. Anche se gli ambiti possono evidenziare le cose per te oggi (un elemento a costo aggiuntivo), dovresti essere in grado di controllare i2c e spi e alcuni altri protocolli senza i punti salienti.

Consiglio anche che per ognuna delle piattaforme con cui giochi, esci da sandbox di qualcun altro (ad esempio l'ide / ambiente di programmazione di Arduino). Scrivi il codice di avvio che porta il processore dal reset nel tuo programma principale (), fai tutto il possibile per capire come caricare / programmare il flash al punto che può comportare la scrittura del tuo caricatore anche se quelli a scaffale sono Là. Si tratta di educazione personale, più sai e puoi tirarti fuori dalla tasca posteriore e usare più controllo avrai sulla tua carriera e più zeri alla fine del numero sul tuo stipendio.

Qualunque cosa tu faccia, NON, cerca di imparare x86 come primo assemblatore su un desktop, scegli praticamente qualsiasi altra cosa e compila e simula in modo incrociato, ARM, THUMB, MSP430, PIC, AVR, anche 6502, 8051. x86 è un'istruzione orribile impostato e di conseguenza è stato trasformato e modellato in così tanti modi, microcodificato, non microcodificato, multi core, e così via. Mantieni x86 su linguaggi di alto livello e sistemi operativi ingombranti. Usalo per il tuo editor di testo e compilatori e scegli come target qualcos'altro.

Ci scusiamo per la lunga risposta ... spero sia stato utile.


hmmm, se la domanda era: come fanno i professionisti a scegliere la dimensione del flash. a volte scrivere del codice simile alla soluzione, compilare e vedere quanto è grande. Se verrà utilizzato un rtos, prendere alcuni campioni e ridimensionarli e aggiungere un fattore di sfumatura per il codice che si aggiungerà. Molto ha a che fare con l'esperienza personale nella stima. Spesso puoi scegliere di stimare e poi raddoppiarlo per ogni evenienza e il tuo capo può raddoppiare la tua stima in modo da non avere problemi e così via. E questo può aiutare perché una volta implementato puoi passare alla parte più piccola ed essere un eroe con i risparmi.
old_timer

1
Nonostante sia lunga, trovo questa risposta molto buona
Sarrk,

3

Il modo migliore per determinare i requisiti di flash / RAM per il tuo progetto è costruire un prototipo e misurarlo.

Implementa gli algoritmi core su un PC e calcola la dimensione del codice oggetto e l'utilizzo della RAM. Questo ti darà una figura da baseball con cui lavorare.

Non dimenticare di aggiungere altro al tuo budget se ti affidi alle funzionalità del sistema operativo come stdio o gestione della memoria.

Non esiste un modo diretto per confrontare le righe di codice con le dimensioni del codice compilato. Tuttavia, è possibile confrontare le architetture del processore in termini di densità del codice.


3

Penso che il modo migliore per avere "un'idea" di quali siano i tuoi requisiti, in questo caso in termini di memoria è quello di ottenere alcuni campioni di un MCU, programmarlo e vedere quanta memoria viene utilizzata. In realtà, dipenderà dal compilatore utilizzato. Se è la prima volta che programmi un MCU, non preoccuparti troppo delle specifiche. Basta selezionarne uno con molta memoria, molte periferiche, ecc. In questo modo è possibile imparare molto da un solo MCU. Quando realizzi il tuo primo progetto con quell'MCU avrai una migliore nozione di memoria di cui hai bisogno per ulteriori progetti.

L'MCU più appropriato per un'attività? Di quanti canali ADC hai bisogno? E il DAC? Cosa è più importante nella tua applicazione: prestazioni o bassa potenza? È quel tipo di domande a cui devi rispondere quando selezioni un MCU specifico.


3

Scegli un microcontrollore con il set di periferiche di cui hai bisogno. Probabilmente ci sarà una famiglia di micro che hanno la stessa / simile periferica ma diverse quantità di RAM e Flash. Inizia con il chip con la RAM / Flash più grande. Una volta che hai un prototipo funzionante, puoi passare a un micro più economico se il tuo programma si adatta.


0

I veri professionisti non scelgono un microcontrollore in isolamento, gestiscono un progetto per il massimo profitto. A seconda dei criteri di progetto che potrebbero causare la selezione di un microcontrollore che sembra essere troppo costoso, ma che si adatta bene con l'esperienza, gli strumenti, le librerie disponibili, ecc. Non prendere decisioni isolate, tieni a mente il quadro generale , in particolare la somma (costi di sviluppo + costi di produzione)!

La maggior parte dei produttori di microcontrollori offre gamme di chip, con la dimensione del flash uno dei parametri che differiscono tra i vari chip. Una scelta 'sicura' è quella di selezionare inizialmente il chip con la dimensione del flash più grande, in modo da poter ridimensionare se l'applicazione si adatta a un chip più piccolo. Ma le applicazioni tendono a crescere per adattarsi a tutte le dimensioni disponibili (e altro).

La dimensione del flash IME non è più un fattore di costo elevato, anche il numero di pin è un fattore inferiore, la dimensione della RAM sembra essere il fattore di costo maggiore.

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.