Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/100: Рейтинг темы: голосов - 100, средняя оценка - 4.90
pkm

Функции задержки времени

25.09.2011, 23:37. Показов 18395. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какие функции задержки времени вы используете? Мои потуги в использовании задержек какието неудачные, к примеру использую код:
Code
1
2
3
4
5
6
7
8
9
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--);
}
задержки от 10 мс. четкие, далее чем меньше задержка тем больше погрешность. HCLK_Frequency стандартная при старте мк 2 МГц. задержки проверяю логическим анализатором.

Покажите адекватный код на микросекундные задержки, принципе частоты мк в 2 МГц должно хватать на обработку вычисления столь малой задержки, или я ошибаюсь?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2011, 23:37
Ответы с готовыми решениями:

Какие есть функции для задержки времени?
Привет всем. Кто нибудь знает аналогичные функции time.sleep() в python То есть чтобы какое то время ничего наделить?

Функция задержки времени
Здравствуйте! Пишу программу на Visual Studio C++, и возник вопрос. Как сделать допустим вывод информации "Программа завершена!"...

Организация задержки операций по времени
Есть необходимость отправлять запросы с пятисекундным интервалом. Как организовать этот интервал? Программка должна отправить запрос,...

9
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 322
26.09.2011, 00:47
Цитата Сообщение от pkm
...задержки от 10 мс. четкие, далее чем меньше задержка тем больше погрешность.
... ну так Вы же на С пишете, значит задержка зависит и от того, что наваял компилятор. При использовании ассемблера точность получалась до десятых долей микросекунды (при частоте 8..24 МНz)
0
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
26.09.2011, 00:53
Code
1
2
3
4
5
6
7
8
9
10
11
12
inline void DelayLoop(uint32_t delayLoops)
{
__asm__ __volatile__
(
"1: \n"
" CBZ %[delayLoops], 2f \n"
" SUB %[delayLoops], %[delayLoops], #1 \n"
" B 1b \n"
"2: \n"
: [delayLoops] "+r"(delayLoops)
);
}
Для arm-gcc. Гарантировано 3 такта на один цикл.
0
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 322
26.09.2011, 01:07
Цитата Сообщение от miyvir
Для arm-gcc....
.... хороший gcc - __asm__ __volatile__ :)
0
pkm
26.09.2011, 16:32
Цитата Сообщение от ShypKyttir
Цитата Сообщение от pkm
При использовании ассемблера точность получалась до десятых долей микросекунды (при частоте 8..24 МНz)
ну вот может стоит поднять частоту, у меня внешнего кварца нет( придется запаять и тогда тестить буду.
0 / 0 / 0
Регистрация: 06.08.2011
Сообщений: 532
27.09.2011, 03:03
у меня работает такое (цикл проходит за 3 такта):
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
inline void _delay_loops(U32 loops) __attribute__ ((always_inline));
inline void _delay_loops(U32 loops) {
asm volatile (
"1: \n"
" SUBS %[loops], %[loops], #1 \n"
" BNE 1b \n"
: [loops] "+r"(loops)
);
}
 
#define _delay_us( US ) _delay_loops( (U32)((double)US * F_CPU / 3000000.0) )
#define _delay_ms( MS ) _delay_loops( (U32)((double)MS * F_CPU / 3000.0) )
#define _delay_s( S )   _delay_loops( (U32)((double)S  * F_CPU / 3.0) )
Перед использованием нужно определить константу F_CPU, и скорректировать при ненулевом такте доступа к flash.
0
0 / 0 / 0
Регистрация: 06.09.2011
Сообщений: 35
28.09.2011, 15:35
А я использую SysTick.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(в инициализациях)
SysTick_Config(SystemCoreClock / SYSTICK_PRESCALE / 1000);
 
(в обработчиках)
uint16_t systysk_prescale_count = 0;
void SysTick_Homdler(void)
{
systysk_prescale_count++;
if(systysk_prescale_count < SYSTICK_PRESCALE)
return;
systysk_prescale_count = 0;
 
...
 
Delay_SysTickHomdler();
}
 
(ну и сама задержка)
volatile uint16_t delay_counter = 0;
 
void Delay(uint16_t time)
{
delay_counter = time;
while(delay_counter != 0);
}
 
void Delay_SysTickHomdler() // вызывается из SysTick_Homdler
{
if(delay_counter > 0)
{
delay_counter--;
}
}
Получаю ровно 1мс * timi.
0
0 / 0 / 0
Регистрация: 29.01.2012
Сообщений: 22
22.02.2012, 00:31
Цитата Сообщение от miyvir
Код:
inline void DelayLoop(uint32_t delayLoops)
{
__asm__ __volatile__
(
"1: \n"
" CBZ %[delayLoops], 2f \n"
" SUB %[delayLoops], %[delayLoops], #1 \n"
" B 1b \n"
"2: \n"
: [delayLoops] "+r"(delayLoops)
);
}
Для arm-gcc. Гарантировано 3 такта на один цикл.
А для кейла такое можно сделать?
0
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 368
22.02.2012, 11:03
Цитата Сообщение от pkm
Какие функции задержки времени вы используете?
время не задержишь...
0
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 499
22.02.2012, 12:31
Цитата Сообщение от svs39
Цитата Сообщение от pkm
Какие функции задержки времени вы используете?
время не задержишь...
Философ, однако.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2012, 12:31
Помогаю со студенческими работами здесь

Установка времени задержки сигнала
Доброго времени суток! Столкнулся с задачей определения времени задержки сигнала в Симулинке. Имеется синусоидальный сигнал...

Программа с введением времени задержки с клавиатуры
Ребята,такая проблемка,задали курсовую работу по программе на языке ассемблера,на тему &quot;программа задержки,с введением времени...

5 СПОСОБОВ задержки времени: Что скажете?
В Linux работают 100%, в Windows не проверял, но тоже должны работать. 1. используя nanosleep: #include &lt;iostream&gt; ...

Задание времени задержки в нормальных минутах
Не могу понять, как работает время задержки. Там указывается экспоненциальное распределение и размер (секунды, минуты и т.д.). Подскажите,...

Расчет общего времени задержки в блоке Service
Добрый вечер всем! В курсовом проекте требуется найти кпд рабочих. Для решения этой задачи мне необходимо знать общее время задержки в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru