我正在尝试在我的arduino上为生成的程序集添加内联注释。所以例如
/*
Testing
*/
#include <avr/io.h>
#include <iostream>
int ledPin = 13;
void setup()
{
asm volatile("\n# comment 1");
pinMode(ledPin, OUTPUT);
}
void loop()
{
asm volatile("\n# comment 2");
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
为我想要查看的代码生成程序集&#34;注释1&#34;和&#34;评论2&#34;作为汇编代码中特定行的标记。
这是程序集生成的代码
C:\Users\****\AppData\Local\Temp\build1888832469367065438.tmp\sketch_jul17a.cpp.o: file format elf32-avr
Disassembly of section .text.loop:
00000000 <loop>:
loop():
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:19
0: 80 91 00 00 lds r24, 0x0000
4: 61 e0 ldi r22, 0x01 ; 1
6: 0e 94 00 00 call 0 ; 0x0 <loop>
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:20
a: 68 ee ldi r22, 0xE8 ; 232
c: 73 e0 ldi r23, 0x03 ; 3
e: 80 e0 ldi r24, 0x00 ; 0
10: 90 e0 ldi r25, 0x00 ; 0
12: 0e 94 00 00 call 0 ; 0x0 <loop>
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:21
16: 80 91 00 00 lds r24, 0x0000
1a: 60 e0 ldi r22, 0x00 ; 0
1c: 0e 94 00 00 call 0 ; 0x0 <loop>
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:22
20: 68 ee ldi r22, 0xE8 ; 232
22: 73 e0 ldi r23, 0x03 ; 3
24: 80 e0 ldi r24, 0x00 ; 0
26: 90 e0 ldi r25, 0x00 ; 0
28: 0e 94 00 00 call 0 ; 0x0 <loop>
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:23
2c: 08 95 ret
Disassembly of section .text.setup:
00000000 <setup>:
setup():
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:13
0: 80 91 00 00 lds r24, 0x0000
4: 61 e0 ldi r22, 0x01 ; 1
6: 0e 94 00 00 call 0 ; 0x0 <setup>
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:14
a: 08 95 ret
注释不包含在汇编代码中,我该怎么做
答案 0 :(得分:2)
首先评论&#34;常规&#34; (不是cpp预处理)汇编代码以井号开头,而不是两个斜杠。所以你可能想要一个名为&#34;#onesectimer&#34;的评论。在汇编代码中。
这可以通过以下方式实现:
asm("\n# onesectimer");
void OneSecTimer()
{
if(bags!=0){
asm("\n# for counter 1");
if(counter1 == 3)
...
---编辑---
阅读您的评论和编辑我认为您正在混合使用&#34;汇编&#34;和&#34;反汇编&#34;:
当将C代码转换为二进制代码时,C编译器会生成&#34; assembly&#34;码。此代码可能包含注释:
# This is a comment
lds r24, 0
ldi r22, 1
call digitalWrite
汇编程序然后翻译这个&#34;程序集&#34;代码到二进制代码。在二进制代码中,不再有关于注释的信息,只有要写入内存的二进制数据。
&#34;反汇编&#34;将二进制数据转换回汇编代码,但只能反汇编二进制代码中的信息 - 因此您不能在反汇编代码中有任何注释!
您可能要做的是在感兴趣的位置将符号插入目标文件中:
digitalWrite(0,1);
asm volatile(".global Here_is_Delay\nHere_is_Delay:");
delay(1000);
这些符号的名称在整个项目中必须是唯一的,并且与所使用的任何函数或变量名称不同。
根据反汇编程序(不确定AVR),您将看到符号:
loop():
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:19
0: 80 91 00 00 lds r24, 0x0000
4: 61 e0 ldi r22, 0x01 ; 1
6: 0e 94 00 00 call 0 ; 0x0 <loop>
Here_is_Delay():
C:\Program Files (x86)\Arduino/sketch_jul17a.ino:20
a: 68 ee ldi r22, 0xE8 ; 232
c: 73 e0 ldi r23, 0x03 ; 3
...