Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/152: Рейтинг темы: голосов - 152, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 22

Как сделать нормальный delay?

20.02.2012, 14:42. Показов 29139. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как сделать нормальную задержку. Через цикл получается очень кривая, видел где-то задержку сделанную на ассемблере, но у меня keil выдает ошибку.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2012, 14:42
Ответы с готовыми решениями:

Task.Delay или как правильно сделать задержку
Привет! Выручайте. Такая проблема: в цикле отрисовываю объекты Graphics меняя цвет одного из них (так скажем выделяя). Для динамического...

Как сделать нормальный random?
Что то в мануалах предложенный рандом с использованием srand() и rand() и времени, как то выдает прям не совсем случайные числа при...

Как сделать нормальный калькулятор
Вообщем, у меня получилось сделать калькулятор который делает выбранной действие с двумя числами. Но этого мне недостаточно, я хочу сделать...

27
0 / 0 / 0
Регистрация: 06.08.2011
Сообщений: 532
27.09.2012, 00:46
Студворк — интернет-сервис помощи студентам
Code
1
volatile uint32_t delay = (us * (SystemCoreClock / 1000000) / 4);
а если включить мозг то сразу станет понятно что использовать деление и умножения в run-time для микросекундных задержек - абсолютно избыточно и ненужно...
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
27.09.2012, 01:03
там же все это аппаратно = быстро. Или вы о чем?
0
0 / 0 / 0
Регистрация: 06.08.2011
Сообщений: 532
27.09.2012, 01:11
>>там же все это аппаратно = быстро. Или вы о чем?

ну-ну... умножение, деление и сдвиг, плюс загрузка констант. Вполне может набраться на 1..2 мкс, причем неконтролируемых (длительность деления зависит от чисел), что для микросекундных задержек многовато. Не пойму зачем это делать если константу задежки можно считать в sompyte-time обычным макросом ?
пример задержки с таймером и станд.либе - это вообще ужос, интересно посмотреть на листинг чего там нагенерил компилер...
0
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 322
27.09.2012, 08:56
Цитата Сообщение от riptyti
Не пойму зачем это делать если константу задежки можно считать в sompyte-time обычным макросом ?
... согласен, вполне неплохо получается вот так:
Code
1
2
3
4
5
6
7
   XTAL_CLK equ 24000
MACRO
_delay_us $reg, $time_us
mov   $reg,#((XTAL_CLK*$time_us)/3000)
01    subs $reg,$reg,#1
bne   %b01
MEND
после чего достаточно написать
Code
1
_delay_us r5,2 ; задержка 2
0
mr_smyt
27.09.2012, 17:12
Была же статья на эту тему: http://we.iosyitistromyss.ru/G... rzhka.html
Code
1
2
3
4
5
6
7
void delay_ms(uint32_t ms) {
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq (&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency/10000)*ms;
for (; nCount != 0; nCount--);
}
Лично выводил меиндр на один из пинов и смотрел осциллографом. Тютелька в тютельку. В миллисекундах.
0 / 0 / 0
Регистрация: 06.08.2011
Сообщений: 532
27.09.2012, 18:08
>>В миллисекундах.

а в микро- ? хотя бы 5..10 ?
0
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 322
27.09.2012, 20:00
Цитата Сообщение от riptyti
а в микро- ? хотя бы 5..10 ?
.. ну так _delay_us это и есть микросекунды. Динный макрос успешно используется для программного I2C. Проверял по осциллографу - работает стабильно.
0
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 24
27.09.2012, 21:07
Цитата Сообщение от mr_smyt
Была же статья на эту тему: http://we.iosyitistromyss.ru/G... rzhka.html
Код:
void delay_ms(uint32_t ms) {
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq (&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency/10000)*ms;
for (; nCount != 0; nCount--);
}
Лично выводил меиндр на один из пинов и смотрел осциллографом. Тютелька в тютельку. В миллисекундах.

Я тоже этим кодом пользовался для милисекунд. Только на discovery F4 работает не очень хорошо (почти в два раза быстрее считает чем нужно.... хотя это Я еще проверю).

Doomsday, спасибо за совет, похоже, это то что надо, буду пробовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2012, 21:07

Как сделать нормальный зум?
Подскажите пожалуйста новичку. Как делать кнопки зум ин и зум аут я понял, но мне надо, чтобы информация о масштабе отображалась рядом в...

Как сделать нормальный прыжок в 2d?
Есть прыжок который работает но работает не всегда и у него рандомная сила , что делать?

Как сделать нормальный установщик?
Ребята, Привет всем, Гугл не удволетворил мои запросы,поэтмоу пишу У меня есть проэкт в Qt я хотел бы сделать именно инсталятор программы...

Как сделать нормальный калькулятор
Пытался давече создать самый обычный калькулятор. Всё, что смог придумать - это разделять целую часть числа и остаток, выполнять операции...

Как сделать нормальный пробел?
Закруглил углы у полей ввода. Теперь когда вводишь слово, небольшая часть букв не видна. Могу добавить пробел, чтобы имя вводилось немного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru