реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Глобальный счетчик милисекунд.
Jenya7
сообщение Jun 13 2018, 06:41
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(AlexandrY @ Jun 13 2018, 12:02) *
У Kinetis есть 64-х битный lifetimer на базе PIT. Так что хватит на всю жизнь с точностью в 16 ns


PIT не имеет пределителя. его невозможно настроить на 1 милисекундный тик.

можно через второй таймер но второй таймер генерирует прерывание - а я этого хочу избежать.

Код
// Timer 2
PIT_LDVAL2 = 0x00000009; // setup Timer 2 for 10 counts
PIT_TCTRL2 = TIE; // enable Timer 2 interrupt
PIT_TCTRL2 |= CHN; // chain Timer 2 to Timer 1
PIT_TCTRL2 |= TEN; // start Timer 2
// Timer 1
PIT_LDVAL1 = 0x23C345FF; // setup Timer 1 for 600 000 000 cycles
PIT_TCTRL1 = TEN; // start Timer 1


Сообщение отредактировал Jenya7 - Jun 13 2018, 06:56
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 13 2018, 06:48
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ Jun 13 2018, 09:41) *
PIT не имеет пределителя. его невозможно настроить на 1 милисекундный тик.

2 AlexandrY: неужто у супер-пупер кинетиса нету таймера с хотя-бы 20-битным прескалером? или возможности использования в качестве такого прескалера другого таймера (concatenating)? smile3046.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 13 2018, 08:03
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Jenya7 @ Jun 13 2018, 09:41) *
PIT не имеет пределителя. его невозможно настроить на 1 милисекундный тик
Что мешает считать в тиках таймера?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 13 2018, 08:25
Сообщение #19


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Jenya7 @ Jun 11 2018, 07:27) *
Это очень удобно и работать с переменной просто но мне не нравиться парадигма прерывания програмы каждую милисекунду.

Допустим, тактовая частота процессора 120 МГц. На вход в прерывание и выход тратим по 12 тактов. На инкремент счетчика, пусть, еще 12 тактов. Итого:
36 / 120 000 = 0,0003
Вы боитесь потерять производительность на 0,03%? rolleyes.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 13 2018, 08:55
Сообщение #20


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Jun 13 2018, 09:48) *
2 AlexandrY: неужто у супер-пупер кинетиса нету таймера с хотя-бы 20-битным прескалером? или возможности использования в качестве такого прескалера другого таймера (concatenating)? smile3046.gif

Так это и есть после конкатенации. Но при этом атомарное чтение.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 13 2018, 09:00
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ViKo @ Jun 13 2018, 14:25) *
Допустим, тактовая частота процессора 120 МГц. На вход в прерывание и выход тратим по 12 тактов. На инкремент счетчика, пусть, еще 12 тактов. Итого:
36 / 120 000 = 0,0003
Вы боитесь потерять производительность на 0,03%? rolleyes.gif


я не боюсь потерять производительность. я не хочу чтоб у меня прерывание молотило кажую милисекунду. если вам это не мешает то вы счастливый человек. sm.gif

Цитата(Сергей Борщ @ Jun 13 2018, 14:03) *
Что мешает считать в тиках таймера?
это типа шутка?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 13 2018, 09:05
Сообщение #22


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Jenya7 @ Jun 13 2018, 12:00) *
я не боюсь потерять производительность. я не хочу чтоб у меня прерывание молотило кажую милисекунду. если вам это не мешает то вы счастливый человек. sm.gif

Как может мешать нечто с нагрузкой 0,03%? laughing.gif
Из-за неоптимального кода можно потерять куда больше.
Прерывание лишнего тока не ест, помех не создает. Все ОС используют прерывание от системного таймера.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 13 2018, 09:25
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ViKo @ Jun 13 2018, 15:05) *
Как может мешать нечто с нагрузкой 0,03%? laughing.gif
Из-за неоптимального кода можно потерять куда больше.
Прерывание лишнего тока не ест, помех не создает. Все ОС используют прерывание от системного таймера.

у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 13 2018, 09:35
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Jenya7, вы по все видимости начинающий разработчик - прислушайтесь к советам опытных МК-программистов.

Зачем вам аппаратный таймер, если вы от него даже прерываний боитесь? Это две крайности.
Нужно сделать аппаратный таймер для счета программного счетчика с интервалом 1 или 10 мс.
Затем все миллисекундные задержки и выше делать программно. Только так.
Если у вас какая-то неприязнь к такому решению, то вы в чем-то заблуждаетесь - можете высказать свои "фи", и мы вас переубедим.
Повторюсь, у Cortex-ов есть специальный таймер SysTick, и 99% проектов использует его
для миллисекундных и выше задержек, с программным отсчетом времени.
Задержки на микросекунды и ниже уже могут потребовать аппаратный таймер.
Использование аппаратного таймера жестко привязывает проект к данной архитектуре и данному камню - проект будет
слабо переносимым и склонным к аппаратным конфликтам с другими библиотеками и т.п.

Насколько я понимаю, ТС хочет сделать некую инициализацию, чтоб потом вычитывать из некого регистра число, равное числу миллисекунд.
Желательно, чтоб регистр был 32-битным. Вроде, у LPC17xx таймеры были 32 битными с 32-битным предделителем.

Цитата(Jenya7 @ Jun 13 2018, 12:25) *
у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны.

У Cortex-M есть NVIC, который может делать вложенные прерывания с приоритетами.
Если 32-битная переменная выровненная, то доступ к ней будет атомарным.
Но я так понял, что из счетчика миллисекунд бы будете только вычитывать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 13 2018, 09:36
Сообщение #25


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Jenya7 @ Jun 13 2018, 12:25) *
у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны.

Такие критические, что 0,3 мкс не могут подождать? Не верю.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 13 2018, 09:38
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Jun 13 2018, 12:25) *
можно сказать очень критические

Можете подробнее рассказать о них?
Это не норма, такие вещи нужно делать аппаратно и/или подбирать соответствующее аппаратное решение.
Я уже 10 лет не пользуюсь запретом/разрешением прерываний, а проектов сделал очень много. ЧЯДНТ?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 13 2018, 09:41
Сообщение #27


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075




adnega так что вы предлагаете? я честно говоря так и не понял.
по моему вот этого
Цитата
Нужно сделать аппаратный таймер для счета программного счетчика с интервалом 1 или 10 мс.
я и пытаюсь добиться.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 13 2018, 09:52
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ Jun 13 2018, 12:00) *
это типа шутка?

Не шутка. Так все и делают... кроме вас почему-то... laughing.gif

Цитата(adnega @ Jun 13 2018, 12:35) *
Jenya7, вы по все видимости начинающий разработчик - прислушайтесь к советам опытных МК-программистов.

Ага, уже лет N как начинающий и всё не могущий начать biggrin.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 13 2018, 10:15
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Jun 13 2018, 12:41) *
по моему вот этогоя и пытаюсь добиться.

Дык, настраиваете SysTick на генерацию прерываний с интервалом 1 мс, а в обработчике прерывания делаете
Код
maintimer++;

, где maintimer - 32-битная переменная, в которой будут лежать миллисекунды.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 13 2018, 10:17
Сообщение #30


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(adnega @ Jun 13 2018, 16:15) *
Дык, настраиваете SysTick на генерацию прерываний с интервалом 1 мс, а в обработчике прерывания делаете
Код
maintimer++;

, где maintimer - 32-битная переменная, в которой будут лежать миллисекунды.


мда... ну вобщем тему можно закрывать. признаюсь был не прав.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 12:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016