Assembly 当使用内联程序集时,不会扩展汇编宏
我正试图编译一个名为TVout的库。当我尝试时,Arduino链接器会抛出以下消息:Assembly 当使用内联程序集时,不会扩展汇编宏,assembly,arduino,macros,Assembly,Arduino,Macros,我正试图编译一个名为TVout的库。当我尝试时,Arduino链接器会抛出以下消息: /tmp/ccxegFH3.s:135: Error: unknown opcode `delay2' /tmp/ccxegFH3.s:190: Error: unknown opcode `delay1' /tmp/ccxegFH3.s:192: Error: unknown opcode `delay2' /tmp/ccxegFH3.s:195: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:135: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:190: Error: unknown opcode `delay1'
/tmp/ccxegFH3.s:192: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:195: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:198: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:201: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:204: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:207: Error: unknown opcode `delay1'
/tmp/ccxegFH3.s:212: Error: unknown opcode `delay1'
/tmp/ccxegFH3.s:215: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:264: Error: unknown opcode `svprt'
/tmp/ccxegFH3.s:268: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:272: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:273: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:275: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:276: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:278: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:279: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:281: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:282: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:284: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:285: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:287: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:288: Error: unknown opcode `delay1'
/tmp/ccxegFH3.s:291: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:293: Error: unknown opcode `delay1'
/tmp/ccxegFH3.s:295: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:296: Error: unknown opcode `svprt'
/tmp/ccxegFH3.s:298: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:346: Error: unknown opcode `svprt'
/tmp/ccxegFH3.s:350: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:353: Error: unknown opcode `delay1'
/tmp/ccxegFH3.s:355: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:356: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:358: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:359: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:361: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:362: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:364: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:365: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:367: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:368: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:370: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:371: Error: unknown opcode `delay3'
/tmp/ccxegFH3.s:373: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:376: Error: unknown opcode `delay2'
/tmp/ccxegFH3.s:378: Error: unknown opcode `o1bs'
/tmp/ccxegFH3.s:379: Error: unknown opcode `svprt'
/tmp/ccxegFH3.s:381: Error: unknown opcode `o1bs'
错误来自video_gen.cpp。一段代码:
__asm__ __volatile__ (
"ADD r26,r28\n\t"
"ADC r27,r29\n\t"
//save PORTB
"svprt %[port]\n\t"
"rjmp enter6\n"
"loop6:\n\t"
"bst __tmp_reg__,0\n\t" //8
"o1bs %[port]\n"
"enter6:\n\t"
"LD __tmp_reg__,X+\n\t" //1
"delay1\n\t"
"bst __tmp_reg__,7\n\t"
"o1bs %[port]\n\t"
"delay3\n\t" //2
asm_macros.h
中定义了delay1
、delay2
等。下面是asm_macros.h的一段代码:
__asm__ __volatile__ (
// delay 1 clock cycle.
".macro delay1\n\t"
"nop\n"
".endm\n"
如您所见,宏是定义的。如果我尝试将
asm_macros.h
移动到video_gen.cpp
会出现重复的宏错误(因此宏已定义)。唯一的方法是Arduino汇编程序没有扩展汇编程序宏。如何解决这个问题?据我所知,内联汇编程序不支持独立汇编程序那样的宏。我没有Arduino或任何编译工具链可供使用,但这段代码无法在针对x86的Gnu编译器上运行。我真的不确定他们是如何期望这个工作的,他们显然是这样做的,因为他们在C头文件中使用内联asm定义了这个宏。在这方面,我甚至不知道这是如何编译的。如果你试图用\uuuuuuvolatile\uuuuuuu
注释一个基本的asm语句(如果它在文件范围内,则必须是基本的),GCC会发出吠声,因为它们都是隐式的不稳定的。arduino是否具有GCC输出生成的汇编程序(-s
)的相同能力?我不知道。我使用Arduino IDE来构建代码,但我认为它使用GNU编译器和其他链接。在这里,它讨论了如何编辑您的首选项以“保留”临时文件,并使用SHIFT键找出它们的位置。查看您提到的ccxegFH3.s
文件可能会给您提供一些有用的线索,但它没有提供任何线索。我花了很多时间来获取汇编代码,所以我无法提前回答您的问题。您可以在程序集文件中找到相同的代码。示例:.macro delay1 nop.endm