D'autres langues pour la programmation embarquée
Je suis à la recherche de nouveaux langages de programmation (à partir assembleur, C, C++ et de base) intégré (microcontrôleur) de programmation.
Est-il possible par exemple, pour programmer les microcontrôleurs en C# ou Java? Peut-être que Ruby ou Python?
Si possible, merci de poster le développement des outils et du matériel utilisé.
- Plus "moderne" des langues comme le C#, Java, Ruby, Python nécessitent la collecte des ordures dans leur mise en œuvre. C'est très difficile à mettre en œuvre dans un petit microprocesseur, et a des effets négatifs sur la performance temps réel. La Java gars ont définis "en temps réel" de Java, mais il n'est pas très populaire et vous avez encore besoin d'un assez grand moment de l'exécution à exécuter, comme il l'a à la fois la collecte des ordures et déterministe de l'allocation de stockage. Vous pourriez être en mesure d'utiliser ces langues dans les "systèmes embarqués" basé sur x86 et ayant de grandes quantités de RAM. Mais sinon, C, C++ et-VIENT sont plus appropriés.
- Pourquoi êtes-vous intéressé, être curieux? Programmation embarquée est presque toujours très proche de la machine, ce qui suggère qu'un langage de bas niveau comme le C ou le C++ serait approprié. Python est un très bon langage, mais nécessite plus de temps d'exécution de soutien et délibérément reste loin du silicium.
- Juste pour ajouter quelques informations à propos de Python: la collecte des Ordures peut être explicitement contrôlée, de comptage de référence est utilisé pour la plupart des cas de référence dans la mise en œuvre, et il y a une petite variante de mise en œuvre ici: tinypy.org je pourrais envisager de Lua ainsi.
- "Je
m looking for alternatives programming languages (from assembly, C, C++ and basic) to embedded (microcontroller) programming. Is it possible for example, to programm microcontrollers in C# or Java? Maybe Ruby or Phyton?
Tout est possibe (pour de petites valeurs de "possible"). En quoi et pourquoi cherchez-vous? - J'ai vu Python et microPerl poignée de quelques tâches. Mais le C/C++ conduire le développement du marché pour des raisons évidentes (la performance).
- connexes: stackoverflow.com/questions/596929/...
- connexes: Quelles sont les interactif des langues qui s'exécutent dans de minuscules mémoire?
- connexes: Rapide langage interprété pour mémoire limitée microcontrôleur
InformationsquelleAutor RHaguiuda | 2010-06-15
Vous devez vous connecter pour publier un commentaire.
Il y a aussi Lua. Voir eLua.
SUITE a été populaire dans les systèmes embarqués pour une longue période de temps. Je n'ai pas d'expérience particulière avec elle, mais c'est très habilement conçu pour fournir un lot de fonctionnalités dans un petit espace, même difficiles, micro-contrôleurs, à l'aide de threaded code des méthodes d'interprétation. Il est même assez rapide, ce qui revient à un interprète. Il est facile d'obtenir des environnements de développement pour la SUITE, et il est assez facile de le porter à de nouveaux systèmes.
Les gens aiment ou détestent, parce qu'il insiste sur le fait que l'on code en notation polonaise inversée (en gros son d'une pile de la machine avec un gros tas de des opérateurs prédéfinis).
Ce fil semble pertinent: https://stackoverflow.com/questions/122292/forth-love-if-honk-then
SUITE a des vertus sur les petites machines, mais il est un peu d'une courbe d'apprentissage.
De SUITE a plusieurs côtés à la fois, tout ou partie de ce qui peut être utilisé pour le développement embarqué.
Le cadre de la lutte contre la SUITE est en relation avec la dichotomie est présente.
Sur l'on, la petite, raw voyages aller d'antan, ye olde Z-80 FigForth filetée interprètes, sont de TRÈS faible niveau en termes d'environnement, ils vous fournissent, et le développeur. Ils sont certainement de plus haut niveau que l'assemblée, mais, sans doute, (dans certains cas), que C.
Par exemple, hors de la boîte, de SUITE (ces petits, âgés de voyages aller beaucoup de gens pensent à propos avec de petits Processeurs) ne permet pas d'allouer de la mémoire dynamique, ou de faire (facile) de l'arithmétique des pointeurs. Il n'a même pas de "structures" en tant que concept dans la langue. Fondamentalement, vous obtenez de jouer avec des décalages par des constantes. Au départ, on ne pouvait même pas faire de la récursivité. Sans doute, il est plus gros inconvénient est qu'il n'a pas de types de données réelles. Ce n'est pas tapé à tous, c'est tous les nombres qui peuvent ou peuvent ne pas être des indicateurs de la mémoire qui peuvent ou peuvent ne pas être des données ou des caractères ou quoi que ce soit.
Bien sûr, dans le même temps, vous pouvez obtenir la totalité du système, avec un assembleur et l'éditeur, etc. tous à l'intérieur de 8 ko de RAM.
Donc, dans ce sens, c'est, oui, de plus haut niveau que l'assemblée, mais inférieure à C.
Mais (et c'est un gros Mais)...
Alors qu'il peut commencer à faible niveau, vous, en tant que programmeur, peut soulever jusqu'à quel niveau d'abstraction que vous êtes heureux avec -- vous pouvez le prendre à peu près aussi loin que vous le voulez aller.
Vous voulez structures? Vous voulez un segment de la fonction malloc de? Vous souhaitez qu'un objet système? Ceux sont tous disponibles pour le bâtiment lors de la fondation.
Vous voulez le soutien de première classe, au niveau du langage, pour votre petit ISAM base de système d'enregistrement? Facile.
Envisager De Common Lisp. Deux de ses plus puissantes fonctions sont des Macros et le Lecteur, qui vous donnent la possibilité de convertir le texte arbitraire dans le code qui est ensuite compilé.
De SUITE a la même capacité, seulement, il va encore plus loin. Dans les anciens voyages aller, vous avez même accès au compilateur lui-même, et pas seulement l'entrée pour le compilateur. La tige filetée interprètes sont sacrément simple, et facile à modifier. Vous avez une telle "raw" l'accès à la mémoire d'image vous pouvez littéralement faire ce que vous voulez à partir du quatrième système lui-même.
C'est de cette façon voyages aller peut "port d'eux-mêmes" à d'autres architectures facilement, comment ils peuvent optimiser les structures de données propres. De nombreux anciens voyages aller sont enfilées des Interprètes, mais il n'y a aucune raison qu'ils doivent être. Vous pouvez compiler de SUITE en code machine pur (c'est à dire pas d'interprète à tous) si vous le souhaitez.
Bien sûr, sur les modernes "micro" des contrôleurs, vous pourriez probablement simplement le port de l'ensemble de l'environnement de dev sur l'appareil. Ne jamais copier une image sur le fil à nouveau (jusqu'à ce que vous sauvegardez bien sûr).
Tout cela demande du travail, bien sûr. Peut-être trop de travail, c'est à dire le concepteur/programmeur d'en décider. C'est une primitive trousse d'outils qui peuvent être utilisés pour faire de très puissant choses.
J'ai utilisé personnalisé pcode interprètes sur les petites machines à enregistrer le code de l'espace.
La plupart des systèmes embarqués ont une partie qui peut être de haute performance, et beaucoup de choses qui s'exécute rarement ou pour lesquels la performance n'a pas d'importance.
J'ai mis en place un certain nombre d'applications dans lequel le noyau dur des trucs rapides a été écrit en assembleur (car c'est tout ce que j'ai pu obtenir comme un outil de développement), et ensuite codé un pcode interprète pour mon propre jeu d'instructions généralement avec de la pile de la machine de l'orientation.
À peu près tous vous avez besoin pour commencer sont les opcodes pour le PUSH/POP opérande (de 8 ou 16 octets), ADD/SUB/MUL/DIV, CMP, SI/GOTO, et de les appeler, et ils sont facilement codé même dans laide jeux d'instructions. Après que vous essayez d'écrire des sous-routines en utilisant l'APPEL, et uniquement ajouter des opcodes de faire ces choses que le pcode peut pas faire autrement (périphérique d'e/S), ou qui nécessitent un peu plus vite compuation.
De codage dans un pcode interprète est assez facile, même avec un assembleur; il suffit d'écrire "OCTET" assembleur directives entrecoupées de "MOT" directives " en fonction de ce que l'opcode veut.
Cette réponse, c'est essentiellement le pauvre homme de la variation de la réponse que j'ai donné plus tôt.
Vous pouvez essayer de python-sur-un-puce, pris en charge sur mbed ou STM32 plates-formes, portable vers d'autres plates-formes.
Comme la plupart des choses dans le monde embarqué, vos options dépendent de vos contraintes. Avez-vous commis à une plate-forme? Combien de code de l'espace/RAM disposez-vous? Votre soutien à puce d'un système d'exploitation?
Si vous êtes à la programmation des microcontrôleurs vous souhaitez presque toujours C ou Embedded C++, rien d'autre, faut juste trop utile sur une puce de mémoire flash. Ce sont les deux seules langues que je recommande, si vous n'êtes pas à la main montage de choses (et vraiment, qui n'est que ces jours-ci?)
- Je utiliser Embedded C++ comme tout le monde, sur un Arduino par exemple, j'utilise moi aussi C pour la plupart, sur un BRAS de la commission-je faire usage de.
J'ai utilisé pour le programme de Zilog Z180 du FORTH. Je ne voudrais pas le faire à nouveau!
C# peut être utilisé sur .NET Micro, mais vous aurez besoin d'un processeur 32 bits avec au moins 256 ko de RAM, et il n'est pas bon pour les applications en temps réel. Haute productivité pour l'application du droit des cependant, et il est possible d'embaucher des codeurs sans une vaste expertise incorporée si c'est à court d'approvisionnement et C# de l'expertise n'est pas.
Java est possible, en particulier sur une partie avec du matériel d'exécution du bytecode comme le Jazelle unité sur certains ARM9 et de haut de gamme des périphériques ARM. Mais il a encore besoin d'une JVM port, et qui peut être coûteux. Il est généralement utilisé en tant que partie d'un Linux embarqué port, si vous avez tous que les frais généraux ainsi, donc, est probablement encore plus gourmandes en ressources que .NET Micro.
Intel utilisé pour produire un langage très simple appelé PL/M (langage de programmation pour micro-ordinateurs) pour différents processeurs Intel à partir du 4004 à la 803286 mais il n'est plus disponible ou pris en charge, et n'a pas plus d'avantages que le C.
Ada est largement utilisé, en particulier dans le domaine militaire, l'aviation, et les applications de sécurité critiques.
Intégré Pascal est disponible pour certaines cibles.
Vous pouvez utiliser NI LabView comme un générateur de code pour les systèmes embarqués. En fait c'est ce que Lego Mindstorms est basé sur. La version industrielle est un peu plus sophistiqué et complet que le jouet de la version cependant! De même, vous pouvez générés intégré code à l'aide de MATLAB et SimuLink. Ce ne sont pas forcément les plus efficaces, mais plus pense comme la précision du moteur contrôleret de traitement du signal, SimuLink peuvent être très productifs.
Tout d'abord, l'asm et C sont les premiers choix, et pour une bonne raison. Commencer par là et de construire une fondation pour retomber sur.
Nous avons remarqué le wikireader, est quatrième de conduire ou au moins a une certaine suite de composants. Une langue que je n'ai jamais appris, mais pourrait un jour.
Le Dallas Semiconductor TINI conseil d'administration (dallas semi a été assimilé par la maxime) a été spécialement conçu pour être intégré JAVA conseil d'administration. En conséquence, ils ont dû mettre des tonnes de ram et flash sur elle par rapport à une normale microcontrôleur/conseil. Je pense que ces conseils sont toujours là.
Au moment de l'TINI est sorti l'argument est là que java pourrait être intégrée. Peut-être qu'il peut. Ma compréhension est que Python est similaire à java, dans le sens qu'il est interprété ou compilé vers le bas pour une commune de byte code ou code machine. Dans le cas de JAVA, la jvm est l'émulateur de communes en langage machine pour une cible spécifique. Si c'est le cas avec python alors, en théorie, python peut être intégré en tant que java. Je me suis dit que la suite est à pile ou une pile comme ce qui est ce que java est, de sorte qu'impliquerait également que suite, le travail incorporé ainsi java peut. Tant que vous avez assez de ram pour la pile et de suffisamment d'espace et de bande passante pour la vm/émulateur. Et là réside le problème. Et là réside le problème. de ram et rom sont chers, la dominante des prix et des consommateurs d'énergie de la partie. Qui veut payer 10 $pour quelque chose de sorte qu'il peut utiliser java quand ils peuvent obtenir plus de 1 $de la partie à l'aide de C/asm? C'est du moins ce que le marché va vous dire.
D'autre part, il y a cette notion que linux peut être incorporé et d'utilisation par les gens de cette façon. Cela signifie que mega ou giga-octets, où kilo-octets aurait fait le travail plus vite, mieux et de manière plus fiable (bien que sans doute plus à l'avant coût de développement). De sorte que certains de la plus récente embarqué ARM et mips allez avoir les ressources que vous recherchez.
Ma compréhension est que gcc et peut-être éventuellement si ce n'est déjà llvm peut avoir java et d'autres interfaces (ada par exemple, peut-être pascal). ce qui signifie que vous pouvez écrire en java par exemple, mais il a de compiler vers du code machine pour le processeur cible et de ne pas le générique java byte code ou quoi que ce soit appelée. Que serait votre situation idéale pour se rendre de l'scripty la langue de la machine réelle instructions (en supposant que vous continuez à poursuivre autre chose que C/asm).
Réponse courte: Possible? Oui, c'est possible. Le Dallas TINI est ou a été un exemple précis à l'aide de java. Regarder le wikireader ainsi, à l'aide de ce qui semble être de suite.
Ici est une liste de langues que vous pouvez utiliser avec la 8-bits de microcontrôleur AVR. Il comprend Basic, Java, Pascal, Python et de Régime. En particulier, PyMite implémente un sous-ensemble de l'interpréteur Python.
Vous pouvez écrire du code dans
C#
sous.NET
. Vous devez utiliser .NET Micro Framework.Mais j'préférez
C
langue pour ce genre de choses comme des choses. J'ai écrit dansC
surARM7Cortex-M3
processeur avec Keil Cadre et cela fonctionne bien, ce cadre prend en charge de nombreuses interfaces de programmation et du processeur.Remarque: Micro Framework n'est PAS un OS temps réel (par Matthieu Whited de commentaires)
À partir d'un kickstarter, Micro Python est maintenant et conçu pour les systèmes embarqués
http://micropython.org/
https://mail.python.org/pipermail/python-list/2014-June/672994.html
"Prend en charge près de Python 3 syntaxe, y compris le rendement (la compile
99.99% de la bibliothèque standard de Python 3)."
Si vous comptez JavaCard comme un microcontrôleur, alors vous pouvez le programmer en Java.
Il y a plusieurs physiquement petits appareils qui fonctionnent plus ou moins complète de la version de Linux.
Vous pouvez les programmer dans pratiquement n'importe quel langage de programmation qui fonctionne sur Linux, c'est à dire, pratiquement n'importe quel langage de programmation connu de l'humanité.
Pour les microcontrôleurs avec de petites quantités de RAM, beaucoup trop petite pour le fonctionnement de Linux, voir
StackOverflow: "Quelles sont les interactif des langues qui s'exécutent dans de minuscules mémoire?".
Je pense qu'il y a (au moins) deux réponses à cette question. Tout d'abord je tiens à souligner que si vous êtes à la programmation, à proximité du matériel et avec des ressources limitées, vous trouverez que C ou C++ est l'outils qui va de suite mieux. Les langages de haut niveau n'est pas facile à faire en peu de manipulation de niveau etc, mais ces choses sont facile à faire en C. une Partie de la solution est de trouver l'outil qui est le meilleur pour le travail, et pour les bas-niveau stuff Python ou Ruby n'est pas ce que vous voulez.
D'autre part, si ce que vous voulez faire est de simplement écrire des applications qui s'exécutent sur un micro-contrôleur, alors vous pouvez avoir plusieurs options en fonction de la cible que vous travaillez. De nombreuses plateformes embarquées sont beaucoup plus puissantes que seulement quelques ans les postes de travail et, par conséquent, exécuter des actions Linux qui vous donne un grand nombre d'options de langue.
Pour Python, il sert à être un projet intéressant: Profondément Ancrée Python, mais je pense que c'est mort depuis un certain temps maintenant.
Vous pouvez prendre un coup d'oeil au très puissant AvrCo Multitâche Pascal pour AVR. Vous pouvez l'essayer à http://www.e-lab.de. MEGA8/88 version est gratuite. Il ya des tonnes de pilotes et de simulateur avec JTAG débogueur et nice en direct ou simulées, les visualisations de tous les appareils de la norme (LCD, 7SEG, 14SEG, LEDDOT, CLAVIER, RC5, SERVO, MOTEUR pas à pas...).
Pour le PIC, il n'y a JAL, il est livré avec quelques belles bibliothèques.
Quelques mois il ya commencé le projet RubimC - Ruby compilateur et framefork pour les microcontrôleurs à petit la mémoire.La version actuelle est de travailler, mais il s'aperçoit de loin pas toutes les fonctionnalités de Ruby.