Question

Je recherche des outils et des techniques de prototypage (prototypage virtuel), de simulation et de test de code C profondément incorporé sur des fenêtres de bureau, y compris des panneaux avant incorporés réalistes réalistes constitués de boutons, de voyants et d'affichages LCD (segmentés et graphiques).

Je suis spécifiquement intéressé par une approche éventuellement de bas niveau, en utilisant le code C pure C et l'API RAW Win32 plutôt que MFC, .NET / C #, VXWidgets ou QT.J'aimerais également utiliser des outils de développement gratuits, tels que Visual C ++ Express avec la plate-forme SDK et Resedit pour la modification des ressources.

Je recherche des exemples de code pour rendant les LCD graphiques (de la couleur monochrome à 24 bits) avec une interface de niveau de pixel efficace, des LCD multi-segments et des boutons dessinés au propriétaire qui répondent à la fois à "déprimé" et "publié" événements.

Était-ce utile?

La solution

Je suis surpris que ma question initiale ait déclenché tant de malentendus et de commentaires indésirables. La stratégie de développement de C code C profondément intégré sur une machine (par exemple, un PC) et l'exécuter sur un autre (le microcontrôleur incorporé) est appelé "double ciblage" et est vraiment assez courant. Par exemple, développer et tester un code profondément intégré sur le PC est la pierre angulaire du livre récent "Développement axé sur les tests pour C" en C "par James GRENNING.

Éviter le goulot d'étranglement matériel ciblé avec double ciblage

Veuillez noter que le double ciblage ne signifie pas que l'appareil embarqué a quelque chose à voir avec le PC. Ce ne signifie pas non plus que la simulation doit être exacte avec le processeur cible intégré.

Dual ciblage signifie simplement qu'à partir du premier jour, votre code incorporé (typiquement en C) est conçu pour fonctionner sur au moins deux plates-formes: le matériel cible final et votre PC. Tout ce que vous avez vraiment besoin pour ceci est deux compilateurs C: un pour le PC et un autre pour le dispositif embarqué.

Toutefois, la stratégie de ciblage double nécessite une manière spécifique de concevoir le logiciel intégré de telle que toutes les dépendances matérielles cibles soient traitées via une interface bien définie souvent appelée package de support de carte (BSP). Cette interface comporte au moins deux implémentations: une pour la cible réelle et une pour le PC, par exemple en cours d'exécution. Avec une telle interface en place, la majeure partie du code intégré peut rester complètement ignorée quelle implémentation BSP est liée et peut donc être développée rapidement sur le PC, mais peut également fonctionner sur le matériel cible sans modification .

Bien que certains programmeurs intégrés puissent considérer le double ciblage en tant que fardeau auto-infligé, les développeurs les plus expérimentés sont généralement d'accord pour que les frontières entre logiciels et matériel soient effectivement bénéfiques, car il en résulte plus modulaire, plus portable, et plus logiciel maintenu avec une durée de vie beaucoup plus longue. L'investissement dans la double ciblage a également un retour immédiat dans le cycle de débogage compilé de manière considérablement accélérée, qui est beaucoup plus rapide et plus productif sur le puissant PC par rapport à une cible profondément intégrée beaucoup plus lente et contrainte de recours avec une visibilité limitée dans le code de fonctionnement. .

panneau avant Win32 Boîte à outils GUI

Lorsque vous développez un code incorporé pour les périphériques avec des interfaces utilisateur non triviales, on fonctionne souvent dans le problème de la représentation des panneaux avant embarqués sous forme d'éléments d'interface graphique sur le PC. Le problème est si courant que je suis vraiment surpris que personne ici ne puisse recommander une bibliothèque existante ou un projet open source, qui fournirait une interface C simple uniquement aux éléments de base, tels que les LCD, les boutons et les LED. Ce n'est vraiment pas si compliqué, mais il semble que chaque développeur intégré doive réinventer cette roue encore et encore.

Ainsi, pour aider les développeurs intégrés intéressés par le prototypage des périphériques intégrés sous Windows, j'ai créé un "panneau avant Win32 Gui Toolkit" et l'avez posté en ligne sous la licence GPL Open Source (voir Http://www.state-machine.com/win32 ). Cette boîte à outils ne repose que sur l'API Win32 brut en C et fournit actuellement les éléments suivants:

  1. Affichage de la matrice DOT-MATRIX Pour un écran adressable de pixels efficace tel que des LCD graphiques, des OLED, etc. avec une couleur allant jusqu'à 24 bits

  2. Affichage du segment pour l'affichage segmenté tel que le segment LCDS et les voyants de segment avec des bitmaps génériques et personnalisés pour les segments.

  3. Boutons dessinés au propriétaire avec des bitmaps "déprimés" personnalisés et "libérés" et capable de générer des événements distincts lorsqu'ils sont déprimés et lorsqu'ils sont libérés.

  4. La boîte à outils est livré avec un exemple et une note d'application (voir http://www.state-machine .com / win32 / an_win32-gui.pdf ), montrant comment gérer l'entrée des boutons tirés du propriétaire, des boutons réguliers, du clavier et de la souris. Vous pouvez également consulter une démo animée à http://www.state-machine.com/win32/front_panel.html < / a>.

    Concernant la taille et la complexité de la "Toolkit GUI32 GUI GUI32", la mise en œuvre des éléments d'interface graphique susmentionnée ne prend que environ 250 lignes de C. L'exemple avec toutes les sources d'entrée et beaucoup de commentaires s'élève à quelque 300 lignes. de C. La boîte à outils a été testée avec le Visual C ++ Express 2010 (avec la plate-forme Edition Express SDK) et l'éditeur de ressources Resedit gratuit.

    profiter!

Autres conseils

Les appareils que vous mentionnez dans votre commentaire clarifiante à la question n'utiliseront jamais un PC Windows, la programmation de Windows de niveau inférieure n'est pas une exigence dans ce cas. En fait, je dirais que c'est indésirable. Le prototypage concerne la vitesse. Il s'agit de la rapidité avec laquelle vous pouvez mettre quelque chose ensemble pour montrer des investisseurs potentiels ou une gestion supérieure ou un autre décideur.

Vous ne voudriez pas passer le temps supplémentaire avec une API de faible niveau C et Win32 jusqu'à ce que les exigences du projet soient suffisamment rinçues que vous saviez que vous saviez que c'était une exigence absolue pour les livrables de projet final ( peut-être un serveur / PC outil de surveillance? ). Jusque-là, vous voulez une vitesse de développement. Lucky pour vous L'industrie dispose d'outils de prototypage rapide et de développement du matériel comme vous décrivez.

Ma préférence pour le prototypage avec développement incorporé

Quant à mon avis en tant que développeur, j'aime la microframe .NET Microframework (.netmf) simplement parce que je suis déjà un développeur Microsoft .NET et peut transférer beaucoup de mes compétences existantes. Selon I prototype avec un microcontrôleur àès à l'aide de C # sous Visual C # Express 2010 (gratuit que vous avez besoin). C'est rapide, facile et vous travaillez sur le cœur de votre projet en quelques minutes.

Si votre expérience en tant que développeur est différente, vous pouvez rechercher un micro contrôleur programmé à l'aide de Basic, Java ou d'une autre langue pour aider à la rapidité de développement en réutilisant votre compétence essentielle.

Adressant à votre question Bounty Commentaires

Des parties étonnamment grandes du logiciel embarqué peuvent être développées sur l'ordinateur de bureau par opposition à la cible profondément intégrée. Cette éviter le "goulot d'étranglement du système cible" peut potentiellement améliorer la productivité par un ordre de grandeur, si cela fait correctement. Cependant, à Développez des logiciels incorporés sur le bureau, il faut simuler l'interface utilisateur. composants, tels que des affichages (segmentés et de plus en plus graphique), des voyants, des boutons et des boutons. Je cherche une telle interface utilisateur Composants écrits dans une API Win32 uni en C pour une intégration facile avec Code incorporé à développer et à tester sur les fenêtres de bureau.

J'ai intégré le développement à temps plein de manière professionnelle pendant plus de 4 ans ainsi que de nombreuses années entourant ce temps partiel. Alors que ce que vous avez dit ci-dessus est un peu vrai, cela ne vous sauvera pas de temps ou d'argent, c'est pourquoi tout le monde est confondu de la motivation de cette stratégie. Nous avons passé des années à essayer de publier un émulateur Windows pour les périphériques matériels de cette société qui permettrait de gagner du temps théoriquement pour le prototypage. C'était toujours une douleur et nous avons passé de nombreuses heures de travail à essayer d'imiter l'expérience que si nous sommes allés directement des spécifications dessinées de l'interface utilisateur esquissée au développement réel. L'émulateur a retardé le développement du matériel et ne prendrait souvent pas en charge les dernières fonctionnalités avant six mois ou plus après la publication du matériel. C'était beaucoup de travail supplémentaire pour très peu de valeur.

Vous allez dépenser davantage de votre temps à développer des composants d'émulation de la plate-forme Win32 non réutilisables de Win32 que de rédiger le code du projet de base lui-même. Cela n'a aucun sens pour les fournisseurs matériels qui fournissent cet émulateur en tant qu'outil «Ajout de valeur» aux développeurs potentiels de la 3ème partie, mais il n'a aucun sens pour le prototypage de nouvelles conceptions matérielles.

Les environnements de développement modernes tels que Visual C # Express 2010 avec un microcontrôleur FEZ peuvent compiler, appuyer sur la sortie du projet sur le microcontrôleur, puis commencer à déboguer tout aussi vite ou plus rapide que vous pourriez compiler et exécuter un faible Application de niveau Windows dans C émulez des LCD ou des voyants ou des commutateurs, etc ... donc votre commentaire, «Améliorer la productivité par un ordre de grandeur» n'est tout simplement plus vrai avec les outils modernes. (Cela peut avoir été avant les 10 dernières années environ.)

Si vous voulez vraiment, vraiment simplement simplement simuler le matériel intégré visuellement sur un PC, utilisez quelque chose comme Adobe Flash pour se moquer d'une interface utilisateur. Mais ne pas dupliquer le code en codant pour Windows lorsque le périphérique final que vous êtes prototypage ne fonctionnera pas Windows (peut-être que vous ne l'aurez pas dit). Utilisez les outils de prototypage les plus rapides disponibles aujourd'hui, ce qui est sans équivoque et non API C et Win32!

peut-être utiliser Stackexchange for Electronics?

Parce que c'est un site orienté développement, la discussion sur les mérites de matériel incorporé spécifique n'est pas vraiment pertinente. Si vous décidez de recentrer à l'aide de l'électronique de microcontroller pour le prototypage ( ARDUINO , FEZ , Hélice , Timbre de base , POLOLU , etc.) Vous pourriez demander des conseils matériels électroniques sur

> Stackexchange for Electronics .Je dirai que la plupart de ces plates-formes sont conçues pour faciliter le prototypage des LCD, des voyants, des boutons et des interfaces comme indiqué.Vous pouvez généralement assembler quelques modules pré-construits en quelques minutes et être prêt à commencer à coder votre projet.Des économies de temps énormes peuvent être ici.

Vous vous demandez trop de choses que vous devez jeter un coup d'œil @ proteus. http://www.labcenter.com/products/vsm_overview.cfm

Comme Mahmoud l'a dit, vous pouvez trouver votre solution de code avec un exemple de prototypage dans Proteus Professional .C'est l'un des logiciels populaires pour le prototypage, la simulation et le codage, vous pouvez Télécharger le Proteus Professional gratuitement et vérifier leur manuel.

meilleure de la chance

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top