Мне нужно добавить в мой код задержку в n циклов процессора (~ 30). Мое текущее решение приведено ниже, оно работает, но не очень элегантно.
Кроме того, задержка должна быть известна во время компиляции. Я могу работать с этим, но было бы идеально, если бы я мог изменить задержку во время выполнения. (Это нормально, если есть некоторые накладные расходы, но мне нужно разрешение в 1 цикл.)
У меня не осталось периферийных таймеров, которые я мог бы использовать, поэтому это должно быть программное решение.
do_something();
#define NUMBER_OF_NOPS (SOME_DELAY + 3)
#include "nops.h"
#undef NUMBER_OF_NOPS
do_the_next_thing();
nops.h:
#if NUMBER_OF_NOPS > 0
__ASM volatile ("nop");
#endif
#if NUMBER_OF_NOPS > 1
__ASM volatile ("nop");
#endif
#if NUMBER_OF_NOPS > 2
__ASM volatile ("nop");
#endif
...
nop
инструкций с вычисляемым переходом к ним. - person Weather Vane   schedule 20.06.2017