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