Question:
Développement intégré - Passer à l'étape suivante
NickHalden
2011-06-30 23:52:20 UTC
view on stackexchange narkive permalink

Je vais commencer par vous dire ce que je sais. Ensuite, je vais vous dire que je veux arriver à ce pays magique de tout savoir sur le développement de systèmes embarqués. Ensuite, je vais vous demander quelles devraient être mes prochaines étapes pour y arriver. Cette réponse est plutôt informative, mais j'essaie d'être un peu plus détaillée:

Ce que je sais

Allons voyez, je suis juste avec C et C ++. Évidemment, je veux m'améliorer avec ces langages, mais je pense qu'à ce stade, le meilleur moyen pour moi de m'améliorer est de continuer à les utiliser et d'essayer continuellement d'améliorer mon code au fur et à mesure que je l'écris. Je ne pense pas qu'il serait très bénéfique de consacrer des exercices d'apprentissage uniquement à l'apprentissage du C.

Je suis assez à l'aise avec la conception de circuits simples. Je vois une puce avec une sortie à collecteur ouvert et je sais que j'ai besoin d'un pull up, etc. Je suis assez confiant que compte tenu d'un IC et de sa fiche technique, je peux soit trouver comment interfacer avec lui, soit au moins poser les bonnes questions à comprendre comment l'interfacer.

Je suis très bon en mathématiques et en pensée logique. Il y a peu d'algorithmes / concepts de conception qui me lancent une boucle. C'est certainement mon domaine le plus fort.

Ce que j'ai fait

Jusqu'à présent, toute mon expérience a été avec des microcontrôleurs 8 bits . Mon cours universitaire a utilisé un Motorola HC08, un Intel 8051 et un Zilog EZ8. Mon professeur avait construit un petit tableau de développement pour tous les trois avec un écran à 7 segments et d'autres choses. Nous les avons programmés en assemblage, donc je suis un peu familier avec l'assemblage et j'ai suivi un cours d'architecture informatique de base, donc j'ai une bonne idée du matériel. Cependant, nous avons travaillé sur un environnement Windows et les 3 MCU avaient le leur L'IDE et la chaîne d'outils sont déjà configurés, donc je n'ai jamais vraiment appris comment mon code est passé de l'assemblage à l'exécution sur le MCU.

Ma prochaine étape a été d'apprendre par moi-même. Je me suis très familiarisé avec l'environnement Arduino en m'interfaçant avec des capteurs / mémoires / écrans qui avaient à la fois des bibliothèques pré-écrites et d'autres pas. Ensuite, j'ai construit ma propre carte Arduino avec un ICSP et des connexions à un autre MCU afin de pouvoir flasher le chargeur de démarrage sur des ATmega328 nus. Encore une fois, cependant, l'IDE et la chaîne d'outils étaient déjà configurés et je n'ai jamais compris comment je suis passé de C / Arduino au code fonctionnant réellement sur le MCU.

Ce que je veux savoir

Donc, d'après la réponse précédemment liée, je pense que les choses les plus intéressantes / bénéfiques pour moi seraient la balle sur l'apprentissage des outils (compilateur et éditeur de liens), et l'apprentissage de différents styles d'architecture logicielle ( passant des boucles de contrôle basées sur les interruptions aux ordonnanceurs et RTOS). C'est mon opinion sur ce qui serait le plus utile ... mais comme je ne le sais pas encore, il est difficile de dire si c'est correct ou non, alors n'hésitez pas à suggérer d'autres puces à partir de cette réponse si vous pensez qu'elles seraient meilleures et Veuillez expliquer pourquoi vous pensez cela.


Donc, en prenant mes connaissances actuelles comme point de départ et la description ci-dessus de ce que je veux savoir comme objectif, je recherche suggestions très spécifiques sur la prochaine étape. Je recherche des suggestions de projets exacts, des sites Web / entrées de blog à lire, des chapitres de livres, etc.

De plus, y a-t-il d'autres lacunes dans ma base de connaissances que vous pensez que je devrais combler avant de passer à les sujets mentionnés ci-dessus?

Merci

C'est une question très ouverte et subjective, mais elle est bien pensée et a abouti à d'excellentes réponses. Ces questions devraient être CW.
@Kevin Vermeer Ah ok, comment puis-je faire cela pour référence future?
@JGord,, vous devez signaler l'attention du modérateur. Seuls les modérateurs peuvent créer des CW.
Neuf réponses:
#1
+9
Toby Jaffey
2011-07-01 00:05:51 UTC
view on stackexchange narkive permalink

Donc, à partir de la réponse précédemment liée, je pense que les choses les plus intéressantes / bénéfiques pour moi seraient la balle sur l'apprentissage des outils (compilateur et éditeur de liens), et l'apprentissage de différents styles d'architecture logicielle (en passant du contrôle basé sur les interruptions) boucles vers les planificateurs et les RTOS)

Le portage d'un petit système d'exploitation vers un nouvel appareil peut vous aider à comprendre les planificateurs et les RTOS. FreeRTOS est populaire et bien documenté. eCos en est un autre.

L'écriture d'un bootloader est un bon moyen de se familiariser avec un éditeur de liens, car vous voudrez diviser la mémoire et le flash en régions.

Une autre astuce consiste à choisir une architecture ou une puce complètement nouvelle et à construire vous-même une carte de développement. Se forcer à commencer dès le début et à tout chercher dans la fiche technique est un bon moyen d'apprendre.

Explorez Protothreads. Essayez d'écrire les mêmes programmes à la fois dans un style de thread et de machine d'état. Une fois que vous avez terminé avec Protothreads, écrivez un véritable planificateur de thread.

Hé Joby, merci pour ta réponse, mais c'est en fait le genre de réponse que j'essayais d'éviter. Je recherche sur Google des trucs comme "comment apprendre RTOS" et il n'y a tout simplement pas de liens utiles. Avez-vous de bons guides ou ressources d'apprentissage pour les choses que vous avez mentionnées?
S'il essaie vraiment d'apprendre ce genre de choses, un RTOS ne fera qu'obscurcir les choses au début. J'ai réalisé plus de 100 projets de microcontrôleurs et je n'en ai pas encore trouvé où un RTOS aurait été une bonne réponse. J'ai utilisé plusieurs fois un simple planificateur de tâches coopératif à tour de rôle, mais c'est bien moins que ce que la plupart des gens considèrent comme un RTOS. Mes planificateurs de tâches pour les familles PIC 18 et dsPIC sont disponibles gratuitement sur mon site Web.
@Olin pourriez-vous nous en dire plus? Voulez-vous dire que je devrais commencer à apprendre le threading et la planification avant de passer à un RTOS?
@Olin Pour les petits systèmes, je privilégie le multitâche coopératif avec des tâches interrogées. Il est déterministe et léger, idéal pour les systèmes contraints. Le multitâche préventif avec des threads, bien que très puissant, peut provoquer des cauchemars de débogage - avec des conditions de course et des bogues irrépétables. Donnez-moi une machine d'état chaque jour.
@JGord La meilleure voie pour s'améliorer est de faire. Je suggère des activités pour améliorer vos compétences, pas un guide d'étude. Il me semble que je ne découvre souvent les questions intéressantes qu'après la première mise en œuvre.
@JGord: Non, je dis qu'un RTOS complet n'est pas approprié pour les microcontrôleurs, le plus dont vous avez vraiment besoin étant un échangeur de tâches coopératif. RTOS est quelque chose pour les «gros» systèmes embarqués, ce que ne sont pas les microcontrôleurs. Il existe de nombreux PC embarqués et autres où les RTOS ou d'autres systèmes d'exploitation ont du sens, mais je n'en ai pas encore trouvé un où cela aurait du sens pour un microcontrôleur.
@Joby: OK, ce n'était pas clair dans votre réponse. Il semblait que vous recommandiez des RTOS pour cette affaire.
Pour plus d'informations sur RTOS, consultez le livre de Jean Labrosse sur son RTOS: MicroC OS II Real Time Kernel. Il a un merveilleux chapitre qui parle des mécanismes RTOS en général. Avec son livre, vous obtenez le droit d'utiliser son RTOS.
#2
+7
old_timer
2011-07-01 08:59:09 UTC
view on stackexchange narkive permalink

