MyLibs 1.0
Расширенные библиотеки для STM32
Loading...
Searching...
No Matches
trackers.h
Go to the documentation of this file.
1/**
2**************************************************************************
3* @file trackers.h
4* @brief Заголочный файл для работы с трекерами @ref TRACKERS.
5**************************************************************************
6* @addtogroup TRACKERS Trackers defines
7* @ingroup MYLIBS_DEFINES
8* @brief Дефайны для работы с трекерами
9* @details
10Есть дефайн для объявления структуры трекера: TrackerTypeDef(num_user_vars).
11Структура состоит из следующих элементов:
12- cnt_ok
13- cnt_err
14- cnt_warn
15- user[num_user_vars]
16Также есть ряд функций (дефайнов) для обращения к элементам этой структуры.
17
18
19Если трекеры @ref TRACKERS_ENABLE отключены, то все дефайны определяются как ничего
20и на производительность кода не влияют
21
22@par Пример:
23
24Определяем typedef трекера измерений Measure_TrackerTypeDef
25
26@verbatim
27 typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef;
28@endverbatim
29
30И через @ref Measure_TrackerTypeDef структура подключается в другие структуры
31
32Для работы с структурой можно использовать функции:
33- Для получения значения:
34 - TrackerGet_Ok()
35 - TrackerGet_Err()
36 - TrackerGet_Warn()
37 - TrackerGet_User(n)
38
39- Для записи значения:
40 - TrackerCnt_Ok()
41 - TrackerCnt_Err()
42 - TrackerCnt_Warn()
43 - TrackerCnt_User()
44 - TrackerWrite_User(n)
45
46- Для очищения значения:
47 - TrackerClear_All()
48 - TrackerClear_Ok()
49 - TrackerClear_Err()
50 - TrackerClear_Warn()
51 - TrackerClear_User(n)
52 - TrackerClear_UserAll()
53* @{
54*************************************************************************/
55#ifndef __TRACKERS_H_
56#define __TRACKERS_H_
57#include "mylibs_defs.h"
58
59#ifdef TRACKERS_ENABLE
60 /**
61 * @brief Структура для счетчиков отладки
62 * @param num_user_vars - количество пользовательских переменных
63 * @details Содержит счетчик для успешных событый (cnt_ok),
64 * счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn).
65 *
66 * Также есть возможность объявить пользовательские переменные в
67 * количестве <num_user_vars> штук.
68 */
69 #define TrackerTypeDef(num_user_vars) \
70 struct \
71 { \
72 uint32_t cnt_ok; \
73 uint32_t cnt_err; \
74 uint32_t cnt_warn; \
75 uint32_t user[num_user_vars]; \
76 }
77
78 /** @brief Получить количетство пользовательских переменных */
79 #define num_of_usercnts(_user_) (sizeof(_user_) / sizeof(uint32_t))
80 /** @brief Проверка существует ли указанная пользовательская переменная */
81 #define assert_usertracker(_cntstruct_, _uservarnumb_) ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user))
82 /** @brief Условие для проверки существует ли указанная пользовательская переменная */
83 #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(assert_usertracker(_cntstruct_, _uservarnumb_))
84 /** @brief Тернарный оператор для проверки существует ли указанная пользовательская переменная */
85 #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) (assert_usertracker(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0
86
87
88 /** @brief Считать счетчик успешных событий */
89 #define TrackerGet_Ok(_cntstruct_) (_cntstruct_).cnt_ok
90 /** @brief Считать счетчик ошибок */
91 #define TrackerGet_Err(_cntstruct_) (_cntstruct_).cnt_err
92 /** @brief Считать счетчик предупреждений */
93 #define TrackerGet_Warn(_cntstruct_) (_cntstruct_).cnt_warn
94 /**
95 * @brief Считать пользовательскую переменную
96 * @note Здесь нет проверки - существует ли пользовательская переменная!
97 * Есть возможность выйти за границы структуры!!!
98 * Чтобы этого избежать можно использовать дефайн #ref assert_usertracker()
99 @verbatim
100 if(assert_usertracker(struct, 0)) {
101 TrackerGet_User(struct, 0)
102 }
103 @endverbatim
104 */
105 #define TrackerGet_User(_cntstruct_, _uservarnumb_) (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)]
106
107
108
109 /** @brief Инкрементирование счетчика успешных событий */
110 #define TrackerCnt_Ok(_cntstruct_) (_cntstruct_).cnt_ok++
111 /** @brief Инкрементирование счетчика ошибок */
112 #define TrackerCnt_Err(_cntstruct_) (_cntstruct_).cnt_err++
113 /** @brief Инкрементирование счетчика предупреждений */
114 #define TrackerCnt_Warn(_cntstruct_) (_cntstruct_).cnt_warn++
115 /** @brief Инкрементирование пользовательской переменной */
116 #define TrackerCnt_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++;
117 /** @brief Запись числа в пользовательскую переменную */
118 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_)
119
120 /** @brief Очистка всей структуры */
121 #define TrackerClear_All(_cntstruct_) memset(&(_cntstruct_), 0, sizeof(_cntstruct_))
122 /** @brief Очистка счетчика успешных событий */
123 #define TrackerClear_Ok(_cntstruct_) (_cntstruct_).cnt_ok = 0
124 /** @brief Очистка счетчика ошибок */
125 #define TrackerClear_Err(_cntstruct_) (_cntstruct_).cnt_err = 0
126 /** @brief Очистка счетчика предупреждений */
127 #define TrackerClear_Warn(_cntstruct_) (_cntstruct_).cnt_warn = 0
128 /** @brief Очистка пользовательской переменной */
129 #define TrackerClear_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0;
130 /** @brief Очистка всех пользовательских переменных */
131 #define TrackerClear_UserAll(_cntstruct_) memset(&(_cntstruct_).user, 0, sizeof((_cntstruct_).user))
132
133#else //TRACKERS_ENABLE
134
135 #define TrackerTypeDef(num_user_vars) void *
136
137 #define num_of_usercnts(_user_)
138 #define assert_tracecnt(_cntstruct_, _uservarnumb_)
139
140 #define TrackerCnt_Ok(_cntstruct_)
141 #define TrackerCnt_Err(_cntstruct_)
142 #define TrackerCnt_Warn(_cntstruct_)
143 #define TrackerCnt_User(_cntstruct_, _uservarnumb_)
144 #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)
145
146 /** @brief Очистка всей структуры */
147 #define TrackerClear_All(_cntstruct_)
148 #define TrackerClear_Ok(_cntstruct_)
149 #define TrackerClear_Err(_cntstruct_)
150 #define TrackerClear_Warn(_cntstruct_)
151 #define TrackerClear_User(_cntstruct_)
152 #define TrackerClear_UserAll(_cntstruct_)
153
154#endif //TRACKERS_ENABLE
155
156#endif //__TRACKERS_H_
Заголочный файл для дефайнов библиотеки MyLibsGeneral.