Easyelectronics.ru

Электроника для всех
Текущее время: 22 фев 2019, 13:53

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 17 сен 2010, 23:41 
Заглядывает иногда

Зарегистрирован: 17 сен 2010, 12:56
Сообщения: 81
a9d, Извиняюсь, да до конца вопрос не прочитал. Влез в тему в середине-конце. Но для меня "1 мс" и "примерно" как то не понятно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 17 сен 2010, 23:48 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 5423
Откуда: Москва
Ну почему непонятно? Некоторая периферия требует задержек, довольно приблизительных. Те же контроллеры экранов. Если нет RTOS, то вполне можно и простой тупой цикл, в инициализации, например. В touch интерфейсах задержка тоже иногда так делается, там не всегда используются таймеры. Или для всяких протоколов инфракрасных пультов, только это к ARM мало применимо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 17 сен 2010, 23:50 
Старожил

Зарегистрирован: 14 авг 2010, 20:14
Сообщения: 1503
Да все банально до ужаса.
Между опросом датчиков нужно делать небольшие задержки. Миллисекунды там хватит с головой. Для такой банально операции использовать таймер как то лень. Тем более съем данных происходит редко.

Можно конечно использовать цикл и не задаваться вопросом времени. Но в коментах к коду писать "ждем 41000 циклов" рука не поднимается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 17 сен 2010, 23:56 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 5423
Откуда: Москва
a9d, вам наверное лучше об RTOS подумать... если у вас такие задержки регулярны, это уже нехорошо.

Хотя иногда по другому просто не выкрутишься, например если их надо делать в time critical section, и прерывания запрещены.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 17 сен 2010, 23:57 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
a9d писал(а):


Можно конечно использовать цикл и не задаваться вопросом времени. Но в коментах к коду писать "ждем 41000 циклов" рука не поднимается.

Не совсем понял, как это можно задержку делать циклом?? А если во время цикла придет импульс со второго -третьего датчика? А если датчики висят не на внешних прерываниях??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:00 
Заглядывает иногда

Зарегистрирован: 17 сен 2010, 12:56
Сообщения: 81
R_ura, +10000


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:12 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
a9d писал(а):
2Ink: Может докажешь свои знания?
зачем это интересно? если ты считаешь, что я ошибаюсь - так и скажи, и ПОКАЖИ! мол, вот, смотри, неуч, ты не прав! пока никто ничего не опроверг, утверждаемого мной.
a9d писал(а):
Аппаратная задержка это дикремент регистра и проверка его на равенство нулю. Разве подобные команды будут на разных контроллерах отрабатывать за разное количество тактов?
просто подумай еще вот так: флеш не умеет работать на частоте, скажем, 60 МГц, чтобы каждый такт выдавать новое слово с командой. посему вопрос: а как же тогда простые команды могут выполняться за такт? разные производители по-разному работают с памятью и по разному решают эту проблему. и по факту может даже получиться, что один и тот же код, размещенный по разным адресам, будет работать с разной скоростью (в частности, из-за перехода в функции задержки).
R_ura писал(а):
А если во время цикла придет импульс со второго -третьего датчика?
все же зависит от задачи, где-то это совсем не критично может быть и вполне допустимо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:14 
Старожил

Зарегистрирован: 14 авг 2010, 20:14
Сообщения: 1503
2R_ura: Опрос происходит последовательно. Поэтому ничего придти вне очереди не может.

Я использую в своей задаче scmRTOS. Там есть задержка реализованная на таймере Sleep. Но при ее вызове управление может быть передано другому процессу.
Поэтому я делаю все по простому. Захожу в крит. секцию, произвожу опрос и выхожу.
Если так не поступать то придется во всех процессах с более высоким приоритетом проверять состояние мьютекса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:17 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 5423
Откуда: Москва
Вообще-то это решается расстановкой приоритетов. Как только время подошло, ваша задача опроса отработает, вне зависимости от остальных задач, если имеет наиболее высокий приоритет (который можно выставить динамически). С scmRTOS дела не имел, но скорее всего и там это тоже возможно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:18 
Старожил