Le livre MicroC OS II est probablement quelque chose dans lequel investir. Vous devriez également créer des projets pour apprendre les différentes interfaces i2c, spi, mdio, etc. De temps en temps, le matériel prendra en charge le bus (il faut savoir que sur une base fournisseur par fournisseur) mais souvent pour diverses raisons, vous ne pourrez pas utiliser le matériel i2c / spi et vous devrez le faire.

Le avr / arduino est très bien, vous devriez apprendre ARM, thumb and thumb2, et le msp430 et quelques images plus anciennes (non mips). Regardez le code du chargeur de démarrage pour l'arduino et découvrez comment créer un programme de chargeur, effacer le flash dessus et prendre en charge la carte / puce. Obtenez un micro bras basé sur lpc, même chose sur le protocole de programmation du port série. Obtenez un sam7s ou quelque chose avec un arm7 qui a un jtag traditionnel, obtenez un wiggler olimex ou un jtag-tiny (je recommande ce dernier). Soyez à l'aise avec openocd. Le swd d'ARM est plus douloureux que le jtag normal, mais sur ce marché prévaudra (pour les produits à base de cortex-m). En bref, découvrez les différentes façons que les fournisseurs proposent dans la programmation de circuits. Vous briquerez des planches de temps en temps et voudrez être à l'aise pour les débrancher. Dans ce sens, écrivez du code pour analyser les fichiers Intel hex, srec et elf, vous devrez peut-être un jour écrire un chargeur et avoir besoin de prendre en charge un ou plusieurs de ces formats populaires.

Vous avez mentionné les outils. Vous ne pouvez pas vous tromper en apprenant gcc et binutils, apprenez à croiser la compilation, au moins pour les plates-formes supportées (implique généralement --target = msp430 --prefix = / quelque chose par exemple). Les plates-formes prises en charge pour la ligne principale gcc et binutils sont une cible mobile, donc avrgcc et mspgcc et autres sont essentiellement faits pour vous. Vous devez apprendre à écrire des scripts d'éditeur de liens, à écrire votre code C pour que, par exemple, les tables fixes apparaissent dans la ROM et non dans la RAM. Ayez également une idée du démontage des binaires, vous devez vous assurer que les tables sont au bon endroit, vous assurer que le code est là où vous pensez qu'il est, que les tables vectorielles et le code de démarrage / démarrage sont là où le processeur en a besoin démarrage. Cela ne fait pas non plus de mal de savoir ce que font les optimisations du compilateur et à quoi ressemble le code C lorsqu'il est compilé en code assembleur / machine. si possible, ne vous limitez pas à gcc / gnu. llvm est un acteur fort, il a le potentiel de faire passer gcc comme un meilleur outil. Vous avez peut-être déjà utilisé sdcc. essayez les versions eval de kiel, iar, etc. Vous constaterez rapidement qu'il y a beaucoup de zones grises dans les standards C / C ++ et que chaque compilateur les interprète différemment, aussi des différences dramatiques dans la qualité du code produit à partir du même haut source de niveau. Si vous vous en tenez à cette profession, il y aura des moments où vous serez obligé d'utiliser un compilateur pas si génial et de contourner ses verrues et ses faiblesses. Dans le secteur des ordinateurs de bureau, vous pouvez souvent vous en sortir en refusant d'utiliser des outils non conformes aux normes. Dans le monde des microcontrôleurs, vous obtenez parfois ce que vous obtenez et c'est tout. Parfois, vous obtenez des fournisseurs qui modifient / améliorent le langage C pour répondre à leurs fonctionnalités matérielles ou vous faciliter la vie supposément (rabbit semi et xmos viennent à l'esprit). (xmos est une plate-forme très attrayante pour de nombreuses raisons, je la considère avancée, mais d'après les sons de votre expérience, vous êtes probablement prêt, les outils sont à télécharger gratuitement, un très bon simulateur, important pour apprendre à étudier les .vcd / waveforms de votre code en cours d'exécution).

