Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
FOR или WHILE ? Что использовать и что быстрее?
Отправлено
[HC]HUNTER 06 апреля 2007 г. 21:05
Очень прошу вашей профессиональной помощи...Требуется организовать достаточно точную задержку по времени, скажем 10500 мкс.
Пишу на Си. Соответственно организовать её мне придется с помощью циклов for или while . Вот, собственно и вопрос. Сколько машинных тактов займет тот или иной оператор? Как точно высчитать требуемое мне значение счетчика?
Контроллер работает на 2 МГц от встроенной RC-цепи.
Я так понимаю, что в простейшем случае при такой тактовой частоте выглядеть это будет как-то так: for (i=0;i<21000;i++);
Но ведь этот цикл будет крутиться явно больше 10000мкс, т.к. время займет не только сам циклический переход, но еще и i++. Поэтому нельзя i назначать согласно требуемым циклам процессора.
Как вариант - использовать готовую функцию delay_us. Но не совсем удобно..., т.к. delay_us не позволяет в качестве аргумента использовать переменную (только константу).
Составить ответ | Вернуться на конференцию
Ответы
- goto — F8 (06.04.2007 22:27:9 128.241.40.128, пустое)
- может, чтобы не мучать себя неизвестностью, взять второй процессор на кварце и измерить получившийся интервал? это же просто - гораздо проще чем выбрать правильный ответ из кучи ответов скучающих разгельдяев конфы)) — basilmak (06.04.2007 22:16:47 213.171.62.94, пустое)
- Автору ещё рано программировать - лучше почитать об АВР и о Си. Програмные задержки анахронизм, хотя они точнее, чем таймерные (если не пользоваться сном и пофиг пустая трата ресурсов). Но вопрос поставлен так, что на него невозможно ответить. Для ответа надо знать компилятор, уровень оптимизации и видеть програмный кусок, знать тип контроллера. К тому же задавать интервал с точностью до "10500" не имеет смысла на RC генераторе. Для большинства контроллеров он может гулять от температу — Юрий_СВ (06.04.2007 21:35:21 91.124.222.207, пустое)
- Для организации точных задержек используются таймеры, а не "язык Си". Функции "delay_us/ms" являются весьма дурным средством создания временных затычек, а вопрос "сколько тактов займет такой-то оператор Си" имеет такой же смысл, как, например, "как проехать на?" без указания откуда, на чем, куда и т.д. — =AVR= (06.04.2007 21:16:25 80.92.96.19, пустое)
- AVR ? Посмотри в асмовом листинге операторы и возьми табличку для AVR по растактовке. — DASM (06.04.2007 21:16:18 212.58.192.14, пустое)