Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93

Перевод тиков FreeRTOS в миллисекунды

16.10.2014, 11:43. Показов 9110. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Пытаюсь перевести FreeRTOS'ные тики в миллисекунды - типа, реализация функции Sleep в миллисекундах, а не тиках.

C
1
2
3
4
void Sleep(int period_ms)
{
  vTaskDelay(period_ms  / portTICK_RATE_MS);
}
где
portTICK_RATE_MS == 1000 / configTICK_RATE_HZ
configTICK_RATE_HZ == 1000,
configSYSTICK_CLOCK_HZ == 168000000 (это тактовая частота Cortex-M4),
SysTick Reload Value Register (0xe000e014) == ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL

Формулу взял из коментариев к функции 'xTimerCreate' в FreeRTOS'ном коде:
* @param xTimerPeriodInTicks The timer period. The time is defined in tick periods so
* the constant portTICK_RATE_MS can be used to convert a time that has been
* specified in milliseconds. For example, if the timer must expire after 100
* ticks, then xTimerPeriodInTicks should be set to 100. Alternatively, if the timer
* must expire after 500ms, then xPeriod can be set to ( 500 / portTICK_RATE_MS )
* provided configTICK_RATE_HZ is less than or equal to 1000.

Замерял время по секундомеру на разных Sleep-периодах (10000, 15000, 20000 мс) - всегда приблизительно в 3 раза дольше получается.

И вопрос - как перевести тики в миллисекунды?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2014, 11:43
Ответы с готовыми решениями:

FreeRTOS на STM32F103 "медленные" миллисекунды.
Запустил FriiRTOS на STM32F103C8, 72MHz. Использую IAR. Хочу поморгать светодиодом с периодом 1с (0,5с - горит, 0,5с - не горит). Если...

Количество тиков таймера перевести в миллисекунды
как количество тиков таймера перевести в миллисекунды

Перевод часов в минуты, секунды, миллисекунды
Написать программу, которая в зависимости от выбранного номера и количества часов N переводила их в минуты, секунды, миллисекунды. ...

24
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
16.10.2014, 11:48
C конкурирующего форума

Не по теме:

Если вдруг кто-то с похожим столкнется - проблема решена)
Все дело в J-Link. Когда прошивка крутится под отладчиком - задержка появляется. Когда без отладчика - все работает как надо.

1
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
16.10.2014, 12:18  [ТС]
Спасибо. Но не помогло.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
16.10.2014, 14:58
Цитата Сообщение от RRR_RRR_RRR Посмотреть сообщение
configSYSTICK_CLOCK_HZ == 168000000 (это тактовая частота Cortex-M4),
А вы уверены, что PLL и его канал, использованный для задержки, настроены именно на эту частоту? Ведь это совершенно не очевидно.
0
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
16.10.2014, 16:26  [ТС]
Нет, не уверен.

Прошу прощения за возможно глупый вопрос (я только недавно начал работать с "железом" и еще не все уложилось в голове) - а как проверяется на какую частоту настроен PLL и его канал?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
16.10.2014, 17:32
RRR_RRR_RRR, читаете частоту из регистров клоков. В API также есть функция, отдающая структуру с частотой ЦПУ и частоты по шинам. По крайней мере, так в STM32F1xx. Думаю, F4 отличается в этом не сильно.

Добавлено через 2 минуты
...потом вам предстоит вычитать в доке по FreeRTOS (или глянуть в исходники) как именно (чем) она формирует задержки. Ставлю на то, что она считает с помощью RTC. Тогда надо глянуть еще чем тактуется он .
0
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
17.10.2014, 12:37  [ТС]
Цитата Сообщение от Voland_ Посмотреть сообщение
есть функция
- функцию нашел. Возвращает не то, что нужно.

Вообще, у меня сформировалось видение ситуации такое:

Изначально во FreeRTOS'е задается максимальная тактовая частота (168MHz)
C
1
2
//Define CPU core clock in Hz
#define CORE_CLOCK (168000000)
по ней выставляется STRVR так, чтобы FreeRTOS'ные тики были 1 раз в миллисекунду - тики FreeRTOS'а инкрементируются в SysTick_Handler'e
C
1
2
3
/* Configure SysTick to interrupt at the requested rate. */
portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;;
portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
где portNVIC_SYSTICK_LOAD_REG - это STRVR
C
1
#define portNVIC_SYSTICK_LOAD_REG           ( * ( ( volatile unsigned long * ) 0xe000e014 ) )
Затем частота понижается, но STRVR не меняется, т.е. тики формируются с прежней частотой, что и дает, что 1 FreeRTOS'ный тик > 1 миллисекунды.

