init commit

сделаны базовые хедеры:
- mylibs_config
- mylibs_defs
- mylibs_include
- trace
- trackers
- bit_access

также сделан модуль general_gpio.c/.h

Но надо проверить переструктуризированные модули

Остальные модули  __general_XXX в целом готовы и как-то работают (на МЗКТЭ) но не структуризированы
This commit is contained in:
2025-10-18 18:27:37 +03:00
commit f61aa1ff0f
304 changed files with 57234 additions and 0 deletions

View 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_