chibios en est une autre à examiner.

La création de chargeurs de démarrage réussis est une compétence importante. Le chargeur de démarrage, ou du moins la partie de départ de veut être solide comme le roc, vous ne voulez pas livrer un produit qui est facilement brique. Un simple démarrage avec un moyen de recharger la partie application du flash sans compromettre la partie entrée du chargeur de démarrage est la clé.

Les cartes stellaris eval sont chargées avec des périphériques, bien qu'elles fournissent des bibliothèques que cela vaut la peine apprendre, d'autant plus que la façon dont ils vous disent que cela fonctionne et comment cela fonctionne diffèrent et que vous devez examiner leur code et d'autres ressources pour le savoir.

Étant un fan d'avr, si toujours là-bas, je recommande d'obtenir un papillon avr. Apprenez un peu de programmation série, soudez un connecteur et reprogrammez-le. Quelques périphériques là-bas pour apprendre à programmer.

peut-être obtenir un ancien dallas semi, maintenant maxime je pense, un périphérique filaire. Comme leurs capteurs de température. Encore plus douloureux que i2c et mdio avec leur bus de données bidirectionnel, cette chose à un fil, est un fil (et une masse). Puissance, maître à dépendant et dépendant pour maîtriser le tout sur un seul fil.

Quand j'étais là où vous êtes maintenant, j'ai trouvé le décodage des protocoles de télécommande infrarouge amusant. Les modules de réception ir sont faciles à trouver, la cabane radio en avait un bon. Fondamentalement, à l'opposé du bit banging, vous voulez mesurer le temps entre les changements d'état, en utilisant cette détection de synchronisation et / ou décoder le protocole. Un récepteur universel n'est pas nécessaire, un protocole à la fois suffit. De même, être capable d'envoyer des commandes bitbang à une led ir, en particulier si vous coupez la fréquence porteuse.

Parler à une carte SD via spi est probablement aussi une bonne idée. Apprenez certainement à effacer et à programmer des parties flash i2c et / ou spi, vous les rencontrerez souvent pour les numéros de série et les adresses mac, etc.

Je recommande également d'apprendre les protocoles Ethernet de base. Être capable d'analyser et de créer des paquets arp et udp (à partir de zéro) (et icmp / ping également). Il est assez facile de créer une pile udp si vous trichez un peu, sans suivre les règles d'arp réelles, si quelqu'un vous envoie quelque chose, renvoyez la réponse au mac / ip d'envoi. Ou peut-être aller jusqu'à regarder les paquets arp pour les autres, acheter et garder une trace des adresses mac / ip autour de vous. tcp demande beaucoup plus de travail, c'est faisable, mais il vaut mieux le lire d'abord que d'essayer de l'implémenter.

Bonne chance, et surtout, amusez-vous bien.

