/** ************************************************************************** * @file mylibs_defs.h * @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral. ************************************************************************** * @defgroup MYLIBS_DEFINES My Libs defines * @brief Базовые дефайны для всего проекта * *************************************************************************/ #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); /* Define error handler for MyLibs */ #define MyLibs_Error_Handler(_params_) Error_Handler(_params_) /* If error handler not defined - set void */ #ifndef MyLibs_Error_Handler #define ((void)0U) #endif // MyLibs_Error_Handler /** ERROR_HANDLER_DEFINES * @} */ /*************************************************************************** ********************************ACCESS_DEFINES*****************************/ #define ClearStruct(_struct_) memset(&(_struct_), 0, sizeof(_struct_)) /*************************************************************************** ******************************DELAYS_DEFINES*******************************/ /** * @addtogroup DELAYS_DEFINES Delays defines * @ingroup MYLIBS_DEFINES * @brief Дефайны для реализации задержек @{ */ #ifdef FREERTOS_DELAY #define msDelay(_ms_) osDelay(_ms_) #else #define msDelay(_ms_) if(_ms_ != 0) HAL_Delay(_ms_-1) #endif /** DELAYS_DEFINES * @} */ /*************************************************************************** *******************************MATH_DEFINES********************************/ /** * @addtogroup MATH_DEFINES Math defines * @ingroup MYLIBS_DEFINES * @brief Дефайны для различных математических функций @{ */ /** * @brief Calc dividing including remainder * @param _val_ - делимое. * @param _div_ - делитель. * @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 - Переменная для свапа. * @return v (new) - Свапнутая переменная. * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты. */ #define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8))) /** * @brief Absolute * @param x - Переменная для модудя. * @return x (new) - Число по модулю. * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно. */ #define ABS(x) ( ((x) > 0)? (x) : -(x))? /** MATH_DEFINES * @} */ #endif //__MYLIBS_DEFINES_H_