Цитата(Сергей Борщ @ Jan 10 2008, 11:16)

Есть предложение считать правильной такую версию: эта функция реализована в компиляторах ИАРа для процессоров, у которых детерминировано время выполнения команд. Вот, например, у ARM7 время выполнения зависит от места исполнения (ОЗУ/флеш), от настроек ускорителя, у более старших (скорее всего) - от настроек кеша. Поэтому в EWARM такой функции нет.
Понятно... А то я озадачился отсутствием этой функции в моих библиотеках... специально искал ее и не нашел...
Насчет удобства и полезности таких функций - как тут кто-то сказал - у меня всегда были
большие сомнения...Как раз потому - что они легко ведут к непониманию сути происходящего, если человек слабо представляет себе архитектуру процессора и цель определения таких фукнций.
Даже на 8051-м процессоре(поискал и нашел-таки в старых залежах) я постарался аналогичную функцию исключить из употребления и необходимые задержки предпочитал вставлять сам в виде 2-3
asm(" nop"); или соответствующих циклов.
Зачем? А вот как раз затем - что аналогичная функция в моем случае позволяла задать пераметром не только константное выражение. В результате - один из наших "сильно умных" практикантов написал кусок кода с операцией деления при рассчете этой задержки. Ну а деление в свою очередь - не имело аппаратной поддержки... Как результат - вот именно то о чем говорил
zltigo - вместо задержки на фиксированное количество тактов - получалось черт знает что. Если точнее - функция-то задержку делала правильную, но ей предшествовало вычисление величины этой задержки, которое занимало в несколько раз большее время и это время сильно зависело от заданных значений.
Цитата(Baser @ Jan 10 2008, 01:11)

Все свои программные задержки, где забываешь счетчик цикла объявить volatile, оптимизатор безжалостно выкидывает
Одно плохо: функция не стандартная.
Угу... А когда забудешь и влепишь выражение в параметр подобной функции - это лучше?
Я предпочитаю явное указание оптимизатору давать : "а не лезь сюда со своим интеллектом" -
volatile это...
А насчет рассчитать величину задержки - а что тут такого суперсложного?
Насчет стандартности - такая функция(и другие ей подобные) стандартной быть не может и не должна. Ибо она платформенно-зависимая в очень большой степени.
Цитата(IgorKossak @ Jan 10 2008, 00:41)

Это intrinsic function, описанная в EWAVR_CompilerReference.pdf и обьявленная в intrinsics.h
А у меня не EW
AVR_CompilerReference.pdf , у меня EW
ARM_CompilerReference.pdf