Si cela ne vous dérange pas de me demander, quel âge aviez-vous "quand vous étiez où je suis maintenant?"
Je dirais au début / au milieu des années 20 quand j'étais à un moment où je me suis intéressé à essayer des microcontrôleurs et que j'avais un emploi et que je pouvais me le permettre. À l'époque, la photo était celle-là et il coûtait environ 150 $ pour le moins cher de tout type d'installation, et ce n'était qu'un programmeur de socket zif pour une partie à trou traversant, utilisé une carte proto de cabane radio et dû acheter des oscillateurs, etc. pour commencer. Le volume de planches de moins de 50 $ et Internet a totalement changé la donne. J'aurais eu environ 15 ans si ce qui était disponible aujourd'hui était disponible à l'époque.
Vous deviez retirer la pièce de votre carte, la mettre dans le programmateur, la reprogrammer, puis remettre la pièce dans votre carte. Rien de tout cela dans les circuits.
Ouais, c'est en fait le monde dans lequel je travaille à peu près mais pour beaucoup moins cher. La plupart du temps, j'utilise l'arduino comme moyen de programmer, puis je le sors et je le mets dans la cible de mon choix. Je suis content que tu avais plus de 20 ans quand tu as commencé parce que je ne suis pas entré dans ce domaine avant d'arriver à l'université et de réaliser qu'il y avait un univers en dehors de Java sur le bureau. C'était ma faute cependant, vous avez raison de dire qu'il est beaucoup plus facile de commencer tôt aujourd'hui.
En même temps, à l'adolescence, les pc vic20 et ibm étaient tout neufs et coûtaient une fortune, mais avec une inspiration bien placée, mes parents ont acheté (un, enfin les deux) au cas où l'un des enfants apprendrait quelque chose de lui et J'ai fait l'équivalent de cela à l'époque, parcouru les manuels de base et écrit des programmes pour apprendre chaque commande. Plus tard, j'ai appris à faire avec l'assembleur puis C et finalement après avoir eu un vrai travail et un peu d'argent et d'autres ingénieurs pour me parler de ces microcontrôleurs, j'ai ALORS suivi cette voie.
Pour moi, l'OMI, le papillon atmel avr était l'arduino du jour, une carte entièrement fonctionnelle à 20 $, avec le microcontrôleur, programmable sur site (ajoutez un connecteur dsub à trois fils et un 9 broches). Il y avait aussi un écran, d'autres trucs et des E / S de rechange. puis le dallas tini est sorti (j'ai mis au rebut le java et écrit une pile udp dans l'assembleur 8051). ezusb, également 8051 a ouvert le monde USB. et ces cartes de moins de 50 $ ont continué ... Je suppose que le tableau de bord msp430 et la découverte de la première ligne de valeur sont vendus à perte pour faire sortir le produit.
Monde complètement différent aujourd'hui, et malheureusement trop de programmeurs sont très éloignés de ce qui se passe réellement dans les compilateurs et les processeurs et les bus et protocoles, etc. (à cause des langages de très haut niveau). Avec tant d'informations, de matériel et de simulateurs faciles d'accès, il n'est pas utilisé. Heureux de voir quelqu'un avec un intérêt, s'il vous plaît continuez comme ça.
#3
+6
Olin Lathrop
2011-07-01 00:43:11 UTC
view on stackexchange narkive permalink

C'est une grande question. Malheureusement, il n'y a pas une seule façon d'apprendre le développement de microcontrôleurs embarqués, tout comme pour apprendre presque tout le reste. Je suppose que puisque vous le demandez ici, vous ne voulez pas seulement réaliser un projet spécifique, mais voulez vraiment comprendre ce qui se passe afin que vous puissiez réaliser n'importe quel projet plus tard. C'est un bon début.

Il n'y a pas de substitut à faire quelques projets en assembleur pour vraiment comprendre les choses. Une partie du travail des langages de haut niveau est de cacher une partie de la complexité, mais cela obscurcit également les choses que vous voulez comprendre. Arduino est encore une autre couche à partir de cela. C'est peut-être bien pour quelqu'un qui ne veut pas savoir comment les choses fonctionnent pour faire quelque chose, mais c'est vraiment mauvais si l'objectif est d'apprendre les détails. Alors laissez tomber l'arduino, oubliez que vous avez un compilateur, roulez vos sleaves et préparez-vous à vraiment plonger.

Le premier endroit pour commencer avec un microcontrôleur est sa fiche technique. Les différentes lignes de microcontrôleurs ont des détails différents, mais les concepts sont les mêmes. Choisissez-en un et respectez-le jusqu'à ce que vous ayez réalisé quelques projets et que vous vous sentiez à l'aise avec. Les PIC TI MSP430, Atmel et Microchip sont tous des gammes de microcontrôleurs grand public. Je suis un PIC donc je vais en parler. Ce n'est pas faux d'opter pour l'un des autres, mais je pense qu'il existe un support communautaire plus accessible pour les PIC, et la ligne PIC est très large, il sera donc plus facile d'accéder aux micros plus grands et plus petits d'où vous commencez.

