有什么方法可以从Arduino下载草图吗?


Answers:



20

该答案不会直接回答问题,但仍会产生相同的最终结果。

Arduino IDE使用临时目录存储构建文件,包括原始草图以及十六进制和中间文件。

在Mac上,默认情况下它们位于/ var / folders中,而在Windows机器上,它们位于…\ Local Settings \ Temp \中(取决于Windows的版本可能在多个位置)。

我发现,特别是在Windows中,关闭草图或IDE时不会删除这些构建文件,因此它们在计算机上的存在时间可能比您想象的要长得多。

同样,默认情况下,Crashplan,Backblaze和Time Machine会备份这些位置,因此,即使它们已被删除,它们仍可能处于备份状态。

这样做的好处是您将恢复C代码而不是ASM。


3
这是恕我直言的最佳解决方案。也非常有创意...
dda

1
您可能会/tmp/在Linux(甚至Mac)上的目录中找到它。cf arduino.cc/en/Hacking/BuildProcess
pd12

评论从已接受的答案中回显:回读原始十六进制: forum.arduino.cc/index.php?topic=6150.0 和自动反汇编: forum.arduino.cc/index.php/topic,46843.0.html
SDsolar

5

您可以下载文件的十六进制转储,但是没有简单的方法来获取所有C ++代码和注释。如果您可以理解汇编,则可以重新创建该程序,但这将花费一些时间。有些设备有拆机器,我不知道arduino。


3
arduino没有反汇编程序,因为它不是MCU类型。这里多个用ATmega反汇编程序(谷歌atmega disassembler)。
康纳·沃尔夫

如果您具有arduino环境,那么您已经有了avr-gcc附带的avr-objdump。
克里斯·斯特拉顿


5

我认为还有另一种方法,而无需从Arduino板上提取代码。修改创建草图的日期,然后在C:\ Users \ User \ AppData \ Local \ Temp \中查找(例如:C:\ Users \ User \ AppData \ Local \ Temp \ untitled4390292704786567977.tmp \ sketch_jan19a)。您可以找到未保存的代码,除非某些“释放空间程序”将其删除。祝好运!


4

除非您的目标是将相同的代码简单地复制到另一台设备,否则简单的答案是:

正如其他答案中指出的那样,您可以将设备上的十六进制代码重新转换为汇编代码。

例如(一旦将代码从设备复制回磁盘上):

avr-objdump -j .sec1 -d -m avr5 yourFileHere.hex

在引导加载程序文件之一上运行,我得到以下结果(部分):

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

如您所见,对于复制草图所做的工作并没有特别的帮助。可能是以下两种情况之一:

  • 您的草图很短,在这种情况下,经过数周的工作,您可能会将汇编程序代码重新转换为C
  • 您的草图很长,在这种情况下,几乎不可能将其转换回C

在“简短草图”情况下,最好从头开始重写。几乎可以肯定,那会更快。在“长草图”情况下-这是不值得的。不会保留任何变量名,以及编译器优化代码的方式,即使代码的结构也很难确定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.