Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 当使用内联程序集时,不会扩展汇编宏_Assembly_Arduino_Macros - Fatal编程技术网

Assembly 当使用内联程序集时,不会扩展汇编宏

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'

我正试图编译一个名为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: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