Si vous commencez par la ligne PIC, je recommande le 18F2520. C'est un microcontrôleur assez performant, livré dans un boîtier de 28 broches facile à visser, avec une quantité décente de mémoire programme et de RAM, et un ensemble décent de périphériques communs. Obtenez une petite poignée et utilisez-la pour commencer, même pour de petits projets qui auraient pu être réalisés avec quelque chose de moins. Le but est de bien le connaître. Finalement, vous voudrez faire quelque chose qui nécessite plus que ce que PIC peut faire. J'espère qu'à ce moment-là, vous serez assez bon pour les éléments de base et pourrez facilement remplacer un modèle différent. En fait, tous les PIC 18F sont identiques à l'exception de la quantité de broches, de la mémoire programme, de la RAM et du mélange de périphériques. Après quelques projets avec le 18F2520, vous n'aurez aucun problème à vous lancer directement dans n'importe quel PIC 18.

Si vous finissez par faire cela de manière professionnelle, vous finirez par rencontrer des exigences qui dictent quelque chose de plus petit ou moins cher . C'est à ce moment-là que vous regardez les familles 16F ou peut-être même 12F ou 10F. Les choses vous sembleront largement familières, mais certaines choses seront un peu plus difficiles. Cela ne devrait pas poser de problème à gérer si vous commencez avec une solide compréhension d'un 18F. De nos jours, les familles 16F et inférieures ne sont vraiment destinées qu'à la production en série ou peut-être lorsque l'espace physique et parfois la puissance sont très importants. Il y a peu d'avantages en eux par rapport à un 18F pour un amateur.

En remontant, vous pouvez regarder les familles 24, 30 et 33. Ce sont fondamentalement tous les mêmes, à l'exception de quelques rides mineures telles que la tension à laquelle ils fonctionnent, la vitesse maximale et le fait qu'ils aient ou non l'ALU mathématique DSP. Ils sont plus compliqués à programmer en assembleur, mais aussi étrangement plus faciles. Il y a plus d'instructions à garder à l'esprit, mais c'est donc aussi plus facile de faire beaucoup de choses. C'est aussi un bon point pour commencer à revenir en C si c'est là que vous voulez aller. Le compilateur C pour ces parties est en fait assez bon, contrairement aux compilateurs C pour le PIC 18 et ci-dessous. Il est également plus facile de mélanger C et assemblage dans le même projet sur ces pièces. N'oubliez pas l'assembleur pour ceux-ci cependant. Il sera toujours utile de savoir quand vous devez écrire un bootloader, gérer le multitâche qui effectue des actes non naturels sur la pile, écrire du code très serré pour lire un tas de A / D et calculer le cycle de service PWM pour la prochaine impulsion de votre Alimentation PFC 100KHz, etc.

Une bonne chose à propos de la gamme Microchip est qu'un seul programmeur / débogueur fonctionne dans tout le lot. Si vous voulez vraiment faire cela de manière professionnelle, procurez-vous la vraie glace. Pour économiser un peu d'argent, vous pouvez obtenir l'ICD3, qui est juste un Real Ice légèrement dépouillé. La seule chose que ce n'est pas est un ICE (le marketing stupide frappe à nouveau), mais c'est un bon débogueur en circuit. MPLAB, leur débogueur et simulateur IDE, fonctionne également sur toute la gamme de produits.