Вот вопросы
1) В какой момент времени частота уже понизилась?
2) Откуда взять уже пониженную тактовую частоту?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
17.10.2014, 12:50
RRR_RRR_RRR, SysTickHandler работает на своей собственной частоте, либо от внутреннего генератора на 40кГц, либо внешнего (обычно 32768Гц), либо через делители от тактующего. Скорее всего первое у вас.
0
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
17.10.2014, 13:08  [ТС]
Я ориентируюсь вот на это

http://infocenter.arm.com/help... 02s03.html

Там сказано:
"A multi-shot timer has a SysTick interrupt RELOAD of N-1 to generate a timer period of N processor clock cycles. For example, if the SysTick interrupt is required every 100 clock pulses, 99 must be written into RELOAD"
Я, значит, НЕ правильно понимаю, что SysTick interrupt вызывает SysTick_Handler?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
17.10.2014, 13:24
Цитата Сообщение от RRR_RRR_RRR Посмотреть сообщение
Там сказано:
Первая же фраза в заголовке: "Cortex™-M1 Technical Reference Manual"
Уточните какой контроллер вы программируете?

Добавлено через 3 минуты
...просто у вас в первом посте было про М4
Цитата Сообщение от RRR_RRR_RRR Посмотреть сообщение
configSYSTICK_CLOCK_HZ == 168000000 (это тактовая частота Cortex-M4),
и, соответственно, немного читав про stm32f4xx я и советую, что могу :/.
0
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
17.10.2014, 13:55  [ТС]
Для cortex-m4 программирую.

На том же сайте

Cortex-M series processors => Cortex-M4 => Revision: r0p1 => ARM Cortex-M4 Processor Technical Reference Manual => System Control => Register summary

там
Registers not described in this chapter are described in the ARM®v7-M Architecture Reference Manual
Как выяснилось в http://infocenter.arm.com/help... index.html
This document is only available in a PDF version to registered ARM customers.
Поэтому я посмотрел на http://infocenter.arm.com/help... 02s03.html, по смыслу описания это то, что мне нужно, а адрес регистра и для м4 такой же
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
17.10.2014, 15:44
RRR_RRR_RRR, берите datasheet и reference manual на свой конкретный чип. И листайте.
Повторю вопрос - какой контроллер конкретно вы програмите? Вы же понимаете, что Cortex M4 - это ядро. И реализация базовых адресов, равно как и много периферии может существенно отличаться даже у одного и того же производителя? Для примера могу привести STM32, Cortex M3. В разных семействах этого контроллера USB реализован СОВЕРШЕННО по-разному. То есть ну вообще!. В описании же и там и сям пишут "USB", но и софт и API не совпадают аж никак.
То же касается и если сравнить NXP, TI и STM32, если сравнивать настройки периферии.
Соответственно, есть подозрение, что клок для RTC (он же systick_timer) может тактироваться на разных контроллерах по-разному.
0
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
17.10.2014, 20:46  [ТС]
берите datasheet и reference manual на свой конкретный чип. И листайте.
- Разумеется это просмотрено. Но, похоже, мне этого не достаточно - почерпнутая инфа не помогает мне разобраться с проблемой. Именно эта инфа и именно мне - пока еще не получается что-то с чем-то увязать в голове. Потому я пишу на форуме вопрос.

Вы же понимаете, что Cortex M4 - это ядро.
- Да, понимаю, Cortex-M4 - это ARM-based ядро. Запарил.

Микроконтроллер - STM32, борда - STM32F407VGT6.

есть подозрение, что клок для RTC (он же systick_timer) может тактироваться на разных контроллерах по-разному.
- SysTick таймер и RTC (Real Time Clock) - это точно одно и то же?

Я тут поэкспериментировал малость. Если прочитать из STRVR регистра значение, разделить его на 3 (число из первого поста) и записать обратно, то моя функция Sleep работает нормально - проверено по секундомеру.
0
17.10.2014, 20:47

Не по теме:

Ставлю на STM32

0
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
17.10.2014, 21:35  [ТС]

Не по теме:

Ставлю на STM32



