J'ai fait un croquis, mais ensuite je l'ai perdu. Cependant, je l'ai téléchargé sur l'Arduino avant de le perdre. Y a-t-il un moyen de le récupérer?
J'ai fait un croquis, mais ensuite je l'ai perdu. Cependant, je l'ai téléchargé sur l'Arduino avant de le perdre. Y a-t-il un moyen de le récupérer?
Réponses:
Cela devrait être possible tant que le bit de sécurité n'est pas activé. Cette question a été posée sur EE il y a quelque temps.
Est-il possible d'extraire le code d'une carte Arduino?
Mais vous ne récupérerez pas le code Arduino que vous avez écrit. Le code est compilé en assemblage et vous devrez le reconvertir vous-même.
Cette réponse ne répond pas directement à la question, mais aboutira toujours au même résultat final.
L'IDE Arduino utilise des répertoires temporaires pour stocker les fichiers de construction, y compris l'esquisse d'origine, ainsi que les fichiers HEX et intermédiaires.
Sur un Mac, ceux-ci se trouvent par défaut dans / var /, et sur un ordinateur Windows, ils se trouvent dans… \ Local Settings \ Temp \ (qui, selon la version de Windows, pourrait se trouver à plusieurs endroits).
J'ai constaté qu'en particulier dans Windows, ces fichiers de construction ne sont pas supprimés lorsque vous fermez l'esquisse ou l'EDI; ils peuvent donc exister sur votre ordinateur plus longtemps que prévu.
De plus, par défaut, Crashplan, Backblaze et Time Machine sauvegardent ces emplacements. Par conséquent, même s'ils ont été supprimés, ils peuvent toujours figurer dans une sauvegarde.
L'avantage ici est que vous récupérerez le code C plutôt que ASM.
/tmp/
répertoires de Linux (et même de Mac). cf arduino.cc/en/Hacking/BuildProcess
Vous pouvez télécharger le vidage hexadécimal du fichier, mais il n’existe pas de moyen simple d’obtenir tout le code C ++ et ses commentaires. Si vous comprenez assemblage, vous pouvez recréer le programme, mais cela prendrait un certain temps. Il existe des dissasembleurs disponibles pour certains appareils, je ne connais pas Arduino.
atmega disassembler
).
Je pense qu'il y a une autre façon de faire cela, sans extraire le code de la carte Arduino. Conservez la date à laquelle vous créez l'esquisse et recherchez-la dans C: \ Utilisateurs \ Utilisateur \ AppData \ Local \ Temp \ (Par exemple: C: \ Utilisateurs \ Utilisateur \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a). Vous pourriez trouver votre code non enregistré à moins qu'il ne soit supprimé par un "programme d'espace libre". Bonne chance!
Sauf si votre objectif est simplement de copier le code identique sur un autre appareil, la réponse simple est: non
Comme cela a été souligné dans d'autres réponses, vous pouvez reconvertir le code hexadécimal de l'appareil en code assembleur.
Par exemple (une fois que vous avez copié le code de l'appareil sur votre disque):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Exécuté sur l’un des fichiers du chargeur de démarrage, j’obtiens ces résultats (en partie):
00007e00 <.sec1>:
7e00: 11 24 eor r1, r1
7e02: 84 b7 in r24, 0x34 ; 52
7e04: 14 be out 0x34, r1 ; 52
7e06: 81 ff sbrs r24, 1
7e08: f0 d0 rcall .+480 ; 0x7fea
7e0a: 85 e0 ldi r24, 0x05 ; 5
7e0c: 80 93 81 00 sts 0x0081, r24
7e10: 82 e0 ldi r24, 0x02 ; 2
7e12: 80 93 c0 00 sts 0x00C0, r24
7e16: 88 e1 ldi r24, 0x18 ; 24
7e18: 80 93 c1 00 sts 0x00C1, r24
7e1c: 86 e0 ldi r24, 0x06 ; 6
7e1e: 80 93 c2 00 sts 0x00C2, r24
7e22: 80 e1 ldi r24, 0x10 ; 16
7e24: 80 93 c4 00 sts 0x00C4, r24
7e28: 8e e0 ldi r24, 0x0E ; 14
7e2a: c9 d0 rcall .+402 ; 0x7fbe
7e2c: 25 9a sbi 0x04, 5 ; 4
Comme vous pouvez le constater, ce n'est pas particulièrement utile pour reproduire ce que votre dessin a fait. Il y a probablement deux scénarios:
Dans le cas du "sketch", il est préférable de réécrire à partir de zéro. Ce serait plus rapide, presque certainement. Dans le cas du "long sketch", cela ne vaut tout simplement pas la peine. Aucun des noms de variable n'est préservé, et la manière dont le compilateur optimise le code, même la structure du code, serait difficile à déterminer.