Encore une fois, pour les professionnels ou ceux qui souhaitent devenir professionnels, rendez-vous à la conférence annuelle Microchip Masters. Oui, c'est en Arizona en été, mais vous êtes là pour apprendre, alors oubliez les 115 degrés à l'ombre. (En fait, j'aime explorer l'Arizona en été, alors je sors une semaine plus tôt avec ma petite tente et je me promène dans l'arrière-pays. C'est incroyable de voir combien il y a peu de gens dans les vastes forêts nationales à une courte distance de Phoenix.) Masters est aussi un bon endroit pour choisir les outils de développement. Ils les vendent généralement pour quelque chose comme 45% de réduction chez Masters. (Je suis un partenaire de conception de Microchip de niveau platine, donc je les reçois tout le temps 45% de réduction, c'est pourquoi je ne suis pas au courant de la réduction exacte Masters).

Si vous commencez à explorer les microcontrôleurs en faire des projets PIC, consultez mon site Web où j'entre dans plus de détails sur la façon dont je structure habituellement les projets PIC et vous donne un tas d'outils gratuits pour faire des choses sophistiquées. Si vous comprenez la bonne conception et la propreté des logiciels, vous serez agressé par MPASM. Faites un projet ou deux pour comprendre ce qu'il fait et ce qu'il ne fait pas, puis regardez mes wrappers et d'autres outils qui vous permettent de faire beaucoup plus tout en respectant les bonnes pratiques de conception de logiciels. L'assembleur n'a pas à être un gâchis simplement parce que la plupart le sont. Si vous êtes vraiment intéressé, vous pourriez vous arrêter au cours que j'enseigne à la maîtrise cet été sur ce sujet.

Hey Olin, tout d'abord, merci d'avoir consacré autant de temps à cette réponse. Deuxièmement, j'ai déjà choisi la ligne Atmel comme arme de choix depuis que j'ai fait 4 ou 5 projets avec elle ... désolé = (. Je ne sais pas combien de temps je vais passer encore Cependant, je vais consulter votre site Web et je pense que vos suggestions seront utiles même si je ne vais pas sur la ligne PIC pour le moment.
Il est très facile d'abandonner le bac à sable Arduino et d'écrire des applications pour le matériel en asm ou C ou tout ce pour quoi vous pouvez trouver un compilateur. Beaucoup d'autres bonnes plates-formes, le tableau de bord msp430, la découverte de lignes de valeur stm32, sam7s.
#4
+5
Jon L
2011-07-01 01:36:38 UTC
view on stackexchange narkive permalink

Pour répondre directement à votre question de "Ce que je veux savoir":

J'ai trouvé que d'appeler le compilateur directement via la ligne de commande, de se familiariser avec ses options, puis d'écrire vos propres Makefiles sur do all of your builds m'a été extrêmement bénéfique dans l'apprentissage du processus de build - ce qui ressemble à quelque chose que vous voulez apprendre. Cela sépare essentiellement la chaîne d'outils de l'IDE et vous permet d'apprendre la chaîne d'outils plus que l'EDI. C'est une chose en cours que j'essaie également d'améliorer.

J'ai remarqué que vous avez utilisé arduino dans le passé, ce qui est génial car maintenant je peux recommander d'utiliser avr-gcc comme votre compilateur à partir de maintenant. Essayez-le, il est disponible sur toutes les plates-formes (Linux, WinAVR pour Windows, Mac) et la documentation sur la chaîne d'outils avr-gcc et avrdude (programmeur) est excellente, et il devrait y avoir beaucoup d'exemples de Makefiles là-bas pour que vous puissiez apprendre. Une bonne partie de ces informations est également transférable à d'autres matériels, par exemple arm-gcc.

Parfait, c'est peut-être la première chose que j'essaye. Et encore plus parfait car ARM sera presque certainement la deuxième architecture que j'apprendrai une fois que je serai complètement à l'aise avec les AVR
#5
+5
Jay Atkinson
2011-07-01 04:37:43 UTC
view on stackexchange narkive permalink

Voici une autre idée. Implémentez votre propre système de tâches en arrière-plan qui vous permet de créer à la fois des tâches chronométrées et des tâches de demande qui ne s'exécutent que lorsque les tâches chronométrées ne sont pas en cours d'exécution. Ce n'est pas un vrai RTOS, mais agit plutôt comme un ordonnanceur coopératif. Convertissez un projet précédent pour utiliser le nouveau système de tâches.

Ce type de système fonctionnait très bien sur un produit que nous utilisions auparavant sur un 8051. Il a été initialement écrit en assemblage, mais plus tard, nous l'avons converti en C pour aider à le porter sur d'autres architectures. Le battement de cœur de ce système était sur un tick de 5 ms et les tâches chronométrées s'exécutaient par incréments de 5 ms. Nous avions un fichier que nous utilisions pour nommer toutes nos tâches (pointeurs de fonction) avec leurs valeurs de temps et celles qui étaient à la demande. Ce fichier a ensuite été converti en assembly ou en C selon la façon dont nous l'avons implémenté et compilé dans le code.

Si vous le faites fonctionner assez bien, vous pouvez vous attaquer à l'écriture de votre propre RTOS simple pour quelque chose d'un peu plus lourd.

Cela semble assez intéressant! Des suggestions de ressources d'apprentissage sur les planificateurs de tâches, etc.?
Le chapitre 15, Real Time Kernels of "The Firmware Handbook", par Jean Labrosse, ed Jack Ganssle est un bon point de départ, et le reste du livre est également recommandé.
#6
+3
Majenko
2011-07-01 00:12:51 UTC
view on stackexchange narkive permalink

Une chose que vous n'avez pas mentionnée concerne les communications.

Il semble qu'un trou que vous pourriez brancher serait d'apprendre les différentes communications standard protocoles utilisés dans l'industrie - des choses comme:

etc.

Ah, oui communications +1 Je vais certainement lire ces liens, avez-vous des suggestions de projets qui me forceraient à appliquer ce que j'apprends simplement en les lisant?
L'interfaçage avec tout appareil disposant de ce bus est souvent un bon projet. Peut-être écrire un pilote quelconque. Il y a beaucoup de puces pour les bus comme I2C, SPI, 1wire, etc. Celles mentionnées dans la réponse sont davantage des bus de périphérique à périphérique. Je pourrais ajouter du MIDI, ce qui peut être intéressant.
#7
+3
user924
2011-07-01 18:38:24 UTC
view on stackexchange narkive permalink

La question est donc "Comment apprendre, quand chaque chaîne d'outils est une boîte noire?"

Je suggère de trouver un très vieux expérimentateur prêt à l'emploi, une carte de débogage avec n'importe quel processeur commun. Quelque chose comme un engin de 2 pieds de large avec CPU, LED, interrupteurs et bouton "Exécuter une seule étape". Créez manuellement un programme en boucle longue de 5 à 10 instructions en utilisant les instructions binaires de code machine de la fiche technique. Mettez-le sur une énorme puce ROM enfichable. Insérez la ROM, appuyez sur power on / reset et déboguez-la étape par étape.

#8
+2
Joe
2011-07-01 00:03:12 UTC
view on stackexchange narkive permalink

Connaissez-vous bien les registres, le fonctionnement et autres sur un micro 8 bits? Ce pourrait être une bonne idée de faire un petit assemblage. Cela a l'avantage de vous apprendre exactement ce qui se passe. Cela peut aider à résoudre des bogues étranges avec des langages plus élevés.

Les AVR ont de jolis assembleurs et registres simples. C'est une bonne plate-forme pour mouiller votre alimentation. Il existe également de bons tutoriels pour cette plate-forme.

Cela vous donnera le résultat net de ce que fait le micro. Ensuite, la prochaine étape de la façon dont le compilateur et l'éditeur de liens transforment C / Arduino en code machine sera plus facile à comprendre.

J'ai déjà utilisé 3 langages d'assemblage différents. Je pense que je vais bien sur ce front. Merci pour la contribution et je suis tout à fait d'accord pour dire que l'assemblage d'apprentissage a aidé à mieux écrire C (ou au moins à comprendre ce que j'écris)
#9
-1
Sandeep
2011-07-05 08:20:03 UTC
view on stackexchange narkive permalink

Realtime Mantra contient plusieurs articles sur le développement de logiciels embarqués.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...