init commit
сделаны базовые хедеры: - mylibs_config - mylibs_defs - mylibs_include - trace - trackers - bit_access также сделан модуль general_gpio.c/.h Но надо проверить переструктуризированные модули Остальные модули __general_XXX в целом готовы и как-то работают (на МЗКТЭ) но не структуризированы
This commit is contained in:
183
MyLibsGeneral/Inc/mylibs_defs.h
Normal file
183
MyLibsGeneral/Inc/mylibs_defs.h
Normal file
@@ -0,0 +1,183 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file mylibs_defs.h
|
||||
* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral.
|
||||
**************************************************************************
|
||||
* @defgroup MYLIBS_DEFINES General Defines
|
||||
* @ingroup MYLIBS_ALL
|
||||
* @brief Общие макросы и typedef'ы, используемые по всему проекту
|
||||
*
|
||||
*************************************************************************/
|
||||
#ifndef __MYLIBS_DEFINES_H_
|
||||
#define __MYLIBS_DEFINES_H_
|
||||
|
||||
#include "mylibs_config.h"
|
||||
|
||||
/***************************************************************************
|
||||
******************************ERROR_HANDLER********************************/
|
||||
/**
|
||||
* @addtogroup ERROR_HANDLER_DEFINES Error Handler defines
|
||||
* @ingroup MYLIBS_DEFINES
|
||||
* @brief Дефайны для обработки ошибок
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* extern Error_Handler from main.h */
|
||||
extern void Error_Handler(void);
|
||||
|
||||
/**
|
||||
* @brief Error_Handler который будет вызыватся в библиотеке
|
||||
*/
|
||||
#define MyLibs_Error_Handler(params) Error_Handler(params)
|
||||
/* If error handler not defined - set void */
|
||||
#ifndef MyLibs_Error_Handler
|
||||
#define MyLibs_Error_Handler(...)
|
||||
#endif // MyLibs_Error_Handler
|
||||
|
||||
/** @brief Проверить указатель на NULL */
|
||||
#define check_null_ptr_1(_p1_) (_p1_ == NULL)
|
||||
/** @brief Проверить два указателя на NULL */
|
||||
#define check_null_ptr_2(_p1_, _p2_) ((_p1_ == NULL) || (_p2_ == NULL))
|
||||
/** @brief Проверить три указателя на NULL */
|
||||
#define check_null_ptr_3(_p1_, _p2_, _p3_) ((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL))
|
||||
/** @brief Проверить четыре указателя на NULL */
|
||||
#define check_null_ptr_4(_p1_, _p2_, _p3_, _p4_) ((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL) || (_p4_ == NULL))
|
||||
/** @brief Проверить пять указателей на NULL */
|
||||
#define check_null_ptr_5(_p1_, _p2_, _p3_, _p4_, _p5_) ((_p1_ == NULL) || (_p2_ == NULL) || (_p3_ == NULL) || (_p4_ == NULL) || (_p5_ == NULL))
|
||||
|
||||
/** ERROR_HANDLER_DEFINES
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
********************************ACCESS_DEFINES*****************************/
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
******************************DELAYS_DEFINES*******************************/
|
||||
/**
|
||||
* @addtogroup DELAYS_DEFINES Delays defines
|
||||
* @ingroup MYLIBS_DEFINES
|
||||
* @brief Макросы и определения для работы с задержками в миллисекундах.
|
||||
* @details
|
||||
* Этот блок содержит макросы для реализации задержек с использованием HAL или FreeRTOS:
|
||||
* - @ref msDelay — простая задержка заданной длительности;
|
||||
* - @ref msDelayStart — сохранение текущего времени начала задержки;
|
||||
* - @ref msDelayWhileActive — проверка, активна ли задержка;
|
||||
* - @ref msDelayWaitDone — проверка, завершена ли задержка.
|
||||
* Эти макросы удобны для реализации неблокирующих задержек.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @def msDelay(_ms_)
|
||||
* @brief Задержка на указанное количество миллисекунд.
|
||||
* @param _ms_ Время задержки в миллисекундах.
|
||||
* @note Использует HAL_Delay или osDelay в зависимости от @ref FREERTOS_DELAY.
|
||||
*/
|
||||
#ifdef FREERTOS_DELAY
|
||||
#define msDelay(_ms_) osDelay(_ms_)
|
||||
#else
|
||||
#define msDelay(_ms_) HAL_Delay(_ms_)
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* @brief Начать отсчет задержки.
|
||||
* @param _pvar_ Указатель на переменную типа uint32_t для хранения времени старта.
|
||||
* @details После вызова этого макроса переменная _pvar_ содержит текущее количество миллисекунд
|
||||
* с момента запуска системы (HAL_GetTick).
|
||||
*
|
||||
* Используется для реализации неблокирующих задержек.
|
||||
*/
|
||||
#define msDelayStart(_pvar_) *(_pvar_) = HAL_GetTick()
|
||||
|
||||
/**
|
||||
* @brief Проверяет, активна ли задержка.
|
||||
* @param _ms_ Длительность задержки в миллисекундах.
|
||||
* @param _pvar_ Указатель на переменную, в которой сохранено время начала (@ref msDelayStart).
|
||||
* @retval 1 Задержка еще активна.
|
||||
* @retval 0 Задержка завершена.
|
||||
* @details
|
||||
* Возвращает true, пока время задержки не истекло. Используется в проверках,
|
||||
* когда нужно **действовать, пока задержка выполняется**. Пример:
|
||||
* @code
|
||||
* while(msDelayWhileActive(1000, &tick)) {
|
||||
* // выполняем другие задачи, задержка не блокирует поток
|
||||
* }
|
||||
* @endcode
|
||||
*/
|
||||
#define msDelayWhileActive(_ms_, _pvar_) (HAL_GetTick() - *(_pvar_) < _ms_)
|
||||
|
||||
/**
|
||||
* @brief Проверяет, завершилась ли задержка.
|
||||
* @param _ms_ Длительность задержки в миллисекундах.
|
||||
* @param _pvar_ Указатель на переменную, в которой сохранено время начала (msDelayStart).
|
||||
* @retval 1 Задержка завершена.
|
||||
* @retval 0 Задержка еще активна.
|
||||
* @details
|
||||
* Возвращает true, когда задержка уже завершена. Используется в проверках,
|
||||
* когда нужно **выполнить действие только после окончания задержки**. Пример:
|
||||
* @code
|
||||
* if(msDelayWaitDone(1000, &tick)) {
|
||||
* // выполняем действие после завершения задержки
|
||||
* }
|
||||
* @endcode
|
||||
*/
|
||||
#define msDelayWaitDone(_ms_, _pvar_) (HAL_GetTick() - *(_pvar_) >= _ms_)
|
||||
|
||||
/** DELAYS_DEFINES
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*******************************MATH_DEFINES********************************/
|
||||
/**
|
||||
* @addtogroup UTILS_DEFINES Utils defines
|
||||
* @ingroup MYLIBS_DEFINES
|
||||
* @brief Общие вспомогательные макросы
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Обнуление структуры.
|
||||
* @param _struct_ Структура, которую нужно обнулить.
|
||||
* @details Макрос использует memset для обнуления всей памяти структуры.
|
||||
* Используется для быстрой и безопасной инициализации переменных структур до нуля.
|
||||
*/
|
||||
#define ClearStruct(_struct_) memset(&(_struct_), 0, sizeof(_struct_))
|
||||
|
||||
/**
|
||||
* @brief Деление с округлением вверх
|
||||
* @param _val_ Делимое.
|
||||
* @param _div_ Делитель.
|
||||
* @return Результат деления, округленный вверх.
|
||||
* @details Если результат деления без остатка: он возвращается как есть
|
||||
Если с остатком - округляется вверх
|
||||
*/
|
||||
//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */
|
||||
#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */
|
||||
|
||||
/**
|
||||
* @brief Swap between Little Endian and Big Endian
|
||||
* @param v Исходное 16-битное значение.
|
||||
* @return Результат с поменяными местами старшим и младшим байтом.
|
||||
* @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты.
|
||||
*/
|
||||
#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8)))
|
||||
|
||||
/**
|
||||
* @brief Абсолютное значение числа
|
||||
* @param x Число.
|
||||
* @return Абсолютное значение числа x.
|
||||
* @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно.
|
||||
*/
|
||||
#define ABS(x) ( ((x) > 0)? (x) : -(x))
|
||||
|
||||
/** UTILS_DEFINES
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif //__MYLIBS_DEFINES_H_
|
||||
Reference in New Issue
Block a user