summaryrefslogtreecommitdiff
path: root/Libraries/LTimers/ltimers.c
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-03-03 00:02:25 +0300
committerOxore <oxore@protonmail.com>2023-03-03 00:24:54 +0300
commit2a260911f5abc4e03cb41474a49e01a571395155 (patch)
treea2342b619430d52c06cc90f37ad19b1eba3b7a10 /Libraries/LTimers/ltimers.c
parentd16620e6ba7467e9ef99bf61336ccd8fb4dfd813 (diff)
Remove precious comments, change encoding to utf-8
Diffstat (limited to 'Libraries/LTimers/ltimers.c')
-rw-r--r--Libraries/LTimers/ltimers.c135
1 files changed, 60 insertions, 75 deletions
diff --git a/Libraries/LTimers/ltimers.c b/Libraries/LTimers/ltimers.c
index ccdbf00..61c9e6f 100644
--- a/Libraries/LTimers/ltimers.c
+++ b/Libraries/LTimers/ltimers.c
@@ -1,68 +1,68 @@
-/* ltimers.c
-
-
- . ,
- 1 (
- , 1
- , , . ).
- - ProcessLTimers(),
- . ltimers.h.
- , ,
-, .
- 1 (
- )
- - ProcessLTimers();. #include "ltimers.h"
- , - . ,
- :
-
-StartLTimer ( LTIMER_LED_BLINK ); //
-GetLTimer ( LTIMER_LED_BLINK ); //
-
- :
+/* Описание модуля ltimers.c
+
+ Этот модуль используется для создания неограниченного количества
+программных таймеров для программы. Модуль использует аппаратный таймер,
+который генерирует прерывание каждую 1мс (можно использовать любой другой
+промежуток времени, просто 1 мс это очень удобно и хватает для многих
+программных пауз, задержек, таймеров и тд. в программе).
+В прерывании вызывается ф-я ProcessLTimers(), которая инкрементирует значения
+всех таймеров. Таймеры создаются в файле ltimers.h.
+ Модуль универсален, прост и может использоваться на любой платформе,
+компиляторе, любом МК.
+ Для подключения модуля настройте аппаратный таймер на прерывание в 1мс (или
+любой другой нужный промежуток времени) и добавьте в обработчик прерывания
+этого таймера ф-ю ProcessLTimers();. Затем добавьте #include "ltimers.h" в тот
+файл программы, где будут использоваться ф-ии модуля. Собственно,
+в всего нужны две функции для работы с таймерами:
+
+StartLTimer ( LTIMER_LED_BLINK ); // запустить таймер
+GetLTimer ( LTIMER_LED_BLINK ); // получить текущее значение таймера
+
+ Пример использования:
...
-// ltimers.h ,
-// , MAX_LTIMERS
+// Предварительно ltimers.h создаем перечисление, в котором создаем имена для
+// программных таймеров, а также в конце перечисления всегда MAX_LTIMERS
#include "ltimers.h"
...
int main ()
{
...
- // 1
- InitLTimersHardWare();
+ // Настройка аппаратного таймера на прерывание раз в 1 мс
+ InitLTimersHardWare();
- // ( )
+ // Стартовая инициализация (просто обнуление) всех программных таймеров
InitLTimers ();
-
- //
+
+ // Запускаем таймер
StartLTimer ( LTIMER_LED_BLINK );
- //
+ // Основной цикл программы
while (1)
{
- //
+ // Проверяем значение таймера
if ( GetLTimer ( LTIMER_LED_BLINK ) >= 500 )
{
LED_ON;
- }
+ }
}
-}
+}
-***
+***Примечание
- 1.
-. ,
-8- , , , .
+ 1. Необходимо учитывать разрядность МК и атомарность при проверке значений
+таймера. То есть, если произойдет прерывание в момент проверки полубайтов на
+8-ми разрядном МК, то, возможно, могут быть трудноуловимые глюки.
- 2. , - ProcessLTimers()
- . - StartLTimer
- , ,
- .
-, . .
-.
+ 2. Обратите внимание, что в ф-ии ProcessLTimers() значения таймеров
+инкрементируются постоянно и не перестают изменяться. Ф-я StartLTimer только
+сбрасывает значение таймера в ноль, а потом программа уже ловит тот момент,
+когда это значение превысило или сравнялось с нужным. И когда мы провели
+сравнение, то таймер все равно продолжает маслать. Но это не важно. Пусть себе
+маслает.
- 3. uint32_t
- .
+ 3. Псевдоним для типа uint32_t можно заменить на необходимый в зависимости
+от среды разработки и компилятора.
*/
#include "ltimers.h"
@@ -72,9 +72,9 @@ uint32_t LTimers [MAX_LTIMERS] = { 0 };
// ----------------------------------------------------------------------------
-// .
-// -
-// .
+// Стартовая инициализация всех программных таймеров программиста.
+// Ф-я вызывается при старте МК и просто устанавливает все значения таймеров
+// в ноль.
// ----------------------------------------------------------------------------
void InitLTimers (void)
{
@@ -83,10 +83,10 @@ void InitLTimers (void)
// ----------------------------------------------------------------------------
-// -
-//
-// - LTimerNum_t ltimers.h
-// - , 1
+// Ф-я получения значения программного счетчика
+// Используется программистом для проверки значения запущенного таймера
+// Ф-я принимает имя таймера из перечисления LTimerNum_t в файле ltimers.h
+// Ф-я возвращает значение таймера, которое увеличивается каждую 1мс
// ----------------------------------------------------------------------------
uint32_t GetLTimer ( LTimersNames_t LTimer )
{
@@ -95,9 +95,9 @@ uint32_t GetLTimer ( LTimersNames_t LTimer )
// ----------------------------------------------------------------------------
-// -
-// 1
-// - LTimerNum_t ltimers.h
+// Ф-я запуска программного таймера для использования программистом для
+// любых программных задержек разрешением 1мс
+// Ф-я принимает имя таймера из перечисления LTimerNum_t в файле ltimers.h
// ----------------------------------------------------------------------------
void StartLTimer ( LTimersNames_t LTimer )
{
@@ -106,12 +106,12 @@ void StartLTimer ( LTimersNames_t LTimer )
// ----------------------------------------------------------------------------
-// -, .
-// ltimers.h
-// LTimerNum_t. MAX_LTIMERS
-// .
-// - TIM6_IRQHandler 1 .
-// 1
+// Ф-я, инкрементирующая значения программных таймеров. Количество этих
+// программных таймеров нее ограничено и задается программистом в ltimers.h
+// в тайпдефе LTimerNum_t. Просто дописываем в перечислении перед MAX_LTIMERS
+// имя нового таймера.
+// Вызывается эта ф-я в обреботчике TIM6_IRQHandler каждую 1 мс.
+// 1 мс это удобный квант времени для разных программных задержек
// ----------------------------------------------------------------------------
void ProcessLTimers (void)
{
@@ -120,18 +120,3 @@ void ProcessLTimers (void)
LTimers[i]++;
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-