Цитата(Firer @ Feb 10 2012, 16:46)

Вопрос - на сколько тактов процессора эта функция делает задержку? Сам цикл.
Вносит ли переход сброс конвейера и глотает ли он доп.циклы?
Или 10*2 циклов получается ровно?
ПМСМ, переход (кроме последнего раза) будет заново заполнять конвеер.
(не заполняет тогда, когда не выполняется условие - нет перехода)
Лучше 1 раз посчитать, используя системный таймер, с предделением 1.
(Вызов функции тоже переход с заполнением конвеера.)
Более того, время выполнения, возможно, будеть зависеть от модели контроллера (разрядность памяти)
и настроек регистра доступа к памяти.
Мне тоже интересна эта тема. Если посчитаете системным таймером - поделистесь, пожалуйста.
По крайней мере на IAR вариант с volatile у меня работает.
Код
void delay_y()
{
volatile u32_t i, ty;
for(i=0; i<10000; i++) ty=GPIOA_ODR;
}
И ещё замечание.. практически гарантировано не будет заоптимизировано обращение к портам.
Но ваш вариант лучше - точнее.
Сообщение отредактировал Юрий_СВ - Feb 10 2012, 18:40