Arduino / Traitement contre .NET Micro Framework? Meilleure langue? Meilleur matériel?


10

Je joue avec Arduino depuis un certain temps maintenant, et je suis en train de passer du niveau débutant au niveau intermédiaire. J'aimerais avoir quelques opinions sur le .NET Micro Framework , en termes de performances et de disponibilité du matériel.

Je suis un programmeur .NET, mais j'ai trouvé que le traitement pour Arduino est à peu près sans friction ... Il est si proche de C # que tout ce que je veux faire ne nécessite même pas un voyage dans la documentation.

Quoi qu'il en soit, quel est le meilleur?


Voir aussi cette question (liée au C ++): chiphacker.com/questions/3027/…
Kevin Vermeer

Réponses:


17

Si vous voulez passer du débutant à l'intermédiaire, le langage que vous devez apprendre est C. Même si vous mettez de côté tout le débat sur le verrouillage de Windows, vous devez être très bon en programmation en C avant de pouvoir faire un travail de qualité sur un microcontrôleur dans un langage de niveau supérieur comme .NET Micro ou C ++.

Les systèmes embarqués sont composés d'une pyramide de connaissances, et vous devez vraiment connaître au moins une partie de chaque étape pour être un bon concepteur:
^ Code utilisateur
^^ Systèmes d'exploitation
^^^ Le langage C
^^^^ Langage d'assemblage
^^^ ^^ Architecture du microcontrôleur
^^^^^^ Conception numérique
^^^^^^^ Semi-conducteurs
^^^^^^^^ Electronique de base (loi d'Ohm)

Le cadre Arduino fournit un crochet pratique pour les amateurs dans la pyramide quelque part entre le langage C et un système d'exploitation.

Spécifique à votre question sur le .NET Micro Framework, le propos dit:

Le périphérique .NET Micro Framework typique possède un processeur 32 bits sans unité de gestion de mémoire externe (MMU) et pourrait avoir aussi peu que 64 Ko de mémoire vive (RAM).

En outre, la brochure le différencie de Windows Mobile , Windows Embedded , CE 6.0 et .NET Compact Framework et le compare à Linux, en temps réel, Java et aux systèmes d'exploitation personnalisés. C'est un énorme saut par rapport au framework Arduino / Processing.

Votre Arduino dispose d'un processeur 8 bits avec 1 Ko de RAM. En plus de la perte de puissance de 8 bits contre 32 bits, il fonctionne également moins de la moitié plus rapidement que la plupart des processeurs répertoriés. Bien que je ne vous décourage pas de passer à un processeur 32 bits, je le recommanderais comme un mouvement intermédiaire à avancé.

Il est vraiment facile d'utiliser beaucoup de temps et de mémoire avec quelques lignes en C # ou C ++, qui sont insignifiantes sur un processeur dual core fonctionnant à quelques gigahertz avec des gigaoctets de RAM, mais qui peuvent faire une énorme différence sur un appareil embarqué . Jusqu'à ce que vous soyez bon en langage assembleur et / ou C, ou un gourou en C # ou C ++, je ne recommanderais pas de l'utiliser pour la programmation intégrée.

Donc, je commencerais par télécharger WinAVR et programmer une simple routine de clignotement des LED en C. Si C vous déroute complètement, faites un peu de code natif ("Hello World") sur votre PC, puis passez à la microcontrôleur, mais cela ne devrait pas être nécessaire. Ensuite, passez à la communication via l'UART, commencez à utiliser des interruptions et refaites certains de vos projets Arduino en C. Ensuite, trouvez (ou créez!) Une nouvelle carte de développement avec un microcontrôleur différent, peut-être un PIC ou un ARM , et certains des accessoires comme un écran LCD, Ethernet, une carte SD ou tout ce que vous voulez, et essayez d'apprendre un nouveau système. Une fois sur place, vous saurez mieux où vous voulez aller.

Nous serons là pour vous aider sur le chemin!


6
Je ne suis pas d'accord pour dire que la connaissance de l'assembleur et du C est essentielle. Il est essentiel de comprendre le fonctionnement des microcontrôleurs . Apprendre l'assembleur (c, moins) est certainement une voie vers cette compréhension, mais ce n'est pas la seule.
Connor Wolf

4
@Fake Name: Bien sûr, c'est pourquoi j'ai dit "au moins une partie de chacun". Suivre un programme simple de C à l'assemblage en hexadécimal, et comprendre chaque étape, fera de vous un bien meilleur programmeur. Vous pouvez ensuite laisser la magie faire son travail si vous le souhaitez, mais vous devez comprendre les capacités de la machine avec laquelle vous travaillez.
Kevin Vermeer

Oups, désolé. Vous avez manqué le "certains de".
Connor Wolf

7

Je n'ai aucune expérience avec le ".NET Micro Framework", mais je me méfie fortement de tout ce qui implique l'exécution d'une machine virtuelle sur des plates-formes embarquées de faible puissance. Cela me semble juste un gaspillage. Vous avez besoin de plus de processeurs d'alimentation, plus de mémoire, plus de consommation d'énergie, pour obtenir le même effet que d'exécuter une plate-forme plus dédiée qui se compile en code machine natif. Peut-être pourquoi mon téléphone Android à 528 MHz exécutant une machine virtuelle (similaire à JVM) semble souvent plus lent que mon ancien Palm Treo à 312 MHz qui exécute des applications compilées pour le code machine natif.

D'un coup d'œil, .NET MF nécessite un processeur ARM, qui est un cran au-dessus de la puissance et de la complexité des puces ATMega 8 bits utilisées dans Arduino.

Ma suggestion est que si Arduino fait ce que vous voulez, respectez-le. Sinon, vous pouvez vous tourner vers les puces ATMega ou ATXmega les plus puissantes, et surtout celles qui fonctionnent avec ARM directement en C / C ++, sans la couche de traduction .NET supplémentaire par-dessus.


2
Je suis sincèrement d'accord, mais je ne pense pas que ce soit le cas. Je pense que l'IL est traduit en code spécifique à la machine lors de son déploiement. Voici un lien qui sous-tend cette hypothèse: microsoft.com/downloads/… Je suis assez satisfait d'Arduino jusqu'à présent ... Je pense que la seule chose qui peut me persuader est que j'ai trouvé une sélection de boucliers assez impressionnante sur tinyclr.com .. Je n'ai pas vu une telle sélection de boucliers pour Arduino.
Chris B. Behrens

1
Le compromis entre le pouvoir et le programmeur est également la raison pour laquelle nos ordinateurs de bureau prennent autant de temps pour démarrer et lancer des programmes que les ordinateurs que nous utilisions il y a 5 ou 10 ans.
Kevin Vermeer

@Chris - Le problème n'est pas qu'il n'exécute pas le code machine, c'est qu'il l'exécute à travers un tas d'abstractions. L'abstraction, les objets, les bibliothèques génériques, la modularité, etc. sont tous bons en ce qu'ils simplifient la programmation, mais ils prennent du temps et de l'espace.
Kevin Vermeer

Oui, mais je pense que les couches d'abstraction existent uniquement (ou du moins principalement) sur la machine de développement. Mais bien sûr, c'est juste le genre d'informations dont j'ai besoin.
Chris B. Behrens

2
@Chris - Les abstractions sont propagées jusqu'au code machine. En fin de compte, la machine exécute des opérations sur les adresses: charger, stocker, ajouter, branche conditionnelle, etc. Cependant, les langages de niveau supérieur ont beaucoup de travail à faire, car il n'y a, disons, aucune instruction try / catch dans le jeu d'instructions d'un processeur. Le code machine requis pour implémenter un gestionnaire d'exceptions n'est pas anodin.
Kevin Vermeer

4

Si vous souhaitez passer à intermédiaire, vous devriez essayer une plate-forme en dehors de l'environnement Arduino. Il y en a beaucoup à choisir, vous pouvez rester à 8 bits, même avec un MCU Atmel ou passer à un autre fournisseur. Utilisez un IDE, écrivez le langage de code C, comprenez comment fonctionne un MCU, écrivez votre propre code de chargeur de démarrage ou utilisez un programmateur en circuit et continuez à avancer.

Mais si vous voulez vraiment essayer d'écrire en C # pour les microcontrôleurs, essayez ceci: http://www.trygtech.com/products/sh7619_evb.php

Il utilise un MCU beaucoup plus grand, l'encombrement .NET typique est d'environ 512 Ko de mémoire flash et 256 Ko de RAM.


2
Ce système utilise le framework .NET Micro. C'est précisément le type de système sur lequel Chris cherchait des opinions.
Kevin Vermeer

4

Je viens de voir le Netduino qui peut être un compromis intéressant pour vous. Je n'ai aucune idée des spécifications ou des détails du système, mais il semble utiliser .NET Micro, donc cela semble être un bon moyen d'essayer au moins ce cadre.


3

Le plus gros problème pour moi avec Processing / Arduino est le manque d'un débogueur décent. J'ai un dragon AVR, mais cela n'aide pas beaucoup car (a) le débogueur d'AVR Studio est lent et bogué, ou (b) le débogage dans Eclipse est tout simplement lent et, encore moins, toujours bogué. Je n'ai pas eu l'occasion de l'essayer dans WinAVR, mais c'est le prochain sur la liste.

Il n'y a bien sûr pas de débogueur dans l'IDE Arduino.

Une fois que vous sortez des applications simples et commencez à créer des applications qui doivent faire des choses impliquées au niveau du réseau câblé et sans fil, c'est assez frustrant. C'est principalement la raison pour laquelle j'examine sérieusement le .NET MF - j'ai joué avec le SDK et j'ai bientôt du matériel.


Oups ... manque de concentration! J'utilisant la toochain WinAVR avec Eclipse ;-)

1
J'avoue ... il ne m'est jamais venu à l'esprit que dans l'un ou l'autre système, il y aurait un débogueur, à part la broche 13. Cela nécessite définitivement un deuxième regard sur Netduino ...
Chris B. Behrens

Oui; vous pouvez utiliser DebugWire sur les plus petits ATMegas et JTAG sur les plus grosses puces (1280 et plus je pense) pour effectuer le débogage sur puce des applications Arduino via les deux environnements mentionnés ci-dessus. Vous devez avoir du matériel pour le faire, cependant, et pour moi, le Dragon à environ 50 USD était un bon achat

Mais, comme je l'ai mentionné, les deux options semblaient être moyennes dans les meilleures expériences. J'ai hâte de faire la comparaison de débogage avec le netduino que je viens.

1
Une mise à jour à ce sujet - a reçu un netduino plus il y a quelques jours et a joué avec. Je dois dire que l'expérience prête à l'emploi est incroyable par rapport à l'état actuel des choses dans Arduino. Rien d'extraordinaire requis - juste un studio visuel (vous pouvez utiliser la version gratuite 'express') et un câble USB et vous êtes opérationnel avec le débogage intégré en un tournemain. Tous les trucs d'intellisense fonctionnent dans l'EDI, et je dois dire - même si j'ai fait un tas de travaux en c / c ++ sur d'autres plates-formes, l'utilisation de .NET rend le code intégré de buildnig criminellement facile ;-)

2

Vous voudrez peut-être consulter Netduino . Il est conçu pour être compatible avec la disposition et les broches Arduino et exécute le .NET Micro Framework. Vous pouvez donc coder en C # et même déboguer dans Visual Studio!

Jusqu'à présent, je l'ai trouvé très bon et facile à travailler. Bien que je n'aie pas trouvé beaucoup de tutoriels, je pense que vous pouvez simplement porter beaucoup de choses Arduino. Étant un newb, j'ai pu facilement porter une configuration et un code de photorésistance / photocellule à partir d'un tutoriel Arduino.


1

Vous pourriez envisager de faire du développement C de style Arduino sur un STM32 (ARM M3), via l'un des nombreux projets open source. LeafLabs et xduino ont tous deux du matériel de travail et des chaînes d'outils basées sur Arduino. J'utilise la carte Maple Leaflabs lorsque j'ai besoin d'un microcontrôleur 32 bits, par rapport aux puces Atmega ordinaires


1

Vous pouvez consulter http://www.hpinfotech.ro/html/cvavr.htm qui est un joli IDE facile à utiliser pour Atmel et écrire que certains CI l'ont utilisé professionnellement et son très bon, plus comme le niveau de commodité que vous obtenir des IDE comme Visual Studio. J'ai Eclipse pour être un peu maladroit pour le développement Android pas aussi lisse qu'un acheté.

J'ai Netduino sur lequel j'ai implémenté un système de contrôle Tricopter pour le plaisir, qui est très bien en temps réel et qui fonctionne de manière fiable, écrit en C # avec Visual Studio 2010. Le débogage sur l'appareil est généralement excellent, je le fais synchroniser automatiquement les données via wifi et j'ai un petit serveur HTTP dans l'avion.


0

Nous utilisons .NET Micro Framework dans des applications de production (appareils de mesure de précision). Ça fonctionne bien.

Les microprocesseurs d'aujourd'hui ont atteint l'état où vous pouvez utiliser le paradigme «créer-voir-changer-voir-profil ...». Les quantités de mémoire sont assez importantes et bon marché maintenant, donc très probablement, vous n'empilerez pas avec des conditions de mémoire insuffisante.

Et en tant que développeur C #, vous savez qu'un profilage adéquat pour atteindre la condition souhaitée est une meilleure façon de vivre que de deviner quoi de plus compliqué que vous devriez faire lors de la création de votre code pour rendre votre code (et peut-être pas) un peu plus rapide.

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.