pokk 0 17 июня, 2018 Опубликовано 17 июня, 2018 · Жалоба Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.html Только максимальное значение миллисекунд, которое можно задать зависит от таймера. А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 июня, 2018 Опубликовано 18 июня, 2018 (изменено) · Жалоба Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ 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); } Изменено 18 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 июня, 2018 Опубликовано 18 июня, 2018 · Жалоба А почему SysTick не используете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 20 июня, 2018 Опубликовано 20 июня, 2018 · Жалоба У Kinetis есть аппаратный таймер (FlexTimer Module (FTM)) 16 бит - это дает нам 65536 милисекунд до переполнения что конечно очень мало для нормальной работы. Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 20 июня, 2018 Опубликовано 20 июня, 2018 · Жалоба В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь (; Впрочем, ТС сознался, что был не прав. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июня, 2018 Опубликовано 21 июня, 2018 (изменено) · Жалоба А почему SysTick не используете? объяснил это в первом посте. Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC. у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду. В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь то же самое - у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду. Впрочем, ТС сознался, что был не прав. долгие годы игры в покер научили меня вовремя скидывать слабую руку. Изменено 21 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба у него нет пределителя Вы опять за старое. У него есть период, и за счет периода вы создадите 1 мс. С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++. Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба Вы опять за старое. У него есть период, и за счет периода вы создадите 1 мс. С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++. Писал же ТС, что у него сейчас так и есть, но он не хочет раз в 1 мс падать в прерывание, а хочет сделать аппаратный миллисекундный таймер. у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду.vs16 бит - это дает нам 65536 милисекунд до переполнениякак это? 16 битный таймер дает переполнение через 65536 милисекунд, но тик у этого таймера не равен 1 мс??? Проблема решена, и слава богу!!! ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба ТС не умеет задавать такое значение в SysTick таймер, чтобы тот перезагружался с периодом 1 мс. Учиться, учиться и еще раз... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июня, 2018 Опубликовано 21 июня, 2018 (изменено) · Жалоба Вы опять за старое. У него есть период, и за счет периода вы создадите 1 мс. С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++. Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые? вы вообще читали тему? первый мой пост? ради чего была создана тема? Я НЕ ХОЧУ ГЕНЕРИРОВАТЬ ПРЕРЫВАНИЯ КАЖДУЮ МИЛЛИСЕКУНДУ. все. эту руку я сбрасываю. Изменено 21 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба То есть, мои аргументы, что вы теряете 0.03% производительности, вам не понять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба То есть, мои аргументы, что вы теряете 0.03% производительности, вам не понять? да хрен с ней спроизводительностью. хоть 5%. дело не в ней. у меня бегут важные таски. критические можно сказать. и я не хочу прерывать их каждую миллисекунду.может ничего страшного не произойдет. но зачем мне дополнительные, неоправданные как я считаю, риски? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба Я НЕ ХОЧУ ГЕНЕРИРОВАТЬ ПРЕРЫВАНИЯ КАЖДУЮ МИЛЛИСЕКУНДУ. Вы можете объяснить почему? Это вполне естественная вещь для МК, но вы категорически ее отвергаете. Вы бы поменьше секретничали, а то нам в соседних ветках достается, что за вас додумывают недосказанное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 17 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба Вы можете объяснить почему?зачем это объяснять? ТС и так уже всё объяснил. У меня было такое.... сделал таймер с тиком в 1 мс и отрубил прерывания. Полностью аппаратный миллисекундный таймер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 июня, 2018 Опубликовано 21 июня, 2018 · Жалоба А через каждые 10 мс прерываться рискнете? Тоже нормальный период для RTOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться