jeudi 7 avril 2022

Programmer un micro-contrôleur ATtiny avec VSCode et PlatformIO

Programmation du processeur ATtiny3226

Connecteur ICSP

Repérer la PIN 1 du connecteur sur le PCB reliée à la résistance R114 (cf. schéma en bas à droite) et la PIN 1 sur le connecteur ICSP de l’Atmel-ICE :




AVR cores are maintained by SpenceKonde mega Tiny Core is for ATtiny 3226

https://github.com/SpenceKonde/megaTinyCore


Programming the new ATtiny from Arduino using UPDI [Beginner Tutorial]

https://www.youtube.com/watch?v=AL9vK_xMt4E


Programmateur Arduino – Micro

J’ai une carte Arduino micro, essayons d’en faire un programmateur UPDI pour ATTiny.

jtag2updi sketch : clone or download to upload sketch jtap2updi.ino into programmator board :

https://github.com/SpenceKonde/jtag2updi

Dans la page ci-dessus, on trouvera un autre sketch en cliquant sur « More ... », c’est en fait la suite de SpenceKonde qui laisse à Dlloydev l’opportunité de maintenir et poursuivre le développement du projet jtag2updi. Attention en cliquant sur More… vous êtes dans le Wiki, il faut revenir au Code.

https://github.com/Dlloydev/jtag2updi

Uploaded scketch in programmator using Arduino-IDE

rename jtag2updi-master to jtag2updi


Choose type of card « micro »


Read from the card



Téléverser le scketch :


Ce scketch n’est pas adapté à la arduino board micro… Il compile si on choisit le type de carte nano ...

Tout en bas de la page :

compare HV UPDI see USE_HV_PROGRAMMING in sys.h

rien à faire avec une micro

To Be Continued...

Programmateur Atmel-ICE

Buring Arduino bootloader with Atmel-ICE results in avrdude throwing a "verification error"

https://stackoverflow.com/questions/65477291/burning-arduino-bootloader-with-atmel-ice-results-in-avrdude-throwing-a-verific

Unofficial list of 3rd party boards support urls · arduino/Arduino Wiki · GitHub

Availability since Q4 2021 :

https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/ATtiny_x26.md

En savoir plus sur la famille des ATtiny :

ATtiny microcontroller comparison chart - Wikipedia

https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/PlatformIO.md

https://github.com/platformio/platform-atmelavr/issues/268

https://forum.arduino.cc/t/resolved-avrdude-w-arduino-nano-every-cant-upload-any-code-to-arduino-ide/623464/6

Unable to burn bootloader with Atmel-ICE in Arduino IDE 1.8.13

https://github.com/arduino/Arduino/issues/11107

https://github.com/arduino/avrdude-build-script/releases/tag/6.3.0-arduino19

To Be Continued…

J'ai travaillé avec un ATmega sur carte Arduino, je souhaite affubler mon micro-contrôleur principal d'un ATtiny et maintenant que j'ai un projet complet avec ATmega que faire pour l'adapter à mon nouveau micro-contrôleur ATtiny ?

https://github.com/platformio/platform-atmelavr/issues/268

https://github.com/SpenceKonde/megaTinyCore

Buring Arduino bootloader with Atmel-ICE results in avrdude throwing a "verification error"

https://stackoverflow.com/questions/65477291/burning-arduino-bootloader-with-atmel-ice-results-in-avrdude-throwing-a-verific

Unofficial list of 3rd party boards support urls · arduino/Arduino Wiki · GitHub

Availability since Q4 2021

https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/ATtiny_x26.md


https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/PlatformIO.md


https://github.com/platformio/platform-atmelavr/issues/268


https://forum.arduino.cc/t/resolved-avrdude-w-arduino-nano-every-cant-upload-any-code-to-arduino-ide/623464/6


Unable to burn bootloader with Atmel-ICE in Arduino IDE 1.8.13

https://github.com/arduino/Arduino/issues/11107


https://github.com/arduino/avrdude-build-script/releases/tag/6.3.0-arduino19


C'est quoi la programmation UPDI ?

L'Atmel-ICE est un programmateur UPDI cela signifie que je peux le connecter à un connecteur ICSP pour programmer mon ATtiny en UPDI.

Making your own programmateur

lundi 6 décembre 2021

Microcontroller debugging ou comment déboguer son micro-contrôleur ?

Voilà j'élargie un peu le sujet du débogage, j'étais braqué sur arduino et les interfaces de débogue ISP, SPI, JTAG, JTAGICE, debugWIRE mais en fait, je vais tenter de répondre à une question plus large ; comment déboguer mon microcontrôleur ? Quelque soit son type, sachant que la solution dépendra certainement du type (Harvard vs Princeton). Et je verrais bien ce que je peux utiliser avec Arduino ou autre.

Microcontrolleur ATmega 2560
Comment déboguer mon microcontrôleur Atmel AVR

Le débogue de microcontrôleurs est toujours une affaire de protocole entre l'IDE qui gère la chaîne de développement avec ses outils de compilation, de linkage et de débogue. Pour avoir une idée rapide de ce que peut-être un protocole de débogage, je vous propose de visiter rapidement la page : The debugWire protocol

Je dirais peut-être trop rapidement que debugWire est lié à l'AVR (structure du cœur du microcontrôleur). Ce que je ne souhaite pas c'est un protocole Liaison Série LS qui prenne la place du débogage à l'aide de TRACEs qui elles aussi passe par la LS car dans ce cas il est stipulé que vous devez retirer de votre code ce qui dialogue sur la LS.

Déboguer son microcontrôleur consiste à pouvoir le stopper dans un état stable où peut avoir accès aux mémoires et aux registres. On dit que l'on met un point d'arrêt à l'aide de l'IDE en face d'une ligne de code source et l'on peut alors visualiser le contenu des variables et des registres internes du microcontrôleur pour corriger une éventuelle erreur d'exécution.

BMP - General debugging methods
Article distrayant sur les différentes méthodes pour déboguer son microcontrôleur. On y apprend quelques abréviations fortes utiles :
ICE : In Circuit Emulator : il s'agit de remplacer la puce par une puce permettant d'accéder aux opérations internes du processeur (c'est cher).
ICD : In Circuit Debug : le chip propose en interne une partie et une liaison vers l'IDE permettant de le déboguer.

Le site vous présente d'autres techniques amusantes comme déboguer avec la Liaison Série, des Leds un LCD, pourquoi pas. Personnellement, sans système de déboguing je crois beaucoup dans les systèmes de TRACE.

Concernant les IDEs qui dialoguent "protocole de débogage" avec des microcontrôleurs, ce n'est pas difficile à priori, il n'y en a qu'un pour les "petits microcontrôleurs" et c'est microship :

MPLAB X IDE

Il vous faudra installer "en dessous" une chaîne de compilation qui correspond au microcontrôleur que vous souhaitez déboguer :

Toolchains for AVR (MCUs)

Attention cette page pourrait vous faire penser que vous ne pourrez déboguer que sur ARM-32bits mais il n'en est rien, il faut aller tout en bas de la page pour découvrir des Toolchain (cross-platform) pour d'autres plateformes : Windows, Linux mais également Darwin ou Mac OS X.

Et tout en bas de la page de la documentation : microship - onlinedocs

A expérimenter. 

Ce monde du débogue de microcontrôleur n'est pas "si ouvert" que cela finalement, mettre un point d'arrêt en face d'un ligne de code source et pouvoir s'y arrêter pour visualiser le contenu des variables de la mémoire et des registres de votre microcontrôleur ce n'est pas encore pour M. Jourdain.

Autres lectures :

github - ElTangas/jtag2updi
Micrologiciel à télécharger sur un ATmega MCU AVR qui lui permet de s'interfacer avec avrdude en utilisant le protocole jtagice Mk2 via une interface série. Ce mircologiciel fournit un pont pour programmer la nouvelle famille de MCU attiny817, qui utilisent l'interface UPDI :avrdude -> Interface série matérielle -> MCU programmeur (par exemple Mega328P) -> Série SW sur PD6 -> MCU cible (par exemple tiny817)


mercredi 17 novembre 2021

Arduino débogueur JTag Atmel-ICE et VSCode

Comment déboguer mon firmware téléversé dans une carte Bluno Mega à base de microcontroller ATmega à l'aide d'une sonde Atml-ICE sonde pour les AVR/ARM (SAM) ? 

Atmel a, un temps, "détourné" Visual Studio pour en faire Visual Micro (ou Atmel Studio) ... Le problème est que cette solution est abandonnée au profit de Microship et lorsque vous installez Atmel-Studio maintenant, vous êtes détourné vers la version payante Microship-Studio...

ARDUINO IDE FOR VISUAL STUDIO

Malheureusement, Ici :

vMicro Debugger Support Listing

Curieux qu'aujourd’hui la sonde Atmel-ICE ait un Port AVR ? Il servirait uniquement à téléverser un script par le Port ICSP de ma Bluno Mega ...


Sonde Atmel-ICE Port SAM(ARM) ou AVR

Côté Débogueur, je trouve avec VSCode l'extension suivante :


Malheureusement du côté documentation, je trouve :

vscode-arduino - debuggerUsbMapping.json

Alors que moi, je chercherais plutôt du côté de JTag !

Ce que je ne comprends pas encore, c'est que le micro-contrôleur ATMega possède bien les sorties (10 pins) de connexion au format JTag alors de l'autre côté, côté Débogueur il n'y a que Microship-Studio ...  

La seule solution que je vois actuellement est de passer par Microchip-Studio se serait le seul que je connaisse à pouvoir discuter JTAG (qui est un protocole de haut niveau) avec le module Arduino.

Le tuto, suivant dit que pour l'instant c'est impossible (pas de solution pour l'instant) ! 

ARDUINO sous VSCode : Utilisation du debugger de l'extension Arduino

ARDUINO sous VSCode : Utilisation du debugger de l'extension Arduino

Après avoir patiemment suivi ce tuto fort intéressant et fort bien fait, je n'ai pas OpenOCD d'installé avec ma Configuration de PlateformIO pour ATmega ... Ce tuto utilise des cartes Arduino à base de SAMD21.

Au cas ou vous en auriez envie ou besoin pour configurer votre plateforme, voici un zoom sur le fichier de configuration launch.json dont le débogueur à besoin pour trouver les outils correspondants au débogage :

VSCode - Debogue - launch.json

Le premier chemin est celui vers le Débogueur /tools/arm-none ... que je n'ai pas sur mon installation.

Vous avez trouvé la solution pour déboguer votre ATmega2560 avec VSCode et Atmel-ICE, partageons-la, envoyez-moi votre commentaire.

mercredi 10 mars 2021

Arduino problème avec le driver du port série de Windows 7

Quel le problème avec le driver série Arduino pour Windows ? Le Driver s'installe avec l'ensemble du logiciel Arduino mais cela ne fonctionne pas bien longtemps.

Vous êtes sans cesse en train de pluguer, déplugguer votre module Arduino et un moment donnée :

Problème port série Windows avec le module Arduino
Problème port série Windows avec le module Arduino

En plus ce n'est pas tout à fait le bon message, depuis il a évolué et j'ai le message suivant :


Alors la solution c'est de réinstaller le driver en désinstallant puis réinstallant tout le logiciel Arduino "correctement". Prendre soin de déplugguer pour que le port série soit "libre" pour désintaller proprement. Un fois résintallé le logiciel complet Arduino, le port est vierge et lors du prochain plugging de votre module Arduino. Windows répondra par un  :

Arduino le pilote de périphérique a été installé
Arduino le pilote de périphérique a été installé

Et vous pourrez continuer à jouer avec votre module Arduino mais ce n'est pas simple avec l'utilisation du port série et des logiciels de développement, il arrivera que le driver "plante" à nouveau et votre module ne sera plus reconnu par Windows !

Ceux qui galèrent :

Un autre Ici :


Ils galèrent mais ils arrivent toujours à faire quelque chose pour le Port_COM refonctionne...

La seule solution ?

Résinstaller le logiciel complet Arduino !!! Ça fonctionne mais c'est curieux non ? 

Attention : ne pas oublier de faire un petit redémarrage de Windows avant de replugguer votre module Arduino sinon il risque de ne pas prendre le bon driver..

Comment le logiciel peut-il se mettre à planter alors que ce n'est "que du soft". Et bien la réponse est dans la question.

Ce n'est pas tout à fait "que du soft", l'UART serial COM est sollicitée et l'on sait que sous Windows avant Windows 10 ce module est très perfectible. Il manque notamment une couche de virtualisation qui vous permettrait de connecté à une machine de cloud mais cela non plus ne fonctionne pas.

Mais j'ai peut-être une autre solution il vous faut savoir que le driver arduino se trouve dans :

\\Program Files (x86)\Arduino\drivers\arduino.inf

Ce qui peut vous permettre de le réinstaller en faisant :

Démarrer -> Périphériques et imprimantes :

Je vois mon module Arduino dans mon système windows

Où dans :

Menu Démarrer -> Panneau configuration -> Système -> Gestionnaire de périphérique 

Vous pouvez alors faire bouton droit mettre à jour et aller chercher le .inf ci-dessus cité. Mais en général si vous voyez votre module dans Windows, c'est que tout va bien ... Grrrrr !

Sinon vous pensez que tous ces caractères chinois ont quelques chose à voir avec ces plantages ...

Mauvaise gestion du port série ce communication avec le module Arduino
Mauvaise gestion du port série ce communication avec le module Arduino

Vous avez le site officiel arduino qui raconte en gros la même chose ...


Le problème c'est que quand votre module n'est pas reconnu "unknown device" vous ne pouvez pas le mettre à jour. Le message que j'ai eu en essayant de mettre à jour c'est :

"il n'existe pas de driver compatible avec windows 64 bits"

Autre dépannage

Si un driver "Unknown device" devait s'installer à la plage de "Arduino ..." n'hésitez pas à désinstaller le driver correspondant et à redémarrer votre machine lorsque vous enficherez votre module dans le port USB, windows devrait reprendre le bon driver ...

Franchement, c'est de très mauvaise augure. Comment peut-on imaginer de réaliser un développement de bonne qualité dans ces conditions... 

Les Athéniens s'atteignirent...

Mise à jour en novembre 2021

Je ne peux pas vous expliquer pourquoi mais depuis, je n'ai plus aucun problème de driver ! Le driver Arduino Bluno Mega est resté stable.

lundi 8 mars 2021

Arduino primordial links

Des liens importants vers les sites arduino ... des liens officiels mais aussi quelques pépites.

Arduino Lien primordiaux
Arduino Lien primordiaux

Sites de référence

https://www.arduino.cc
Site Officiel Open source Arduino

https://www.locoduino.org/
Qui signifie littéralement : "dingue de arduino"

Très bon site Arduino - très complet

Librairies de référence

Information sur les librairies de référence :

https://www.arduino.cc/en/reference/libraries

https://platformio.org/lib/show/5597/ArduinoTrace

Librairie de Traces

Je cherche une librairie Trace :

https://platformio.org/lib/search?query=trace

Arduino Trace dans Github bblanchon :

https://github.com/bblanchon/ArduinoTrace

Mémoire des cartes mères Arduino




Arduino Simulateurs

Si vous développez en C++ pour Arduino et que votre matériel est un peu complexe notamment si ce matériel n'est pas toujours disponible car trop encombrant ou difficile à mettre en oeuvre vous allez vouloir vous tourner vers un simulateurs qui va vous permettre de "faire tourner" votre code sans avoir tout le bazar autour.

Ma recherche Internet : "arduino simulateur" me conduit naturellement vers :

https://leresteux.net/simulateur-arduino/

Qui nous explique pas à pas le simulateur 123D Circuits mais j'ai l'impression qu'il n'existe plus même plus chez Autodesk library.io. Chez eux le simulateur de tout cela c'est TINKERCAD et vous devez vous enregistrer.

Autodesk Tinkercad

Dans le simulateur, si l'on écrit le bon code : 

/*
  Clignotement
  Allume la LED pendant 1 seconde,
  puis l'éteint pendant 1 seconde.

*/

// Numéro de la broche à laquelle est
// connectée la LED

int led = 13;

// le code dans cette fonction est exécuté une fois au début

void setup() {

  // indique que la broche de la LED une sortie :
  // on va modifier sa tension
  pinMode(led, OUTPUT);

}

// le code dans cette fonction est exécuté en boucle

void loop() {

  digitalWrite(led, HIGH);   // allumer la LED (tension 5V sur la broche)
  delay(1000);               // attendre 1000ms = 1s
  digitalWrite(led, LOW);    // éteindre la LED (tension 0V sur la broche)
  delay(1000);               // attendre à nouveau 1seconde

}

Vous verrez clignoter la LED.

Pour poursuivre, je vous propose l'article suivant : 

windowsreport - Les 5 meilleurs simulateurs Arduino pour PC

1 - Autodesk Eagle
Free download, toujours cette même accroche cela signifie que l'on vous donne le droit de télécharger mais après vous ne pourrez pas faire grand chose que d'acheter une licence.

2 - Proteus
Idem, free donwload mais on vous explique ce qui est limité sur la version "free" là encore on n'ira pas loin vous ne pouvez par exemple pas sauvegarder votre travail.

3 - Virtronics 
Je trouve pas pro ... pas cher non plus 19.99 $ ???

4 - PSpice
Pour le pris il vous faudra contacter le service client, moi je trouve toujours cela gênant on a l'impression d'être un marchant de tapis le commercial en face essaye de vous vendre 100 000 exemplaire alors que vous n'avez besoin que d'un seul !

5 - Fritzing
Initiative Open source deux version à 8 € et une autre à 25 € ... ??? 
Un petit tuto rapide ça à l'air ludique graphique fun sans plus accessible que les autres solutions.

Conclusion

Oui, il faut investir en temps, en argent je pense même qu'il faut démarrer un projet Arduino par la simulation plutôt qu'un kit hardware
Avec mon kit hardware, j'ai actuellement de sérieux problème avec le port COM, je dois vous avouer que je suis avec une machine Windows 7 mais la gestion du port COM avec Arduino est un peu tuchy...

D'où l'utilité d'un simulateur.

mercredi 3 mars 2021

Connaissez-vous Arduino IDE for Visual Studio (Visual Micro) ?

Je suis à la recherche du meilleur IDE pour Arduino et je trouve : Arduino IDE for Visual Studio (Visual Micro). Un outil d'édition de construction de déploiement et de débogage pour Arduino entièrement compatible cross plateforme et gestionnaire de Librairie. 

Plusieurs moniteurs série. Projets de code partagé, bibliothèques personnalisées, tests unitaires, GIT, CLI. Matériel GDB et débogage WiFi.

Arduino IDE for Visual Studio (Visual Micro)

Franchement, moi j'ai installé l'extension directement depuis Visual Studio Community 2019 :

Gestion des extensions dans Visual Studio Community 2019
Gestion des extensions dans Visual Studio Community 2019

Et bien c'est la même chose ! 

Donc autant installer l'extension depuis Visual Studio dans le menu Extensions -> Gérer les extensions.

Une fois l'extension installée, il s'agit de créer un bout de code et de téléverser dans la carte Arduino. 

Pour cela, j'ai trouvé l'option pour créer directement le Blink project un classique d'Arduino qui consiste à faire clignoter la LED de la Carte :

Nenu Fichier -> Nouveau projet, dans la liste des Templates de Projet :

Visual Studio s'ouvre avec le code et vous accédez au menu vMicro (comme Visual Micro) avec la gestion des cartes, suivant le kit Arduino que vous avez commandé :

Visual Studio Community avec l'extension ArduinoIDE
Visual Studio Community avec l'extension ArduinoIDE 

Vous vous retrouvez devant l'environnement nécessaire et suffisant pour développer en C++ pour Arduino.

Visual Studio Community avec l'extension ArduinoIDE
Visual Studio Community avec l'extension ArduinoIDE 

A vous de jouer, personnellement, je vais installer Visual Studio Code avec les même extension.

Have fun!


lundi 1 mars 2021

Développer en C++ avec Arduino Software (IDE)

Deux ou trois choses à savoir pour bien démarrer avec l'IDE d'Arduino pour Arduino. Pour savoir par exemple lorsque vous instanciez un projet où se trouvent les fichiers comment sont-ils organisés.

Arduino préférences

Le meilleur moyen de savoir comment Arduino IDE fonctionne c'est d'aller dans ses préférences :

Arduino IDE - Préférences

Vous obtenez ainsi l'emplacement du carnet de croquis et plus de préférences encore dans le fichier suivant : Arduino 15\preference.txt

Arduino IDE - Arborescence des répertoires

On voit également un fichier de Log :


\\AppData\Local\arduino15\logs\application.log

A priori l'application IDE Arduino vient écrire dans ce fichier chaque fois qu'elle s'exécute.

D'autres fichiers json library_index.json ce sont les librairies.

Un autre répertoire important, c'est le répertoire d'installation de Arduino, on y trouve tous les exemples et toutes les librairies pour travailler et l'exécutable :

\\Program Files (x86)\Arduino

Vous souhaitez savoir si votre board est correctement connectée ,c'est la commande : Récupérer les informations de la carte :

Arduino IDE - Outils

Un autre article très important c'est le Moniteur série qui vous permet de visualiser des traces émises par votre programme.

Dans tous les environnements Arduino vous retrouvez les exemples :

Arduino IDE - Exemples

Voilà les commandes de base les reste est dans la doc ;-)

Développer en C++ avec Arduino Create Agent

Comment démarrer un développement en langage C++ avec Arduino ? Le plus simple c'est de se retrouver sur la site Arduino et de commencer par le Tutorials dans :

arduino.cc

Arduino Tutoriels

Dans DOCUMENTATION -> TUTORIALS, je clique sur GETTING STARTED



Pour mémoire, voilà l'ensemble des Tutos Arduino, j'accède à la première série de Tutos en cliquant sur Getting Started.

Getting Started with Arduino products

Il vous faut vous enregistrer, créez votre compte d'utilisation chez arduino mais à ce prix, vous pouvez utiliser l'éditeur Web Editor... Code online :


Vous reconnaissez les deux fonctions de base de la plateforme Ardunio setup() et loop().

Pour pouvoir téléverser dans une carte arduino, il faut avoir installer sur votre post : 


Installer sur votre post de quoi communiquer avec le Web Editor

Par la suite dans le Web Editor pour Arduino, vous devrez choisir la carte que vous avez connectée par le port USB à votre ordinateur.


Au passage, un driver demande à s'installer sur votre machine ...


Puis un deuxième liée toujours au contrôle de liaison USB entre le Web Editor et votre carte Arduino ...



Et puis un troisième soft désire s'installer...


Et enfin cela y est, votre carte est connecté au Web Editor Arduino


Vous vous retrouvez avec les boutons classiques Verify et Upload pour téléverser votre code HEXA dans votre carte Arduino... Vous pouvez alors récupérer les exemples au moment d'une modification dans l'éditeur Web Editor.

CQFD !

jeudi 25 février 2021

Développer en C++ pour Arduino

Comment je développe et j'implémente mon code compilé sur une carte Arduino ? La programmation en C/C++ est la manière la plus courante de programmer la carte Arduino.

Le logiciel se divise alors en 2 fonctions le setpup() et une fonction loop() qui est la boucle naturelle de l'application.

Programmation en python, il ne s'agit pasz d'une compilation croisée mais d'une application résidente de la carte arduino qui est en communication avec les instructions python.

http://claude.gueganno.free.fr/arch/polyArduino.pdf

Voilà un bon début et un ensemble de généralités pour bien fixer les idées.

Visual Studio Code permet avec trois extension de programmer en C++ pour Arduino...

Pour moi ça commence Ici :

Devenez-pro-en-electronique-PROGRAMMER SON ARDUINO AVEC VISUAL STUDIO

Arduino gestion des ports COM

Je complique ma configuration de développement en essayant d'installer la chaîne de développement Arduino dans une machine du Cloud.

En jouant avec Arduino vous allez devoir maîtriser les affectation des ports COM aussi je vous conseil la page suivante :

http://www.e-novatic.fr/rediriger-les-ports-com-sous-tse/

Redirection des ports COM de l'hôte vers le cloud
Redirection des ports COM de l'hôte vers le cloud

Pour tout savoir sur la commande :

>change port /query

Pour afficher les ports COM et leur caractéristique.

Sur les ports COM de Windows :

Eltima - 2 méthodes pour régler tous les problèmes de ports COM sur Windows 10

Voilà des gens qui maîtrise les ports COM.

Sur l'autorisation des port COM en Remote Desktop :

Modèle d'administration (ordinateurs) - Ne pas autoriser la redirection des ports COM

Il semble bien que ces possibilités de bloquer la redirection des port com date un peu dans le monde Microsoft et que les clefs de registre ne soient plus utilisées :

regedit - Ne pas autoriser la redirection de port COM

Remote Desktop Services - Some USB devices aren't available

On apprend à mettre la ligne :

usbdevicestoredirect:s: RDP

dans le fichier .rdp 

Et à modifier la base de registres mais attention ...

Attention : Sous Windows 7, il est bien sûr impossible de rediriger un port COM vers une machine du cloud le degrés de virtualisation du port COM n'étant pas suffisant.

Visual Studio Code pour Arduino

Installation de l'extension PlatformIO IDE pour VSCode :


Pour pouvoir créer mon premier projet, choix de la carte Arduino : 


Carte Arduino Mega 2560.

PowerShell vs PlaformIO CLI

Il faut faire attention à exécuter les commandes dans le bon environnement. D'ailleurs je travaille avec une machine sous Windows 7 un peu ancien pour PowerShell, j'ai tenté d'installer l'extension proposée mais impossible "une vraie galère" : 

Error installing PowerShell extension on Visual Studio Code

Allez je vous mets le message d'error :

01/03/2021 17:25:51 [NORMAL] - Visual Studio Code v1.53.2 64-bit
01/03/2021 17:25:51 [NORMAL] - PowerShell Extension v2021.2.2
01/03/2021 17:25:51 [NORMAL] - Operating System: Windows 64-bit
01/03/2021 17:25:51 [NORMAL] - Language server starting --
01/03/2021 17:25:51 [NORMAL] -     PowerShell executable: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
01/03/2021 17:25:51 [NORMAL] -     PowerShell args: -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command Import-Module 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\modules\PowerShellEditorServices\PowerShellEditorServices.psd1'; Start-EditorServices -HostName 'Visual Studio Code Host' -HostProfileId 'Microsoft.VSCode' -HostVersion '2021.2.2' -AdditionalModules @('PowerShellEditorServices.VSCode') -BundledModulesPath 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\modules' -EnableConsoleRepl -StartupBanner '=====> PowerShell Integrated Console v2021.2.2 <=====
' -LogLevel 'Normal' -LogPath 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\logs\1614615951-32066405-00df-48dd-bd18-8b2f8655bf801614615914391\EditorServices.log' -SessionDetailsPath 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\sessions\PSES-VSCode-4792-598641' -FeatureFlags @() 
01/03/2021 17:25:51 [NORMAL] -     PowerShell Editor Services args: Import-Module 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\modules\PowerShellEditorServices\PowerShellEditorServices.psd1'; Start-EditorServices -HostName 'Visual Studio Code Host' -HostProfileId 'Microsoft.VSCode' -HostVersion '2021.2.2' -AdditionalModules @('PowerShellEditorServices.VSCode') -BundledModulesPath 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\modules' -EnableConsoleRepl -StartupBanner '=====> PowerShell Integrated Console v2021.2.2 <=====
' -LogLevel 'Normal' -LogPath 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\logs\1614615951-32066405-00df-48dd-bd18-8b2f8655bf801614615914391\EditorServices.log' -SessionDetailsPath 'd:\Users\Braby\.vscode\extensions\ms-vscode.powershell-2021.2.2\sessions\PSES-VSCode-4792-598641' -FeatureFlags @() 
01/03/2021 17:25:51 [NORMAL] - powershell.exe started.
01/03/2021 17:25:51 [NORMAL] - Waiting for session file
01/03/2021 17:29:51 [NORMAL] - Timed out waiting for session file to appear.
01/03/2021 17:29:51 [NORMAL] - Language server startup failed.
01/03/2021 17:29:51 [ERROR] - The language service could not be started: 
01/03/2021 17:29:51 [ERROR] - Error: Timed out waiting for session file to appear.

Ce n'est pas ce qu'il faut faire !

Dès que vous ouvrez Visual Studio Code sur un projet Arduino il faut ouvrir un Terminal PlatformIO CLI en cliquant sur le tout petit bouton en bas dans le Barre Arduino :

Visual Studio Code pour Arduino - Terminal PlatformIO CLI
Visual Studio Code pour Arduino - Terminal PlatformIO CLI

Et vous obtenez le bon environnement pour exécuter toutes les commandes PlatformIO :

Visual Studio Code pour Arduino - Terminal PlatformIO CLI
Visual Studio Code pour Arduino - Terminal PlatformIO CLI

Voilà mon environnement de développement avec VSCode pour Arduino fonctionne est maintenant correctement configurer.

Architecture des chaînes de caractères

C'est une drôle de surprise, vous allez tomber sur :

const __FlashStringHelper *format

Il y en a qui pour gagner de la place vont vouloir stocker des variables dans la mémoire programme :

Architecture Harvard vs Von-Neuman

Du coup les chaînes sont illisibles, il faut des manipulation pour s'y retrouver.

Il vous faudra consulter la page suivante pour découvrir quels types de mémoires sont utilisés sur les boards arduino :


Arduino faire des Log et des Traces

Moi j'ai attaqué par une fonction que j'aime bien écrire :

void log_print(char const *aFormat, ...)
{
    char buffer[256];
    va_list args;

    va_start(args, aFormat);
    vsprintf(buffer, aFormat, args);
    va_end(args);

    Serial.print(buffer);
};

Cela ne fonctionne pas le format des doubles et des floats ne fonctionne pas avec les fonctions de la lib standard du C++.

J'ai trouvé la fonction
\\.platformio\packages\framework-arduino-avr\cores\arduino\Print.cpp
size_t Print::printFloat(double number, uint8_t digits)

qui permet d'afficher un Float par le port série ...

Comment comparer __FlashStringHelper* avec char* on Arduino ?


Pour finalement trouver ce que je cherche à faire :



lundi 4 mars 2019

Comment développer en C++ ?

Je cherche le meilleur moyen de développer en C++ car j'ai compris que les librairies graphiques comme DirectX ou plutôt Direct3D, OpenGL, VCL, FireMonkey et autres sont écrites en langage C++ et je cherche une bonne maitrise du temps réel avec mon application, quel choix faire pour développer en C++ ?

Et oui si vous faites du développement 3D C++ pour des gamers par exemple, vous serez amené à développer en Langage C++ alors j'ai moi même quelques expériences de ce langage mais aujourd'hui je suis perplexe devant les possibilités qui s'offrent à moi et je ne sais quelle option choisir alors faisons un tour rapide de toutes ces possibilités.

J'ai travaillé récemment avec Embarcadero dont j'ai fait une abondante critique. Il possède l'avantage de démarrer un développement rapidement bien plus qu'avec Visual Studio C++ MFC par exemple. Le scandale, c'est que Microsoft conserve MFC et n'a rien fait depuis donc si vous cherchez à instancier un nouveau projet avec Visual Studio vous allez tomber sur MFC ... Grrr pas bon, méchant les MFCs !

Qt/C++ est une bonne alternative, je n'y croyais pas mais c'est d'une prise en main rapide et les contrôles utilisateurs sont intelligents, ils permettent plein de choses rapidement, je vous le conseil.

Je lis cet article : Développez.com - Graphique

Le choix est large mais pas simple, la prise en main d'une librairie graphique c'est un investissement lourd. Moi je parlais des chaines de développement associée ici pas de chaîne mais alors comment cela se passe t-il ? Vous pouvez démarrer avec Eclipse.

Choix d'une application pour bien développer en C++

Que puis je faire avec Visual Studio ? Instancier un nouveau projet Windows Desktop - Assistant Windows Desktop :

Visual Studio un projet en Langage C++

Et Visual Studio me donne les choix suivants :

Visual Studio créer une application en C++

MFC and ATL
Je vous laisse avec la doc MSDN ... Et toutes ces vieilleries Microsoftiennes ...

What's New for Visual C++ in Visual Studio 2017
Si il y a encore du Nouveau en C++ sous Visual Studio 2017 ...

Microsoft - VCSamples - Visual Studio C++
On retrouve ATL CLR MFC plus d'autres exemples

Microsoft - Visual C++ Samples
On remonte encore plus haut dans les samples bien connus de Microsoft

Mais tout ceci ne nous aide pas beaucoup, je suis certain que nous sommes très très nombreux à regretter qu'il n'y ait pas d'alternative à MFC pour développer rapidement des application Desktop en C++. Depuis tout ce temps Microsoft aurait pu faire un effort.

Voilà, je tombe un peu là dans un trou à cause de Microsoft, je pensais trouver une bonne solution pour développer en C++ avec Visual Studio mais la solution moderne est sans doute ailleurs.

La solution moderne pour développer en C++ c'est très certainement Qt/C++.

To Be Continued


jeudi 28 février 2019

MyString CPlusPlus Mes String en C++ StringFormat & StringSplit

StringFormat et StringSplit sont deux fonctions que l'on a toujours besoin d'avoir sous la main. Je me retrouve avec Embarcadero C++ Builder à devoir coder en C++, je tombe donc sur l'UnicodeString hérité de Delphi imaginez un peu mon désarrois.

Coder en C++ StringSplit et StrinFormat

Je l'avoue ça fait un peu mal, même si ce type est très utile sous Embarcadero, il vient du moyen âge ! Pour nous faciliter la vie, je souhaite donc vous livrer ici mes deux fonctions qui à mon goût, n'existent pas ni dans C++ Builder ni dans les STL.

Voici donc StringFormat et StringSplit les deux foncitons C++ qui manquent toujours à l'appel.

L'entête

#ifndef _MyStringH
#define _MyStringH

#include <iostream>
#include <conio.h>
#include <sstream>
#include <vector>
#include <string>


using namespace std;

// ---------------------------------------------------------------------------
// Mangement of Srting's Sizes

#define MAX_STRING 256
// ---------------------------------------------------------------------------
void StringFormat( UnicodeString &str, const char *format, ... );
vector<string> StringSplit( string s, string separator );
// ---------------------------------------------------------------------------
#endif

Corps des fonctions StringFormat et StringSplit en C++

//----------------------------------------------------------------------------
// Format String
//----------------------------------------------------------------------------

void StringFormat( UnicodeString &str, const char *format, ... )
{
   char buffer[ MAX_STRING ];
   va_list args;

   va_start( args, format );

   vsprintf( buffer, format, args );
   str = UnicodeString( buffer);
   perror( buffer );

   va_end( args );
}

//----------------------------------------------------------------------------
// Split string with separator
//----------------------------------------------------------------------------

vector<string> StringSplit( string s, string separator )
{
   size_t pos_start = 0, pos_end, delim_len = separator.length();
   string token;
   vector<string> res;
   while ( (pos_end = s.find( separator, pos_start )) != string::npos )
   {
      token = s.substr( pos_start, pos_end - pos_start );
      pos_start = pos_end + delim_len;
      res.push_back( token );
   }
   res.push_back( s.substr( pos_start ) );
   return res;
}

Utilisation des fonctions StringFormat et StringSplit en C++

UnicodeString b = "blabla";
double d = 2.033256;
StringFormat( b, "d = %.3f", d );
Edit1->Text = b;

//-----------------------------------------

int tab[ 4 ] = { 0, 0, 0, 0 };
string str = "0, 1,  2,  3";
string separator = ",";
vector<string> v = StringSplit( str, separator );
int j = 0;
for ( auto i : v )
{
  tab[ j++ ] = atoi( i.c_str() );
}

Conclusion

Vous pouvez adapter ces fonctions pour une autre chaîne de développement comme Qt ou Visual Studio C++ en utilisant CString à la place d'UnicodeString d'Embarcadero.

Voilà, la prochaine fois que je code en C++, je n'aurais pas à les réécrire ... ;-)