Зарегистрирован: 14 авг 2010, 20:14
Сообщения: 1503
2Ink: Читай внимательно свои посты. Ты написал, что много читал и много знаешь. Но при этом в твоих ответах никакой конкретики, сплошная теория. И я попросил тебя привести пример который подтверждает твои слова.
Ты отказался. Какой я должен после этого сделать вывод?

А почему тогда при реализации задержки мы не можем учитывать скорость на которой работает флешь? Она ведь известна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:19 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
Как-то все весьма туманно и сложно... Не проще ли сделать, чтобы задержка считалась в фоновом режиме??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:20 
Старожил

Зарегистрирован: 14 авг 2010, 20:14
Сообщения: 1503
2akatenev: В scmRTOS приоритеты статичны. Эта операционка очень простая в освоении. Т.к. не имеет различных плюшек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:29 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 5423
Откуда: Москва
R_ura писал(а):
Как-то все весьма туманно и сложно... Не проще ли сделать, чтобы задержка считалась в фоновом режиме??

Такая задержка требует таймера, а он не всегда свободен. Иногда это лишняя трата ресурсов.

Что касается RTOS, то в них эта задачка решается элементарно, даже со статическими приоритетами (просто у этой задачи он должен быть высоким, выше чем у тех, время выполнения которых больше, чем позволительная погрешность задержки). Однако тут есть другая проблема - задержки такой малой длительности требуют довольно высокой частоты системного тика (в данном случае килогерц 5-10), а это довольно серьезная трата ресурсов.

Хотя я недавно делал устройство, где система переключала контексты с частотой 50 килогерц, и ничего, работало. Это экстремизм, конечно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:33 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
a9d писал(а):
И я попросил тебя привести пример который подтверждает твои слова.
Ты отказался. Какой я должен после этого сделать вывод?

как я думаю? что я не хочу тратить время на то, чтобы все разжевывать и класть кому-то в рот. я показал направление, куда копать. но ведь гораздо проще подумать, что я не привожу пример потому, что это неправда. ведь тогда это можно не учитывать, не читать даташиты, не разбираться в тонкостях...
a9d писал(а):
А почему тогда при реализации задержки мы не можем учитывать скорость на которой работает флешь? Она ведь известна.
прочитайте уже и поймите, как работает МАМ. потом прочитайте мой предыдущий пост.

akatenev писал(а):
Хотя я недавно делал устройство, где система переключала контексты с частотой 50 килогерц
ээээ... прикольно. а практический смысл был? если не секрет, то какой?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:36 
Старожил

Зарегистрирован: 14 авг 2010, 20:14
Сообщения: 1503
2Ink: Ты не указывал конкретное направление. Поэтому я сделал вывод, что ты знаешь многое только поверхностно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 00:48 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 5423
Откуда: Москва
Практический смысл был, конечно. Это такой хитрый таймер для фиксации быстротекущих событий, опрашивает сенсоры, и выдает команды на исполнительные устройства, по программе, которая меняется прямо на ходу. Проблема там была в том, что таких программ сразу несколько, и работают они одновременно, независимо друг от друга, при этом с одними и теми же сенсорами. Точность 100 микросекунд. При этом информацию с сенсоров надо еще обрабатывать в определенном временном окне.

Я потом решил задачу другим способом, менее затратным с точки зрения ресурсов процессора. А вообще-то правильно делать такие вещи на ПЛИС.

В принципе, эксперименты показали, что можно разгонять и до 200 килогерц, но там уже появляется элемент неопределенности, то есть RTOS перестает быть RTOS.

Это был STM32 на 72 мегагерцах. Время переключение контекста около 4 микросекунд при работе с флэша.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать задержку 1 ms ?
СообщениеДобавлено: 18 сен 2010, 01:09 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 5423
Откуда: Москва
a9d, сделайте калибровку в начале программы, и будет вам щасте ценой в одно слово памяти. Ей-богу, это намного проще, чем что-то там высчитывать, и попутно сраться на форуме :) Он на то и процессор, чтобы считать. Дело-то ерундовое, на самом деле, а развели холивар с наездами...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: kos


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB