<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Программные таймеры. Часть 1</title>
		<description>Discuss Программные таймеры. Часть 1</description>
		<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html</link>
		<lastBuildDate>Wed, 08 Apr 2026 05:41:04 +0000</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="https://chipenable.ru/index.php/component/jcomments/feed/com_k2/28.html" rel="self" type="application/rss+xml" />
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3314</link>
			<description><![CDATA[О недостатках я написал в конце материала. Тогда я подсмотрел это решение в демо программе платы AVR Butterfly, только там не использовалась структура.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Wed, 02 Oct 2013 10:40:55 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3314</guid>
		</item>
		<item>
			<title>Outbreak says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3308</link>
			<description><![CDATA[Как показала практика - реализация методом инкрементирован ия не удачная по нескольким причинам,а именно: 1) повышенный расход ресурсов (инкремент + прерывания); 2) не всегда высокая точность, т.к. прерывание не очень-то хочется делать слишком частыми. Если в качестве таймера использовать таймер RTOS - разрешающая способность выходит ну явно не лучше 1 мс, а скорее даже 5-10. Приведённые расслуждения о точности справедливы только для случая программировани я методом шагового автомата, при этом время для каждой задачи должно быть явно не больше требуемой точности. Достоинства приведённого мною метода: 1) потребление ресурсов на таймер минимально, особенности если используется каскад таймеров с различными периодами в пределах одной функции-проверк и срабатывания одних таймеров можно легко выполнять при срабатывании других. 2) создание таймера - определение одной (счётчик) или двух переменных (счётчик и период, если T = 0, считаем, что таймер не активен; как вариант ещё - счётчик и флаг) в любой точке шагового автомата. Недостатки: 1) для задач предельно жесткого реального времени данный метод не даём существенных преимуществ, т.к. всё равно надо работать в прерывании. 2) можно пропустить момент срабатывания таймера при малых периодах таймера и сложных, не поддающихся переписыванию на шаговый автомат. Кстати, callback-функци и, вызываемые из прерывания - не очень хорошая идея, т.к. подходят только для очень быстрых функций.]]></description>
			<dc:creator>Outbreak</dc:creator>
			<pubDate>Mon, 30 Sep 2013 20:47:43 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3308</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3306</link>
			<description><![CDATA[ну как печально.. как простое решение имеет место быть.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Mon, 30 Sep 2013 18:30:19 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3306</guid>
		</item>
		<item>
			<title>Outbreak says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3305</link>
			<description><![CDATA[Небольшой коментарий к коду: CNT16_EVENT - флаг срабатывания таймера, CNT16_UPDATE - обновление переменной, остальное не важно.]]></description>
			<dc:creator>Outbreak</dc:creator>
			<pubDate>Mon, 30 Sep 2013 13:15:38 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3305</guid>
		</item>
		<item>
			<title>Outbreak says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3304</link>
			<description><![CDATA[Делать набор таймеров методом инкрементирован ия счётчиков - это весьма печально. Существует намного более удобный способ и основан он на обычных мат операциях. Допустим, у нас имеется 16-битный счётчик, не останавливающий ся при переполнении. Известно, что 0x0000 - UINT16MAX = 1. Как только мы решили запустить счётчик, инициализируем соответствующую переменную его значением в текущий момент времени. Дальше в прерывании таймера или в периодически вызываемой функции просто пробегаемся по массиву наших переменных и вычитаем из текущего значения счётчика их величины. Пример релазии для STM32, период таймера 0,5 мс: #define CNT16_GET() (uint16_t)(TIM- >CNT) /*0.5 ms */ #define CNT16_EVENT(_CN T, _MS) ((uint16_t)(CNT 16_GET() - (uint16_t)(_CNT )) > (uint16_t)(2*_M S)) #define CNT16_UPDATE(_C NT) _CNT = CNT16_GET() #define CNT16_DIFF(_CNT 0, _CNT1) (uint16_t)(((ui nt16_t)_CNT0 - (uint16_t)_CNT1 ) >> 1) /*1 ms */ #define CNT16_DIFF_CURR (_CNT) CNT16_DIFF(CNT1 6_GET(), _CNT)]]></description>
			<dc:creator>Outbreak</dc:creator>
			<pubDate>Mon, 30 Sep 2013 13:13:06 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3304</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3096</link>
			<description><![CDATA[Я рад, что материал помог тебе в чем-то разобраться.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sat, 17 Aug 2013 17:20:53 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3096</guid>
		</item>
		<item>
			<title>Илья21 says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3093</link>
			<description><![CDATA[Спасибо тебе большое Pashgan! Без твоих статей я бы не с чем не разобрался]]></description>
			<dc:creator>Илья21</dc:creator>
			<pubDate>Sat, 17 Aug 2013 16:22:16 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-3093</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-1899</link>
			<description><![CDATA[Дистрибутив проекта для WINAVR неправильный. Там тоже самое, что и в IAR.]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Tue, 13 Dec 2011 05:23:17 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-1899</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-1716</link>
			<description><![CDATA[Есть некоторые недостатки, но ученые бьются над ними.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Wed, 21 Sep 2011 20:36:26 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-1716</guid>
		</item>
		<item>
			<title>qwerty says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-1488</link>
			<description><![CDATA[если создать последний таймер большим и периодическим, то предыдущие если они одноразовые, исполнятся и станут не более чем пустой памятью, использовать их нельзя. в целом не очень, даже для новичков.]]></description>
			<dc:creator>qwerty</dc:creator>
			<pubDate>Fri, 13 May 2011 16:05:15 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-1488</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-249</link>
			<description><![CDATA[осталось объявить в этой проге пятый таймер..]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Mon, 15 Mar 2010 22:16:49 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-249</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-185</link>
			<description><![CDATA[Так проще переносить проекты под разные компиляторы.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Sun, 07 Feb 2010 19:55:49 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-185</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-180</link>
			<description><![CDATA[Pashgan, а зачем Вы в проектах на "WinAVR" используете хидер "bits_macros.h" ? Он, на мой взгляд, только больше путает новичков! В WinAVR есть внутр. ф-ция bit_is_clear, созвучная в Вашей из хидера BitIsClear! Да и Ваша "привязана" к порту B.]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Sat, 06 Feb 2010 15:25:43 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-180</guid>
		</item>
		<item>
			<title>Pashgan says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-14</link>
			<description><![CDATA[нет чтоб поддержать .... он сразу в критику пустился. дойдет и до диспетчера дело.]]></description>
			<dc:creator>Pashgan</dc:creator>
			<pubDate>Wed, 04 Nov 2009 01:35:17 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-14</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-13</link>
			<description><![CDATA[вполне имеет право на существование. и вовсе не бесполезно. да и не все программы с диспетчером делаются.]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Tue, 03 Nov 2009 11:38:49 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-13</guid>
		</item>
		<item>
			<title>Guest says:</title>
			<link>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-12</link>
			<description><![CDATA[Программный таймер в такой реализации бесполезен без диспетчера задач. гораздо эффективней при такой организации сделать просто "Системное время" скажем 32байтное, учитывающее каждый такт процессора. И относительно него отслеживать все процессы.]]></description>
			<dc:creator>Guest</dc:creator>
			<pubDate>Tue, 03 Nov 2009 08:06:04 +0000</pubDate>
			<guid>https://chipenable.ru/index.php/programming-avr/item/28-programmnye-taymery-chast-1.html#comment-12</guid>
		</item>
	</channel>
</rss>
