Мне интересно, что я могу сделать что-то вроде этого:
void ISR()
{
MEASURE_TIME(counters)
do_something();
MEASURE_TIME(counters)
do_something_else();
MEASURE_TIME(counters)
do_another_thing();
MEASURE_TIME(counters)
do_one_last_thing();
MEASURE_TIME(counters)
}
, которое во время компиляции каким-то образом переведет это:
void ISR()
{
counters[0] = measure_time();
do_something();
counters[1] = measure_time();
do_something_else();
counters[2] = measure_time();
do_another_thing();
counters[3] = measure_time();
do_one_last_thing();
counters[4] = measure_time();
}
Есть лиспособ поддерживать и увеличивать целочисленное состояние с помощью препроцессора (кажется маловероятным) или шаблонов?
Я знаю, что могу сделать это:
void ISR()
{
int i = 0;
counters[i++] = measure_time();
do_something();
counters[i++] = measure_time();
do_something_else();
counters[i++] = measure_time();
do_another_thing();
counters[i++] = measure_time();
do_one_last_thing();
counters[i++] = measure_time();
}
, но есть некоторое дополнительное значение, чтобы иметьиндекс времени компиляции (который здесь трудно объяснить, не вдаваясь в некоторые проприетарные подробности)
edit: это на встроенной системе, а __COUNTER__
недоступен (я простопопробовал это: __COUNTER__
не определено моим компилятором или препроцессором), и я не уверен, что смогу заставить Boost работать, по крайней мере, не полностью.