Question:
Des appareils programmables sont-ils disponibles pour des langues plus modernes?
arussell84
2011-05-21 12:01:20 UTC
view on stackexchange narkive permalink

Pardonnez ma naïveté, mais il semble que la plupart des appareils programmables (FPGA, PLC, PIC, etc.) soient programmables en utilisant les langages C ou C ++, ou une variante de l'un d'entre eux. Existe-t-il des appareils qui utilisent quelque chose comme D, Mozilla Rust ou Google Go? Je me rends compte que ces deux derniers, en particulier, sont des langues immatures; mais sûrement quelqu'un, quelque part, a publié un produit expérimental.

Quelqu'un a-t-il des suggestions?

Aimez-vous Forth? C'est un langage populaire pour les appareils intégrés. Il y avait un article récent [ici] (http://www.forth.org/lost-at-c.html) et une discussion sur Hacker News [ici] (http://news.ycombinator.com/item?id= 2574204), avec des commentaires très instructifs. Cependant, vous n'avez pas le temps d'apporter quoi que ce soit ici pour le moment. Si quelqu'un veut transformer cette information en une réponse, je serais très obligé!
@reemrevnivek En fait, j'ai vu cet article plus tôt dans la journée, et je ne pense pas que Forth corresponde à mes goûts personnels, mais merci de l'avoir partagé!
@arussell - Oui, je n'étais pas sûr que cela corresponde au moule de D, Rust ou Go.
Qu'apporteraient les langages modernes à la programmation (vraiment) intégrée? PS. Dans ce contexte, par programmation intégrée, j'entends la programmation dans laquelle un Cortex-M3 est une bête de performance hurlante et vous n'utilisez jamais que de la SRAM et du Flash sur puce.
Related: [Quelles sont les bonnes options pour débuter la programmation matérielle en utilisant des langages de haut niveau?] (http://stackoverflow.com/questions/366991/what-are-good-options-for-beginning-hardware-programming-using-high -level-languag)
Related: [Quels sont les langages interactifs disponibles qui fonctionnent dans une mémoire minuscule?] (http://stackoverflow.com/questions/1082751/what-are-the-available-interactive-languages-that-run-in-tiny-memory )
@davidcary Je cherchais plus de réponses sur les langages de programmation système que sur les langages de niveau supérieur ou interprétés, mais il y a encore de bonnes informations dans ces liens. Merci.
@jpc Il me semble qu'au lieu d'être véritablement curieux, vous sous-entendez simplement que vous n'êtes pas intéressé par les réponses à ma question. Si vous n'êtes intéressé par rien d'autre que C, vous pouvez simplement ignorer ma question. Sinon, je serais ravi de répondre à des questions plus précises.
@arussell84: Je suis vraiment intéressé par la réponse à la fois à votre question et à la mienne. Aussi: croyez-moi que j'en ai vraiment marre du C pur dans la programmation embarquée. Je pense qu'il y a beaucoup à améliorer dans le domaine des langages de programmation embarqués mais je ne crois pas que les langages de programmation "normaux" pour les gros ordinateurs offriront une grande partie de cette amélioration. C'est pourquoi j'ai demandé comment vous attendez d'eux qu'ils vous aident.
@jpc Dans ce cas, soyez indulgents, car les commentaires ne peuvent contenir qu'un nombre limité de caractères. D est censé être une amélioration par rapport au C ++. Je ne parle pas de niveau supérieur tel que C # ou Java. Peut toujours gérer manuellement la mémoire et utiliser des pointeurs. Lisez le [D overview] (http://www.digitalmars.com/d/2.0/overview.html). Deux fonctionnalités qui m'intéressent particulièrement sont les fermetures et les fonctions anonymes. Je pense que Go and Rust pourrait devenir populaire, mais pourrait ne pas convenir aux périphériques embarqués. Trop tôt pour le dire. Objective-C pourrait cependant fonctionner; Je n'ai pas regardé.
J'ai toujours eu l'impression que les fermetures sans ramassage des ordures sont pénibles. Peut-être devriez-vous regarder les blocs (une fonctionnalité LLVM récente d'Apple). Vous pouvez vérifier Objective-C car il a quelques bons remplacements pour les fermetures (le protocole cible / action) et je crois qu'une libobjc intégrée au système ne serait pas beaucoup de travail. OTOH lorsque vous commencez à écrire des choses comme des serveurs HTTP ou autres (où je pense que la liaison dynamique et les langues modernes sont les plus utiles), vous manquerez rapidement de mémoire avec ou sans un langage moderne.
Neuf réponses:
starblue
2011-05-21 17:12:20 UTC
view on stackexchange narkive permalink

Vous n'avez pas besoin de différents appareils pour utiliser ces langues, vous avez juste besoin du système logiciel approprié.

Les principaux problèmes pour lesquels cela n'est pas fait plus souvent sont:

  • Ces langages ont généralement besoin de plus de ressources (mémoire, exécution) pour la même tâche. Pour les gros volumes, l'effort réduit de programmation serait plus que compensé par des coûts matériels plus élevés.

  • La plupart des langages de niveau supérieur nécessitent une allocation de mémoire dynamique avec garbage collection, ce qui est difficile à faire en temps réel.

  • Il est plus difficile d'obtenir des développeurs intégrés pour ces langages.

Cela dit, il existe des éléments tels que Java en temps réel, qui sont utilisés dans les systèmes embarqués réels.

Sans fournir tous les détails que je recherchais, votre réponse m'a finalement conduit à ma réponse. En prenant un PIC comme exemple, il y a plusieurs étapes entre le processus d'écriture du code sur votre ordinateur et l'exécution de ce code sur le PIC. Vous devez le compiler et le télécharger, et il existe différentes façons de le faire. Pour, par exemple, écrire avec D pour un PIC, quelqu'un devrait écrire un équivalent de [SDCC] (http://sdcc.sourceforge.net/) pour D.
Point supplémentaire: dans les systèmes embarqués (en particulier les petits sans OS, etc.), de nombreuses fonctionnalités (et frais généraux / pénalités) des langages de niveau supérieur / plus modernes sont au mieux non pertinents ou réellement indésirables.
Dr. Watson
2011-05-21 17:18:43 UTC
view on stackexchange narkive permalink

Il existe des projets open source travaillant sur de tels objectifs. Il existe un projet pour Ada sur les MCU Atmel (bien que je ne puisse pas le faire fonctionner). Un de mes collègues programme son MCU 68HC11 avec une version réduite de Ruby sur laquelle il travaille lui-même. Et il y a une société, BlueSpec, qui a un nouveau HDL pour FPGA / ASIC basé sur Haskell. Mais ce n'est pas un outil auquel la plupart auraient accès.

Les vendeurs ont tendance à s'en tenir à C car il y a un large public pour C et il est largement accepté. De même, pour les FPGA / PLD, VHDL / Verilog sont largement acceptés et éprouvés. Au lieu d'avoir à prendre en charge de nombreux langages différents, la plupart préfèrent se concentrer sur leurs puces, en essayant d'améliorer les performances de leurs compilateurs C et d'offrir de meilleurs outils pour configurer et gérer les ressources sur leurs puces. Je suis en quelque sorte d'accord avec cette approche moi-même. Je préfère de loin que Texas Instruments améliore ses outils de configuration de périphériques avancés sur ses puces plutôt que d'implémenter une métaprogrammation avancée de modèles sur son compilateur C ++ minimal.

Gorgen
2011-05-21 14:08:15 UTC
view on stackexchange narkive permalink

Vous êtes gracié.

La raison pour laquelle C, et moins C ++, (parmi d'autres langages comme VHDL) est utilisé pour ces types de périphériques est qu'il est facile de traduire les constructions de langage vers le matériel sous-jacent. C est considéré comme lingua franca, compris par beaucoup et pour porter un nouveau langage sur le périphérique, surtout si la lecture / écriture dans les registres est délicate, ne vaut pas la peine si le langage n'est pas beaucoup mieux pour exprimer des constructions utiles.

Les exemples que vous utilisez en tant que langages plus récents et plus brillants, D, par exemple, pourraient être un candidat pour un langage "de bas niveau" si plus de programmeurs l'utilisent. D est présenté comme un C ++ moderne sans tout compromis avec C et implémenté dès le début. Malheureusement sans toutes les bibliothèques C ++. Je pense que vous pouvez appeler des bibliothèques C depuis D.

La question n'est pas de savoir si c'est plus récent, la question est de savoir si ce sont de meilleurs outils. Pour autant que je sache, ce n'est pas le cas.
modifier
Quand j'ai écrit du code intégré (en C), j'ai souhaité de meilleures macros / modèles que C offre. Comme il s'agit d'une construction au moment de la compilation, cela n'a vraiment rien à voir avec le matériel sous-jacent. Mais beaucoup plus compliqué à implémenter dans un compilateur.

Vous pouvez utiliser un macro-processeur externe, tel que m4. C'est très puissant.
Je me suis retrouvé à souhaiter la possibilité de surcharger les fonctions en ligne en fonction de la capacité du compilateur à évaluer un paramètre en tant que constante. Dans une fonction comme "élever x à la puissance y", cela vaudrait la peine pour une version en ligne de puissances constantes de cas particulier de 0 à 3, et d'appeler une fonction de bibliothèque pour d'autres puissances. Cependant, il ne serait pas utile de générer du code en ligne pour tester ces constantes. Malheureusement, je ne connais aucun compilateur, quel que soit le langage, qui puisse distinguer les surcharges en fonction de valeurs constantes.
@supercat: Vous pouvez effectuer une spécialisation de modèle en C ++ pour résoudre certains de ces problèmes, mais ce faisant, vos arguments doivent être dans l'instanciation de modèle "<>" au lieu des arguments de fonction "()", ce qui n'est pas idéal.Je ne peux pas avoir votre gâteau et le manger aussi.
Leon Heller
2011-05-21 14:06:00 UTC
view on stackexchange narkive permalink

Les appareils ont été conçus pour utiliser efficacement d'autres langages, tels que LISP / Scheme, Forth et Java. Je ne crois pas qu'aucun d'entre eux ait été conçu pour les langages que vous avez mentionnés, peut-être qu'ils ne conviennent pas aux systèmes embarqués (à part D qui devrait fonctionner efficacement sur tout ce qui est conçu pour C / C ++). Ils pourraient vraisemblablement être implémentés sur n'importe quel MCU approprié, si quelqu'un le souhaite.

Peut-être que Go et Rust ne seront finalement pas adaptés à la programmation intégrée. Ils sont un peu nouveaux, je suppose, mais ils prétendent être des langages de programmation de systèmes, c'est pourquoi je les ai énumérés comme exemples. Il y a aussi eu des nouvelles concernant ces langages récemment dans les cercles de programmation, alors j'ai essayé de choisir des langages qui n'étaient pas trop obscurs.
jamesotron
2011-05-24 09:18:51 UTC
view on stackexchange narkive permalink

Il y a toujours netduino, qui vous permet de coder en .NET.

Je ne suis pas fan de .NET, mais c'est à peu près le genre de chose que je recherchais. =)
Peter Gibson
2014-06-19 16:50:32 UTC
view on stackexchange narkive permalink

Jetez un œil à Micro Python http://micropython.org/

Micro Python est une implémentation légère et rapide du langage de programmation Python 3 qui est optimisé pour fonctionner sur un microcontrôleur. La carte Micro Python est une petite carte électronique qui exécute le langage Micro Python.

Elle a été financée avec succès en tant que projet kickstarter en décembre 2013 et ils ont un tableau de référence.

Philippe
2011-05-21 18:03:21 UTC
view on stackexchange narkive permalink

Vous recherchez un microprocesseur. Intel les vend, tout comme AMD et ARM. Vous pouvez utiliser n'importe quelle langue de programmation sur ces appareils.

Quant aux FPGA: votre choix de langues est limité. C'est parce que vous avez besoin d'un outil de synthèse qui traduira votre code en netlist. En plus de VHDL, Verilog et (C restreint), vous pouvez utiliser des langages plus modernes comme MyHDL (construit sur Python) ou Bluespec (semblable à Haskell).

Les microcontrôleurs ne sont que des microprocesseurs de faible puissance avec des périphériques intégrés. Vous ne pouvez pas exécuter un ancien langage de programmation sur un FPGA (avec soft core, je pense que nous supposons) ou un microcontrôleur car ils sont trop lents, trop petits et trop bas pour que d'autres langages fonctionnent bien (et par conséquent, ils n'ont pas de compilateurs écrits pour ces langages.Microprocessor vs Microcontroller n'est pas la distinction qui nous intéresse ici.
Je n'ai pas dit microcontrôleur, j'ai dit microprocesseur, qui comprend les microcontrôleurs, mais aussi votre processeur Intel Core i7 habituel. Comme pour les FPGA avec des noyaux souples ou des noyaux durs; ils viennent dans de nombreuses tailles différentes et oui, le peut exécuter n'importe quelle langue. Ils exécutent un système d'exploitation Linux entier.
Votre citation d'Intel me rappelle cette vieille puce: 8052AH-BASIC.http://www.dusko-lolic.from.hr/i8052fract/sbc1.jpg.Il y avait un interpréteur BASIC en ROM!
Johan
2011-05-24 18:47:53 UTC
view on stackexchange narkive permalink

Premièrement, vos exemples sont de petits appareils qui ont un ensemble limité de ressources, puis les anciens langages qui sont proches du matériel comme c et vhdl font bien le travail.

Les nouveaux langages "cool" ont besoin de plus ressources pour bien fonctionner, donc je suppose que ce que vous cherchez viendra très bientôt puisque le MCU devient de plus en plus puissant avec le temps.

Mon point est que la plupart des MCU: s sont toujours programmés en C, et le gars cool vient juste de commencer à jouer avec C ++ sur ces appareils.

Mais si vous jetez un œil au MCU 32 bits basé sur ARM qui a beaucoup plus de ressources que les anciens 8 bits vous peut trouver un projet fou comme eLua, qui essaie d'exécuter le langage de script lua sur un mcu basé sur Cortex-M3 ...

Donc, nous y arriverons, mais il va Et je ne pense pas qu'aucun de ces projets fous ne soit (encore) prêt pour une utilisation en production, mais certains le seront car il est plus rapide de se développer dans des langages avec un niveau d'abstraction plus élevé.

Unslander Monica
2014-10-06 21:23:20 UTC
view on stackexchange narkive permalink

Il existe une application de preuve de concept fonctionnant sous Rust sur les microcontrôleurs ARM STM32F4xx. Les modifications étonnamment mineures nécessaires pour porter Rust sont disponibles dans ce fork de Rust.



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...