Easyelectronics.ru

Электроника для всех
Текущее время: 23 апр 2019, 23:45

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 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
Сообщения: 3995
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
Сообщения: 3995
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 часов


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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