微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我正在尝试编辑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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。