【发布时间】:2015-01-15 00:08:23
【问题描述】:
有没有办法用宏重复一个 C 代码 N 次? N 也是一个宏。
例如,如果我有这个宏:
#define N 5
#define COODE "nop\n\t"
#define REPEAT [...]
当我调用 repeat 时,预处理器会写入 CODE N 次,所以
__asm__(REPEAT);
会变成
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
我有一个 Arduino,它必须等待一个精确的(并且很小,大约 10-15 个)时钟数。每个“nop”(无操作)都需要 1 个时钟周期来执行,它什么也不做。我不能只做一个循环,因为每个循环都在多个操作中执行(初始化计数器,递增计数器,检查是否到达结束),所以我不想手动编写“nop\n\t”有一个宏。这样我也可以简单地更改 N 来修改程序而无需重写它。
提前谢谢你
【问题讨论】:
-
计算出设置循环所需的时间,以及进行一次迭代所需的时间...如果所需时间大于总和,则根据需要进行设置加上尽可能多的迭代几乎达到您的总数,然后只需几个
nops 即可完成延迟。编写起来更费力,但更紧凑。 -
..如果延迟不是那么长,请尝试使用 5
nops 的宏来节省输入,但我认为没有办法制作“粘贴此 N 次" 你所要求的宏。 -
您可以创建 n 个宏,其中 n 是您可能需要的最大重复次数。像
#define _5(x) x ## _4(x)这样的东西,_1(x) ... _4(x) 看起来很相似 -
许多汇编语言都有用于重复代码块的宏。您可能想在汇编代码中编写延迟。
-
看看stackoverflow.com/questions/319328/… 使用宏生成循环
标签: c++ c macros arduino metaprogramming