Это о чем речь?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
18.10.2014, 08:02
Цитата Сообщение от RRR_RRR_RRR Посмотреть сообщение
Изначально во FreeRTOS'е задается максимальная тактовая частота (168MHz)
во FreeRTOS вообще не задается частота
есть файл FreeRTOSConfig.h
в котором, самому ручками нужно, прописать все константы в зависимости от железа
FreeRTOS портирован на 100500 платформ, и этот файл очень сильно отличается

Добавлено через 4 минуты
Цитата Сообщение от RRR_RRR_RRR Посмотреть сообщение
Если прочитать из STRVR регистра значение, разделить его на 3
почему именно на 3???
нужно знать от чего работает камень,
если от внешнего то какова частота кварца
потом коэффициент множителя
ведь если к готовой схеме припаять кварц на 4 мГц вместо 8
то частота очень сильно изменится, несмотря на то, что софтверно все будет идентично
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
18.10.2014, 21:28
ValeryS, ну, если задержка сделана на Systick timer, то частота PLL будет иметь к нему отношение только в том случае, если systick тактуется от нее. Если используется свой генератор внутренний LCI, либо внешний LCI, то нужно смотреть инициацию именно его.
RRR_RRR_RRR, зачем вы работает с регистрами, когда у вас запускается ОСь? По идее она это все должна делать, и вы должны настроить клок ее собственными настройками. Иначе есть риск что-то что-нибудь где-нибудь вылезет по частоте снова.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
18.10.2014, 22:22
Цитата Сообщение от Voland_ Посмотреть сообщение
ValeryS, ну, если задержка сделана на Systick timer, то частота PLL будет иметь к нему отношение только в том случае, если systick тактуется от нее.
ну а я про что???
Цитата Сообщение от ValeryS Посмотреть сообщение
нужно знать от чего работает камень,
если от внешнего то какова частота кварца
т.е нужно знать частоту генератора (внешний, внутренний) и множители
чтобы узнать частоту шины
и её прописывать в CORE_CLOCK а не брать готовый(чей то ) FreeRTOSConfig.h
и верить что все пойдет идеально

Добавлено через 4 минуты
вот отсюда я начал знакомство с FreeRTOS
может поможет кому нибудь
http://microsin.net/programmin... part1.html
вот здесь про настройку для СТМок
http://microtechnics.ru/stm32-... s-chast-1/
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
18.10.2014, 22:37
Цитата Сообщение от ValeryS Посмотреть сообщение
ну а я про что???
Сообщение от ValeryS
нужно знать от чего работает камень,
если от внешнего то какова частота кварца
ну, вы вообще про какие-то камни говорите . В данном контексте непонятно, что вы имели ввиду. А дfльнейшее рассуждение о внешнем кварце "на 4 или на 8МГц" указывает таки на высокочастотный источник тактования. Я же просто уточнил, что "камень" к systick-таймеру может и не иметь отношения. Если тактование последнего будет выполняться низкочастотным внешним или внутренним источником. Если вы слово "камень" использовали к Systick-таймеру, то я с вами согласен .
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
18.10.2014, 22:44
Цитата Сообщение от Voland_ Посмотреть сообщение
ну, вы вообще про какие-то камни говорите
"камень" это сленговое названия процессора(микроконтроллера),пошло с тех времен когда они делались в керамике и были шибко большие
привык я к нему
т.е
Цитата Сообщение от ValeryS Посмотреть сообщение
нужно знать от чего работает камень,
если от внешнего то какова частота кварца
нужно читать так "нужно знать как затактирован микроконтроллер"
извиняюсь, если ввел в заблуждение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2014, 22:44
Помогаю со студенческими работами здесь

Как перевести unix миллисекунды (unixtimestamp) в обычные миллисекунды?
У меня есть значение unix time, как его перевести в обычные миллисекунды? Есть такая математическая формула? Например это unix...

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

Сгенерировать uuid v1 из тиков даты
Есть тики некоторо даты, например `62135596800098765` как на их основании сгенерировать uuid v1 ? Есть ли в php готовые классы и библиотеки...

Определение тиков, затраченных на исполнение инструкций
Здравствуйте! Мне необходимо отладить код и для контроля версий кода мне нужно иметь производительность, достаточно будет измерить...

Скрыть часть меток тиков в matplotlib
У меня есть некий график, в котором очень много значений. Мне нужно убрать часть меток и их лэйблов с оси x, а некоторые оставить с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru