Besoin d'aide pour choisir la taille de Flash dans un microcontrôleur


9

J'ai besoin de décider de la taille de la mémoire flash et de la RAM pour un projet. Le micro contrôleur que je préfère utiliser est la série TI MSP430. En raison de sa faible consommation d'énergie et de son coût en série. Cependant, je suis un débutant complet pour décider de la collecte des exigences. La plupart de mon expérience de programmation est sur des systèmes de bureau où généralement la taille du programme, la RAM et la vitesse du processeur ne sont pas un gros problème pour les tâches algorithmiques courantes.

J'ai les questions suivantes:

  1. Existe-t-il des directives ou des pratiques standard concernant la décision de la taille de la RAM et du Flash pour un microcontrôleur?
  2. Combien de lignes de code (C) se traduisent par quelle quantité de taille Flash sur le MCU?
  3. Le langage d'assemblage est-il le seul moyen de sortir si la taille de Flash doit être maintenue au minimum?

En ce qui concerne la sélection générale d'un microcontrôleur pour un projet, comment les professionnels de ce domaine procèdent-ils pour décider du microcontrôleur le plus approprié pour la tâche? Quelles ressources rechercher? Quelles directives doivent-ils suivre?

Réponses:


7

Les réponses à toutes vos questions dépendront de ce que vous voulez faire.

Comme vous l'avez dit, vous êtes un débutant, donc je vous suggère d'utiliser le plus grand microcontrôleur et d'essayer de faire le projet. Après cela, vous pouvez visualiser la quantité de code que vous utilisez, puis la mettre à l'échelle en fonction de ce qui a été utilisé.


D'accord. Commencez avec quelque chose de grand, puis réduisez si nécessaire la plus petite partie qui répond à vos exigences finales.
W5VO

"Le plus gros" doit être qualifié de "Dans la série que vous visez". Trouvez les périphériques dont vous avez besoin et la classe de vitesse dont vous avez besoin, choisissez une architecture / famille, puis développez avec le plus grand processeur de cette famille. Ne commencez pas avec quelque chose avec 512 Ko de Flash et 64 Ko de RAM car c'est le plus grand microcontrôleur que vous puissiez trouver; restreignez-le à Cortex-M3 vs AVR vs PIC18 vs MSP430 (par exemple) avant de commencer à vous soucier de la taille. Je soupçonne que Daniel s'y attendait, mais pensait juste que cela devait être déclaré quelque part.
Kevin Vermeer

7

En ce qui concerne le msp430, c'est une bonne architecture, de très bons outils là-bas mspgcc et mspgcc4 et llvm d'ailleurs. binutils sans patcher. Vous pouvez obtenir une rampe de lancement pour moins de 5 $ à ce prix, achetez-en quelques-uns (vous finirez par briquer quelque chose ou le court-circuiter et le faire fondre, en avoir un de rechange, en particulier à ce prix) ...

Téléchargez les outils, ils sont tous gratuits, écrivez quelques lignes de code, apprenez comment le lier, voyez la taille du binaire, obtenez une idée de l'intégration, des lignes de code à la taille de la rom, etc.

Comment les pros le font-ils? Presque toutes les façons que vous pouvez imaginer:

Pour certaines entreprises, le mandat vient d'en haut et il n'y a rien d'autre à faire que d'arrêter. Et vous ne saurez peut-être jamais pourquoi cette plate-forme a été choisie.

Parfois, l'entrepreneur / client préféré dicte la plate-forme, parfois vous pouvez éduquer / négocier, parfois non.

Certaines personnes ont juste un favori, la peur de l'inconnu, peu importe. Même raison pour laquelle certains achètent une seule marque de voiture, parce que mon père l'a fait et son père avant cela, et cela pourrait être la raison entière.

Certaines personnes se concentrent sur les outils. Ici encore, vous avez des gens fidèles à la marque, se limitant à leur société de compilation préférée et à toutes les cibles qu'ils prennent en charge, ou à l'outil open source préféré et à ce que cela prend en charge. Système d'exploitation intégré préféré et limite aux cibles prises en charge.

Dans certains cas, il s'agit d'outils, mais d'une manière différente, au fil du temps, vous avez peut-être investi beaucoup d'argent dans des contrats de support annuels avec un fournisseur (disons arm ou xilinx ou motorola par exemple) et il se peut que vous ayez aimé leur support et ne veux pas changer ou le diable que vous connaissez est meilleur que le diable que vous ne faites pas. Ou cela pourrait être dû au fait que les 5 autres projets actifs de l'entreprise utilisent cette chose et que nous avons déjà un contrat de support et continuerons à payer pour cette année après année, vous devez choisir l'une de ces solutions de fournisseurs.

Parfois, il s'agit de sauver les millipennies. Cette pièce est 1,5% moins chère que cette pièce, faites-la fonctionner avec cette pièce, ne vous souciez pas du NRE, pensez aux économies de fabrication en volume.

Parfois, il s'agit de négatifs. Un fournisseur peut avoir vissé votre entreprise d'une manière ou d'une autre. Le non-respect de la fourniture de pièces annoncée entraînant des retards ou l'annulation de vos produits. Les arnaques aux appâts et aux commutateurs (les frais de 50 000 $ pour le logiciel n'incluaient pas les frais de 1 200 $ pour le dongle requis pour déverrouiller la licence, c'est un élément de coût supplémentaire. Oh et c'était par utilisateur pour la licence flottante). Une fois que vous avez signé le NDA pour voir le manuel de référence du programmeur ou le guide de conception de référence, vous découvrez à quel point leur ingénierie est affreuse et vous pouvez choisir de mettre tous leurs produits sur liste noire à vie. Histoire passée avec un support technique horrible. Un certain nombre de raisons peuvent vous empêcher d'autoriser leurs vendeurs à la porte d'entrée ou vous empêcher de consulter à nouveau leur site Web.

Parfois, cela a à voir avec les performances, les interfaces, etc. Par exemple, vous avez une interface filaire et nécessite un pull up, la marque de microcontrôleur XYZ pour 3 $ par pièce a un ensemble de broches d'E / S qui peuvent être utilisées sans aucun autre matériel externe requis, la marque ABC a une pièce de 3 $ qui nécessitera un transistor et une résistance externes pour le faire fonctionner au minimum. Votre exemple du msp430, disons qu'il s'agit de consommation d'énergie, la partie A peut ne nécessiter que l'utilisateur d'utiliser une pile AAA et fonctionner pendant des mois, la partie B peut avoir besoin de deux piles AAA et fonctionner pendant des semaines.

Le cas le plus rare est de faire l'ingénierie, de sonder tous les fournisseurs, de faire les calculs de consommation d'énergie, le prix par unité de calcul de votre produit, la taille d'une rom dont nous avons besoin et la fréquence à laquelle la puce doit fonctionner, logique de colle, et ainsi de suite. Habituellement, quelqu'un (patron / client / ingénieur principal) prend ses années d'expérience et tire de la hanche (souvent en utilisant un ou plusieurs des éléments ci-dessus) pour choisir le chemin (souvent un bon chemin pour économiser des tonnes de temps en calendrier et en dollars) et le l'ingénierie est effectuée une fois pour affiner la plate-forme choisie.

Ma recommandation personnelle est d'être flexible. La plupart des marques / familles de microcontrôleurs, sous une forme ou une mode, peuvent être stockées sur une carte d'évaluation pour moins de 50 $. Sparkfun, olimex ou directement auprès du vendeur (ti pour msp430 ou stellaris, etc.). Essayez un ou plusieurs de chacun, ayez une idée de ce qui est en commun et de ce qui est différent, des outils, des chargeurs, de la difficulté à débrider, etc. Vous obtenez au moins deux choses à partir de cela, l'une est que lorsque vous êtes forcé de descendre un chemin d'en haut ou de client, vous pouvez commencer à fonctionner, deuxièmement, lorsque c'est à votre tour de choisir la plate-forme, vous êtes mieux informé de ce qui est et n'est pas là-bas et pouvez choisir la bonne plate-forme (mot chargé) en fonction du problème à résoudre. être résolu.

Même si vous ne pouvez pas ou ne pouvez pas dépenser ce genre d'argent pour le matériel, la plupart ont des outils que vous pouvez télécharger (gratuitement), dans des cas comme les micropuces, vous pouvez maintenant obtenir le compilateur C (auparavant Hi-tech) mais devez vous abonner (renoncer à votre adresse e-mail). gcc l'aime ou le déteste, il sera dans votre futur, de bureau ou intégré, mettez la main à la pâte et apprenez à l'utiliser comme compilateur croisé. Essayez aussi llvm, il sera là pendant un certain temps et donnera à gcc une sérieuse concurrence. Quoi qu'il en soit, écrivez ou trouvez des émulateurs, mame en a plusieurs, gdb en a, etc. et exécutez les programmes sur les deux avant de passer au matériel uniquement). J'ai concocté un émulateur msp430 mais j'ai un peu calé là-dessus. L'ensemble d'instructions est si petit que la majeure partie du travail est une soirée ou peut-être un projet du samedi. Il en va de même pour le PIC, un long après-midi et vous avez un simulateur de jeu d'instructions avec lequel vous pouvez pratiquer l'embarqué. Si rien d'autre, vous pouvez simplement écrire les programmes compiler et lier pour avoir une idée de la façon de le faire et de la taille des programmes, comment régler les programmes pour produire du code plus serré, etc.

En ce qui concerne C vs assembleur, certains jeux d'instructions sont compatibles C et d'autres non. Certains compilateurs sont de taille moyenne et certains sont vraiment mauvais et seuls quelques-uns sont vraiment bons (et coûtent généralement quelques milliers de dollars une fois ou par an à utiliser). Comme pour les performances n'importe où si vous voulez vraiment les pousser, un mélange de langage de haut niveau (disons simplement C) et d'assembleur peut être nécessaire. Donc, la compétence n'écrit pas l'application entière dans l'assembleur, la compétence consiste à déterminer le code qui vous empêche de respecter le calendrier / les performances, puis à savoir comment résoudre ce problème via C, les options du compilateur, le choix du bon compilateur ou l'écriture de l'assembleur.

Je vous recommande de connaître l'assembleur pour toutes les plates-formes que vous choisissez d'utiliser, si rien d'autre n'est lisible, comme avec l'embarqué, je vous recommande de le démonter souvent (tout en déterminant où se trouvent vos problèmes de performances). De nombreuses plates-formes, un assembleur est requis ou souhaité pour le code de démarrage de toute façon.

Si vous souhaitez économiser 10 à 20% sur le prix unitaire et que vous souhaitez acheter le microcontrôleur ou l'oscillateur moins cher / plus lent, ou la partie flash de 32 Ko au lieu de la partie flash de 64 Ko et peut couvrir les coûts de développement avec le volume des ventes, et peut-être une longue liste d'autres choses que vous pouvez très bien choisir d'écrire le tout en assembleur, rapide, à faible puissance, à faible coût, des clients satisfaits.

Selon votre expérience jusqu'à présent, vous ne devriez peut-être pas vous soucier d'écrire dans tous les assembleurs et peut-être des aspects de l'électrotechnique intégrés aux microcontrôleurs, de lire les schémas, de savoir ce que le collecteur ouvert, l'état tri, push pull, pwm, adc, dac et un longue liste d'autres termes et comment les utiliser. bit banging i2c, spi, mdio, dallas one wire, etc. Utilisation d'un oscilloscope comme débogueur logiciel. Même si les portées peuvent mettre en évidence des choses pour vous aujourd'hui (un élément de coût supplémentaire), vous devriez être en mesure de surveiller les protocoles i2c et spi et certains autres protocoles sans les points forts.

Je recommande également que pour chacune des plates-formes avec lesquelles vous jouez, sortez de quelqu'un d'autre sandbox (l'environnement Arduino ide / programmation par exemple). Écrivez le code de démarrage qui prend le processeur de réinitialisation dans votre programme principal (), faites autant que vous le pouvez pour comprendre comment charger / programmer le flash au point que cela peut impliquer d'écrire votre propre chargeur même si ceux de l'étagère sont Là. Il s'agit de l'éducation personnelle, plus vous en savez et pouvez sortir de votre poche arrière et utiliser plus vous aurez de contrôle sur votre carrière et plus de zéros à la fin du numéro sur votre chèque de paie.

Quoi que vous fassiez, n'essayez PAS d'apprendre x86 en tant que premier assembleur sur un bureau, choisissez à peu près n'importe quoi d'autre et compilez et simulez, ARM, THUMB, MSP430, PIC, AVR, même 6502, 8051. x86 est une horrible instruction ensemble et en conséquence a été transformé et façonné de tant de façons, microcodé, pas microcodé, multi-cœur, et ainsi de suite. Gardez le x86 dans des langages de haut niveau et des systèmes d'exploitation volumineux. Utilisez-le pour votre éditeur de texte et vos compilateurs et ciblez autre chose.

Désolé pour la longue réponse ... j'espère que cela a été utile.


hmmm, si la question était de savoir comment les pros choisissent la taille du flash. écrivez parfois du code qui ressemble à la solution, compilez et voyez sa taille. Si un rtos va être utilisé, prenez des échantillons et dimensionnez-les et ajoutez un facteur de fudge pour le code que vous ajouterez. Cela a beaucoup à voir avec l'expérience personnelle de l'estimation. Souvent, vous pouvez choisir d'estimer puis doubler juste au cas où et votre patron peut doubler votre estimation afin qu'il / elle n'ait pas de problèmes, etc. Et cela peut aider car une fois implémenté, vous pouvez passer à la plus petite partie et être un héros avec les économies.
old_timer

1
Malgré sa longueur, je trouve cette réponse très bonne
Sarrk

3

La meilleure façon de déterminer les exigences de mémoire flash / RAM pour votre projet est de construire un prototype et de le mesurer.

Implémentez les algorithmes principaux sur un PC et calculez la taille du code objet et l'utilisation de la RAM. Cela vous donnera un chiffre approximatif avec lequel travailler.

N'oubliez pas d'ajouter plus à votre budget si vous comptez sur des fonctionnalités du système d'exploitation telles que stdio ou la gestion de la mémoire.

Il n'y a aucun moyen direct de comparer les lignes de code à la taille du code compilé. Mais, vous pouvez comparer les architectures de processeur en termes de densité de code.


3

Je pense que la meilleure façon d'avoir une "idée" de vos besoins, dans ce cas en termes de mémoire, est d'obtenir des échantillons d'un MCU, de le programmer et de voir combien de mémoire est utilisée. En fait, cela dépendra du compilateur utilisé. Si c'est la première fois que vous programmez un MCU, ne vous embêtez pas trop avec les spécifications. Sélectionnez-en un avec beaucoup de mémoire, beaucoup de périphériques, etc. De cette façon, vous pouvez apprendre beaucoup d'un seul MCU. Lorsque vous réalisez votre premier projet avec ce MCU, vous aurez une meilleure idée de la mémoire dont vous avez besoin pour d'autres projets.

Le MCU le plus approprié pour une tâche? De combien de canaux ADC avez-vous besoin? Et le CAD? Qu'est-ce qui est le plus important dans votre application: performances ou faible puissance? Est-ce ce genre de questions auxquelles vous devez répondre lors de la sélection d'un MCU spécifique.


3

Choisissez un microcontrôleur doté de l'ensemble de périphériques dont vous avez besoin. Il y aura probablement une famille de micros qui ont les mêmes périphériques / similaires mais des quantités différentes de RAM et de Flash. Commencez avec la puce avec le plus grand RAM / Flash. Une fois que vous avez un prototype fonctionnel, vous pouvez choisir un micro moins cher si votre programme vous convient.


0

Les vrais professionnels ne choisissent pas un microcontrôleur de manière isolée, ils gèrent un projet pour un profit maximum. Selon les critères du projet qui pourraient entraîner la sélection d'un microcontrôleur, cela semble être trop cher, mais il se trouve que cela correspond bien à l'expertise, aux outils, aux bibliothèques, etc. disponibles Ne prenez pas de décisions isolées, gardez la vue d'ensemble , surtout la somme (frais de développement + frais de production)!

La plupart des fabricants de microcontrôleurs proposent des gammes de puces, la taille du flash étant l'un des paramètres qui diffèrent entre les différentes puces. Un choix «sûr» consiste à sélectionner initialement la puce avec la plus grande taille de flash, de sorte que vous pouvez réduire l'échelle si l'application s'insère dans une puce plus petite. Mais les applications ont tendance à se développer pour s'adapter à toutes les tailles disponibles (et plus).

La taille du flash IME n'est plus un facteur de coût important, même le nombre de broches est moins important, la taille de la RAM semble être le principal facteur de coût.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.