我正在尝试编辑arduino库有人可以帮我解释一下这段代码吗

问题描述

#if defined(__AVR__)

#define pew                                                                    \
  asm volatile("ld  __tmp_reg__,%a[ptr]+"                                     \
               "\n\t"                                                          \
               "out %[data],__tmp_reg__"                                  \
               "\n\t"                                                          \
               "out %[clk],%[tick]"                                      \
               "\n\t"                                                          \
               "out %[clk],%[tock]"                                      \
               "\n" ::[ptr] "e"(ptr),\
               [ data ] "I"(_SFR_IO_ADDR(DATAPORT)),\
               [ clk ] "I"(_SFR_IO_ADDR(CLKPORT)),[ tick ] "r"(tick),\
               [ tock ] "r"(tock));
#endif

    // Loop is unrolled for speed:
    pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew
        pew pew pew pew pew pew pew pew pew pew pew pew pew

解决方法

如果您指的是pew,则称为循环展开。

循环展开,也称为循环展开,是循环转换 尝试以以下方式优化程序的执行速度的技术 它的二进制大小的开销,这是一种称为时空的方法 交易。转换可以由 程序员或优化的编译器。在现代处理器上,循环 展开通常会适得其反,因为增加的代码大小可能 导致更多的缓存丢失; cf. Duff的设备。[1]

循环展开的目的是通过提高程序速度 减少或消除控制循环的指令,例如 每次迭代都进行指针算法和“循环结束”测试; [2] 减少分支机构的罚款;以及隐藏的延迟,包括 从内存读取数据的延迟。[3]为了消除这种计算 可以将循环重写为类似的重复序列 独立声明。[4]

来源:https://en.wikipedia.org/wiki/Loop_unrolling

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...