217 lines
4.9 KiB
C
217 lines
4.9 KiB
C
|
/*******************************************************************************
|
|||
|
*
|
|||
|
*
|
|||
|
* File: tau_common.h
|
|||
|
* Description ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
|||
|
* Version V0.1
|
|||
|
* Date 2020-09-07
|
|||
|
* Author lzy
|
|||
|
*******************************************************************************/
|
|||
|
|
|||
|
#ifndef __TAU_COMMON_H
|
|||
|
#define __TAU_COMMON_H
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* 1.Included files
|
|||
|
*******************************************************************************/
|
|||
|
#include "stdint.h"
|
|||
|
#include "math.h"
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* 2.Global constant and macro definitions using #define
|
|||
|
*******************************************************************************/
|
|||
|
/**
|
|||
|
* \name ͨ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @{
|
|||
|
*/
|
|||
|
//#define ENABLE 1
|
|||
|
//#define DISABLE 0
|
|||
|
|
|||
|
#define ON 1
|
|||
|
#define OFF 0
|
|||
|
|
|||
|
#define NONE 0
|
|||
|
#define EOS '\0'
|
|||
|
|
|||
|
/*
|
|||
|
#ifndef TRUE
|
|||
|
#define TRUE 1
|
|||
|
#endif
|
|||
|
|
|||
|
#ifndef FALSE
|
|||
|
#define FALSE 0
|
|||
|
#endif
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef __cplusplus
|
|||
|
#define true 1
|
|||
|
#define false 0
|
|||
|
#define bool _Bool
|
|||
|
#endif /* ifndef __cplusplus */
|
|||
|
|
|||
|
#ifndef NULL
|
|||
|
#define NULL ((void *)0)
|
|||
|
#endif
|
|||
|
|
|||
|
#define TAU_LITTLE_ENDIAN 1234 /**< \brief С<><D0A1>ģʽ */
|
|||
|
#define TAU_BIG_ENDIAN 3412 /**< \brief <20><><EFBFBD><EFBFBD>ģʽ */
|
|||
|
|
|||
|
/** @} */
|
|||
|
|
|||
|
/******************************************************************************/
|
|||
|
|
|||
|
/**
|
|||
|
* \name <EFBFBD><EFBFBD><EFBFBD>ú궨<EFBFBD><EFBFBD>
|
|||
|
* @{
|
|||
|
*/
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
#define __I volatile /*!< Defines 'read only' permissions */
|
|||
|
#else
|
|||
|
#define __I volatile const /*!< Defines 'read only' permissions */
|
|||
|
#endif
|
|||
|
#define __O volatile /*!< Defines 'write only' permissions */
|
|||
|
#define __IO volatile /*!< Defines 'read / write' permissions */
|
|||
|
|
|||
|
#define TAU_INLINE inline
|
|||
|
#define TAU_STATIC_INLINE static inline
|
|||
|
#define TAU_STATIC static
|
|||
|
#define TAU_CONST const
|
|||
|
#define TAU_EXTERN extern
|
|||
|
|
|||
|
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
|||
|
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
|||
|
* \attention <EFBFBD><EFBFBD>ͬƽ̨<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>Ա<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* ͬһ<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ƫ<EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \par ʾ<EFBFBD><EFBFBD>
|
|||
|
* \code
|
|||
|
* struct my_struct {
|
|||
|
* int m1;
|
|||
|
* char m2;
|
|||
|
* };
|
|||
|
* int offset_m2;
|
|||
|
*
|
|||
|
* offset_m2 = TAU_OFFSET(struct my_struct, m2);
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_OFFSET(structure, member) ((uint32_t)(&(((structure *)0)->member)))
|
|||
|
|
|||
|
/** @} */
|
|||
|
|
|||
|
/**
|
|||
|
* \brief ͨ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>Ľṹ<EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \param ptr ָ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* \param type <EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* \param member <EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD>иó<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \par ʾ<EFBFBD><EFBFBD>
|
|||
|
* \code
|
|||
|
* struct my_struct = {
|
|||
|
* int m1;
|
|||
|
* char m2;
|
|||
|
* };
|
|||
|
* struct my_struct my_st;
|
|||
|
* char *p_m2 = &my_st.m2;
|
|||
|
* struct my_struct *p_st = TAU_CONTAINER_OF(p_m2, struct my_struct, m2);
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_CONTAINER_OF(ptr, type, member) \
|
|||
|
((type *)((char *)(ptr)-TAU_OFFSET(type, member)))
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>Ĵ<EFBFBD>С
|
|||
|
*
|
|||
|
* \code
|
|||
|
* struct a = {
|
|||
|
* uint32_t m1;
|
|||
|
* uint32_t m2;
|
|||
|
* };
|
|||
|
* int size_m2;
|
|||
|
*
|
|||
|
* size_m2 = TAU_MEMBER_SIZE(a, m2); //size_m2 = 4
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_MEMBER_SIZE(structure, member) (sizeof(((structure *)0)->member))
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \code
|
|||
|
* int a[] = {0, 1, 2, 3};
|
|||
|
* int element_a = TAU_NELEMENTS(a); // element_a = 4
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_NELEMENTS(array) (sizeof(array) / sizeof((array)[0]))
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \param x <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* \param align <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \code
|
|||
|
* int size = TAU_ROUND_UP(15, 4); // size = 16
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_ROUND_UP(x, align) (((int)(x)/(align))*(align) + (((int)(x)%(align)) ? (align) : 0))
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \param x <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* \param align <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \code
|
|||
|
* int size = TAU_ROUND_DOWN(15, 4); // size = 12
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_ROUND_DOWN(x, align) (((int)(x)/(align))*(align))
|
|||
|
|
|||
|
/** \brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define TAU_DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d))
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* \param x <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* \param align <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2<EFBFBD>ij˷<EFBFBD>
|
|||
|
*
|
|||
|
* \code
|
|||
|
* if (TAU_ALIGNED(x, 4) {
|
|||
|
* ; // x<><78><EFBFBD><EFBFBD>
|
|||
|
* } else {
|
|||
|
* ; // x<><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* }
|
|||
|
* \endcode
|
|||
|
*/
|
|||
|
#define TAU_ALIGNED(x, align) (((int)(x) & (align - 1)) == 0)
|
|||
|
|
|||
|
/** \brief <20><>1<EFBFBD>ֽ<EFBFBD>BCD<43><44><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define TAU_BCD_TO_HEX(val) (((val)&0x0f) + ((val) >> 4) * 10)
|
|||
|
|
|||
|
/** \brief <20><>1<EFBFBD>ֽ<EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44><EFBFBD><EFBFBD> */
|
|||
|
#define TAU_HEX_TO_BCD(val) ((((val) / 10) << 4) + (val) % 10)
|
|||
|
|
|||
|
/**
|
|||
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
#define TAU_CEIL(val) ceil(val)
|
|||
|
|
|||
|
|
|||
|
/*! @brief Construct the version number for drivers. */
|
|||
|
#define MAKE_VERSION(major, minor, bugfix) (((major) << 16) | ((minor) << 8) | (bugfix))
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* 3.Global structures, unions and enumerations using typedef
|
|||
|
*******************************************************************************/
|
|||
|
/* \brief ͨ<>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>붨<EFBFBD><EBB6A8> */
|
|||
|
typedef void (*fcb_type)(void *data);
|
|||
|
|
|||
|
#endif /* __TAU_COMMON_H */
|