Tôi đã làm một bản phác thảo, nhưng sau đó tôi đã mất nó. Tuy nhiên, tôi đã tải nó lên Arduino trước khi mất nó. Có cách nào tôi có thể lấy lại?
Tôi đã làm một bản phác thảo, nhưng sau đó tôi đã mất nó. Tuy nhiên, tôi đã tải nó lên Arduino trước khi mất nó. Có cách nào tôi có thể lấy lại?
Câu trả lời:
Nó có thể được miễn là bit bảo mật không được thiết lập. Câu hỏi này đã được hỏi về EE một thời gian trước.
Có thể trích xuất mã từ một bảng arduino?
Nhưng bạn sẽ không nhận được mã Arduino mà bạn đã viết lại. Mã được biên dịch thành hội đồng và bạn sẽ phải tự chuyển đổi lại thành C.
Câu trả lời này không trả lời trực tiếp câu hỏi, nhưng vẫn sẽ dẫn đến kết quả cuối cùng.
Arduino IDE sử dụng các thư mục tạm thời để lưu trữ các tệp xây dựng, bao gồm bản phác thảo gốc cũng như HEX và các tệp trung gian.
Trên máy Mac, các tệp này nằm trong / var / theo mặc định và trên máy Windows, chúng ở trong chế độ cục bộ \ Cài đặt cục bộ \ Temp \ (tùy thuộc vào phiên bản Windows có thể ở một số vị trí).
Tôi đã thấy rằng đặc biệt là trong Windows, các tệp xây dựng này không bị xóa khi bạn đóng bản phác thảo hoặc IDE, vì vậy chúng có thể tồn tại trên máy của bạn lâu hơn bạn nghĩ.
Ngoài ra, theo mặc định, Crashplan, Backblaze và Time Machine sao lưu các vị trí này, vì vậy ngay cả khi chúng đã bị xóa, chúng vẫn có thể nằm trong bản sao lưu.
Ưu điểm ở đây là bạn sẽ phục hồi mã C chứ không phải ASM.
/tmp/
thư mục trên Linux (và thậm chí cả Mac). cf arduino.cc/en/Hacking/BuildProcess
Bạn có thể tải xuống kết xuất hex của tệp, nhưng không có cách nào dễ dàng để có được tất cả các mã và nhận xét C ++. Nếu bạn có thể hiểu lắp ráp, bạn có thể tạo lại chương trình, nhưng sẽ mất một lúc. Có một số bộ lọc có sẵn cho một số thiết bị, tôi không biết về arduino.
atmega disassembler
).
Tôi nghĩ rằng có một cách khác để làm điều này, mà không cần trích xuất mã từ bảng Arduino. Ghi lại ngày bạn tạo bản phác thảo và tìm nó trong C: \ Users \ User \ AppData \ Local \ Temp \ (Ví dụ: C: \ Users \ User \ AppData \ Local \ Temp \ unsitle4390292704786567977.tmp \ sketch_jan19a). Bạn có thể tìm thấy mã chưa được lưu của mình trừ khi nó bị xóa bởi một số "chương trình giải phóng không gian". Chúc may mắn!
Trừ khi mục tiêu của bạn chỉ đơn giản là sao chép mã giống hệt sang thiết bị khác, câu trả lời đơn giản là: không
Như đã được chỉ ra trong các câu trả lời khác, bạn có thể biến mã hex trên thiết bị thành mã trình biên dịch.
Ví dụ: (khi bạn đã sao chép mã từ thiết bị trở lại vào đĩa của mình):
avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex
Chạy trên một trong các tệp bootloader tôi nhận được các kết quả này (một phần):
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
Như bạn có thể thấy, không đặc biệt hữu ích cho việc tái tạo những gì bản phác thảo của bạn đã làm. Có khả năng là một trong hai kịch bản:
Trong trường hợp "phác thảo ngắn", tốt hơn hết bạn chỉ nên viết lại từ đầu. Điều đó sẽ nhanh hơn, gần như chắc chắn. Trong trường hợp "phác thảo dài" - nó không có giá trị. Không có tên biến nào được bảo toàn và cách trình biên dịch tối ưu hóa mã, thậm chí cấu trúc của mã sẽ khó xác định.