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

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


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ
http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.html
Только максимальное значение миллисекунд, которое можно задать зависит от таймера.
А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая )
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 18 2018, 05:02
Сообщение #32


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

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



Цитата(pokk @ Jun 17 2018, 08:37) *
Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ
http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.html
Только максимальное значение миллисекунд, которое можно задать зависит от таймера.
А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая )


у меня таймера не хватало. в Кинетесе они кривые. кроме LPTM. освободил LPTM. он 16-битный приходиться приращивать в прерывании
Код
void LPTMR0_IRQHandler(void)
{
    LPTMR0_CSR |= LPTMR_CSR_TCF_MASK;
    
    ovf_count++;
    added_val = 0xFFFF * ovf_count;
}

uint32_t SYSTIME_GetSystemTime(void)
{    
    unsigned long cnt;
    LPTMR0_CNR = 0;       // write any value to the counter register so that it puts its present counter value into a temporary register
    cnt = LPTMR0_CNR;    // read the value from the temporary register
    return (cnt + added_val);
}


Сообщение отредактировал Jenya7 - Jun 18 2018, 05:03
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 18 2018, 06:40
Сообщение #33


Гуру
******

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



А почему SysTick не используете?
Go to the top of the page
 
+Quote Post
juvf
сообщение Jun 20 2018, 04:42
Сообщение #34


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Jenya7 @ Jun 11 2018, 09:27) *
У Kinetis есть аппаратный таймер (FlexTimer Module (FTM)) 16 бит - это дает нам 65536 милисекунд до переполнения что конечно очень мало для нормальной работы.

Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 20 2018, 18:54
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь (; Впрочем, ТС сознался, что был не прав.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 21 2018, 05:12
Сообщение #36


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

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



Цитата(adnega @ Jun 18 2018, 11:40) *
А почему SysTick не используете?

объяснил это в первом посте.

Цитата(juvf @ Jun 20 2018, 09:42) *
Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC.


у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду.



Цитата(Obam @ Jun 20 2018, 23:54) *
В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь


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

Цитата(Obam @ Jun 20 2018, 23:54) *
Впрочем, ТС сознался, что был не прав.

долгие годы игры в покер научили меня вовремя скидывать слабую руку.


Сообщение отредактировал Jenya7 - Jun 21 2018, 05:14
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 21 2018, 05:15
Сообщение #37


Гуру
******

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



Цитата(Jenya7 @ Jun 21 2018, 08:12) *
у него нет пределителя

Вы опять за старое.
У него есть период, и за счет периода вы создадите 1 мс.
С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++.
Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые?
Go to the top of the page
 
+Quote Post
juvf
сообщение Jun 21 2018, 05:24
Сообщение #38


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(adnega @ Jun 21 2018, 10:15) *
Вы опять за старое.
У него есть период, и за счет периода вы создадите 1 мс.
С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++.
Писал же ТС, что у него сейчас так и есть, но он не хочет раз в 1 мс падать в прерывание, а хочет сделать аппаратный миллисекундный таймер.


Цитата(Jenya7 @ Jun 21 2018, 10:12) *
у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду.
vs
Цитата
16 бит - это дает нам 65536 милисекунд до переполнения
как это? 16 битный таймер дает переполнение через 65536 милисекунд, но тик у этого таймера не равен 1 мс???
Проблема решена, и слава богу!!! wink.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 21 2018, 05:44
Сообщение #39


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

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



ТС не умеет задавать такое значение в SysTick таймер, чтобы тот перезагружался с периодом 1 мс. Учиться, учиться и еще раз...
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 21 2018, 05:44
Сообщение #40


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

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



Цитата(adnega @ Jun 21 2018, 10:15) *
Вы опять за старое.
У него есть период, и за счет периода вы создадите 1 мс.
С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++.
Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые?


вы вообще читали тему? первый мой пост? ради чего была создана тема?

Я НЕ ХОЧУ ГЕНЕРИРОВАТЬ ПРЕРЫВАНИЯ КАЖДУЮ МИЛЛИСЕКУНДУ.

все. эту руку я сбрасываю.

Сообщение отредактировал Jenya7 - Jun 21 2018, 05:47
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 21 2018, 05:51
Сообщение #41


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

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



То есть, мои аргументы, что вы теряете 0.03% производительности, вам не понять?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 21 2018, 05:59
Сообщение #42


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

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



Цитата(ViKo @ Jun 21 2018, 10:51) *
То есть, мои аргументы, что вы теряете 0.03% производительности, вам не понять?


да хрен с ней спроизводительностью. хоть 5%. дело не в ней. у меня бегут важные таски. критические можно сказать. и я не хочу прерывать их каждую миллисекунду.может ничего страшного не произойдет. но зачем мне дополнительные, неоправданные как я считаю, риски?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 21 2018, 06:02
Сообщение #43


Гуру
******

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



Цитата(Jenya7 @ Jun 21 2018, 08:44) *
Я НЕ ХОЧУ ГЕНЕРИРОВАТЬ ПРЕРЫВАНИЯ КАЖДУЮ МИЛЛИСЕКУНДУ.

Вы можете объяснить почему? Это вполне естественная вещь для МК, но вы категорически ее отвергаете.
Вы бы поменьше секретничали, а то нам в соседних ветках достается, что за вас додумывают недосказанное.
Go to the top of the page
 
+Quote Post
juvf
сообщение Jun 21 2018, 06:23
Сообщение #44


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(adnega @ Jun 21 2018, 11:02) *
Вы можете объяснить почему?
зачем это объяснять? ТС и так уже всё объяснил. У меня было такое.... сделал таймер с тиком в 1 мс и отрубил прерывания. Полностью аппаратный миллисекундный таймер.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 21 2018, 06:28
Сообщение #45


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

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



А через каждые 10 мс прерываться рискнете? Тоже нормальный период для RTOS.
Go to the top of the page
 
+Quote Post

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

 


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


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