我做了一個草圖,但是後來丟失了。但是,我在丟失之前將其上傳到了Arduino。有什麼辦法可以找回我嗎?
我做了一個草圖,但是後來丟失了。但是,我在丟失之前將其上傳到了Arduino。有什麼辦法可以找回我嗎?
只要沒有設置安全位,就應該有可能。不久前在EE上問了這個問題。
但是您不會得到寫回的Arduino代碼。該代碼被編譯為彙編,您必須自己將其轉換回C。
此答案不能直接回答問題,但仍會得到相同的最終結果。
Arduino IDE使用臨時目錄存儲構建文件,包括原始草圖以及十六進制和中間文件。
在Mac上,默認情況下這些文件位於/ var / folders中,而在Windows計算機上,這些文件則位於…\ Local Settings \ Temp \(取決於Windows的版本)。我發現特別是在Windows中,當關閉草圖或IDE時這些構建文件不會被刪除,因此它們在計算機上的存在時間可能會比您更長。
默認情況下,Crashplan,Backblaze和Time Machine也會備份這些位置,因此,即使它們已被刪除,它們也可能仍在備份中。
這樣做的好處是您將恢復C代碼而不是ASM。
您可以下載文件的十六進制轉儲,但是沒有簡單的方法來獲取所有C ++代碼和註釋。如果您能理解彙編,則可以重新創建該程序,但這將花費一些時間。有些設備有拆解器,我不知道arduino。
我認為還有另一種方法,而無需從Arduino板上提取代碼。修改創建草圖的日期,然後在C:\ Users \ User \ AppData \ Local \ Temp \中查找(例如:C:\ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a)。除非某些“釋放空間程序”刪除了未保存的代碼,否則您可以找到它。祝您好運!
除非您的目標是將相同的代碼簡單地複製到另一台設備,否則簡單的答案是:否
正如其他答案中指出的那樣,您可以將將設備上的十六進制代碼重新轉換為彙編代碼。
例如(一旦您已將代碼從設備複製回磁盤上):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
在其中一個引導加載程序文件上運行,我得到以下結果(部分):
00007e00 <。 sec1>:7e00:11 24 eor r1,r1 7e02:r24中的84 b7,0x34; 52 7e04:14退出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
如您所見,對於再現草圖所做的工作並沒有特別的幫助。可能是以下兩種情況之一:
在“簡短草圖”情況下,最好從頭開始重寫。幾乎可以肯定,那會更快。在“長草圖”情況下-這是不值得的。沒有保留任何變量名,並且編譯器優化代碼的方式甚至代碼的結構都難以確定。