1*0561b2d8STREFOU Felix /** 2*0561b2d8STREFOU Felix ****************************************************************************** 3*0561b2d8STREFOU Felix * @file utilities_common.h 4*0561b2d8STREFOU Felix * @author MCD Application Team 5*0561b2d8STREFOU Felix * @brief Common file to utilities 6*0561b2d8STREFOU Felix ****************************************************************************** 7*0561b2d8STREFOU Felix * @attention 8*0561b2d8STREFOU Felix * 9*0561b2d8STREFOU Felix * <h2><center>© Copyright (c) 2019 STMicroelectronics. 10*0561b2d8STREFOU Felix * All rights reserved.</center></h2> 11*0561b2d8STREFOU Felix * 12*0561b2d8STREFOU Felix * This software component is licensed by ST under BSD 3-Clause license, 13*0561b2d8STREFOU Felix * the "License"; You may not use this file except in compliance with the 14*0561b2d8STREFOU Felix * License. You may obtain a copy of the License at: 15*0561b2d8STREFOU Felix * opensource.org/licenses/BSD-3-Clause 16*0561b2d8STREFOU Felix * 17*0561b2d8STREFOU Felix ****************************************************************************** 18*0561b2d8STREFOU Felix */ 19*0561b2d8STREFOU Felix 20*0561b2d8STREFOU Felix 21*0561b2d8STREFOU Felix /* Define to prevent recursive inclusion -------------------------------------*/ 22*0561b2d8STREFOU Felix #ifndef __UTILITIES_COMMON_H 23*0561b2d8STREFOU Felix #define __UTILITIES_COMMON_H 24*0561b2d8STREFOU Felix 25*0561b2d8STREFOU Felix #ifdef __cplusplus 26*0561b2d8STREFOU Felix extern "C" { 27*0561b2d8STREFOU Felix #endif 28*0561b2d8STREFOU Felix 29*0561b2d8STREFOU Felix #include <stdint.h> 30*0561b2d8STREFOU Felix #include <string.h> 31*0561b2d8STREFOU Felix #include <stdio.h> 32*0561b2d8STREFOU Felix #include <stdlib.h> 33*0561b2d8STREFOU Felix #include <stdarg.h> 34*0561b2d8STREFOU Felix 35*0561b2d8STREFOU Felix #include "app_conf.h" 36*0561b2d8STREFOU Felix 37*0561b2d8STREFOU Felix /* -------------------------------- * 38*0561b2d8STREFOU Felix * Basic definitions * 39*0561b2d8STREFOU Felix * -------------------------------- */ 40*0561b2d8STREFOU Felix 41*0561b2d8STREFOU Felix #undef NULL 42*0561b2d8STREFOU Felix #define NULL 0 43*0561b2d8STREFOU Felix 44*0561b2d8STREFOU Felix #undef FALSE 45*0561b2d8STREFOU Felix #define FALSE 0 46*0561b2d8STREFOU Felix 47*0561b2d8STREFOU Felix #undef TRUE 48*0561b2d8STREFOU Felix #define TRUE (!0) 49*0561b2d8STREFOU Felix 50*0561b2d8STREFOU Felix /* -------------------------------- * 51*0561b2d8STREFOU Felix * Critical Section definition * 52*0561b2d8STREFOU Felix * -------------------------------- */ 53*0561b2d8STREFOU Felix #undef BACKUP_PRIMASK 54*0561b2d8STREFOU Felix #define BACKUP_PRIMASK() uint32_t primask_bit= __get_PRIMASK() 55*0561b2d8STREFOU Felix 56*0561b2d8STREFOU Felix #undef DISABLE_IRQ 57*0561b2d8STREFOU Felix #define DISABLE_IRQ() __disable_irq() 58*0561b2d8STREFOU Felix 59*0561b2d8STREFOU Felix #undef RESTORE_PRIMASK 60*0561b2d8STREFOU Felix #define RESTORE_PRIMASK() __set_PRIMASK(primask_bit) 61*0561b2d8STREFOU Felix 62*0561b2d8STREFOU Felix /* -------------------------------- * 63*0561b2d8STREFOU Felix * Macro delimiters * 64*0561b2d8STREFOU Felix * -------------------------------- */ 65*0561b2d8STREFOU Felix #undef M_BEGIN 66*0561b2d8STREFOU Felix #define M_BEGIN do { 67*0561b2d8STREFOU Felix 68*0561b2d8STREFOU Felix #undef M_END 69*0561b2d8STREFOU Felix #define M_END } while(0) 70*0561b2d8STREFOU Felix 71*0561b2d8STREFOU Felix /* -------------------------------- * 72*0561b2d8STREFOU Felix * Some useful macro definitions * 73*0561b2d8STREFOU Felix * -------------------------------- */ 74*0561b2d8STREFOU Felix #undef MAX 75*0561b2d8STREFOU Felix #define MAX( x, y ) (((x)>(y))?(x):(y)) 76*0561b2d8STREFOU Felix 77*0561b2d8STREFOU Felix #undef MIN 78*0561b2d8STREFOU Felix #define MIN( x, y ) (((x)<(y))?(x):(y)) 79*0561b2d8STREFOU Felix 80*0561b2d8STREFOU Felix #undef MODINC 81*0561b2d8STREFOU Felix #define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END 82*0561b2d8STREFOU Felix 83*0561b2d8STREFOU Felix #undef MODDEC 84*0561b2d8STREFOU Felix #define MODDEC( a, m ) M_BEGIN if ((a)==0) (a)=(m); (a)--; M_END 85*0561b2d8STREFOU Felix 86*0561b2d8STREFOU Felix #undef MODADD 87*0561b2d8STREFOU Felix #define MODADD( a, b, m ) M_BEGIN (a)+=(b); if ((a)>=(m)) (a)-=(m); M_END 88*0561b2d8STREFOU Felix 89*0561b2d8STREFOU Felix #undef MODSUB 90*0561b2d8STREFOU Felix #define MODSUB( a, b, m ) MODADD( a, (m)-(b), m ) 91*0561b2d8STREFOU Felix 92*0561b2d8STREFOU Felix #undef ALIGN 93*0561b2d8STREFOU Felix #ifdef WIN32 94*0561b2d8STREFOU Felix #define ALIGN(n) 95*0561b2d8STREFOU Felix #else 96*0561b2d8STREFOU Felix #define ALIGN(n) __attribute__((aligned(n))) 97*0561b2d8STREFOU Felix #endif 98*0561b2d8STREFOU Felix 99*0561b2d8STREFOU Felix #undef PAUSE 100*0561b2d8STREFOU Felix #define PAUSE( t ) M_BEGIN \ 101*0561b2d8STREFOU Felix volatile int _i; \ 102*0561b2d8STREFOU Felix for ( _i = t; _i > 0; _i -- ); \ 103*0561b2d8STREFOU Felix M_END 104*0561b2d8STREFOU Felix #undef DIVF 105*0561b2d8STREFOU Felix #define DIVF( x, y ) ((x)/(y)) 106*0561b2d8STREFOU Felix 107*0561b2d8STREFOU Felix #undef DIVC 108*0561b2d8STREFOU Felix #define DIVC( x, y ) (((x)+(y)-1)/(y)) 109*0561b2d8STREFOU Felix 110*0561b2d8STREFOU Felix #undef DIVR 111*0561b2d8STREFOU Felix #define DIVR( x, y ) (((x)+((y)/2))/(y)) 112*0561b2d8STREFOU Felix 113*0561b2d8STREFOU Felix #undef SHRR 114*0561b2d8STREFOU Felix #define SHRR( x, n ) ((((x)>>((n)-1))+1)>>1) 115*0561b2d8STREFOU Felix 116*0561b2d8STREFOU Felix #undef BITN 117*0561b2d8STREFOU Felix #define BITN( w, n ) (((w)[(n)/32] >> ((n)%32)) & 1) 118*0561b2d8STREFOU Felix 119*0561b2d8STREFOU Felix #undef BITNSET 120*0561b2d8STREFOU Felix #define BITNSET( w, n, b ) M_BEGIN (w)[(n)/32] |= ((U32)(b))<<((n)%32); M_END 121*0561b2d8STREFOU Felix 122*0561b2d8STREFOU Felix /* -------------------------------- * 123*0561b2d8STREFOU Felix * Section attribute * 124*0561b2d8STREFOU Felix * -------------------------------- */ 125*0561b2d8STREFOU Felix #define PLACE_IN_SECTION( __x__ ) __attribute__((section (__x__))) 126*0561b2d8STREFOU Felix 127*0561b2d8STREFOU Felix /* ----------------------------------- * 128*0561b2d8STREFOU Felix * Packed usage (compiler dependent) * 129*0561b2d8STREFOU Felix * ----------------------------------- */ 130*0561b2d8STREFOU Felix #undef PACKED__ 131*0561b2d8STREFOU Felix #undef PACKED_STRUCT 132*0561b2d8STREFOU Felix 133*0561b2d8STREFOU Felix #if defined ( __CC_ARM ) 134*0561b2d8STREFOU Felix #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) 135*0561b2d8STREFOU Felix #define PACKED__ __attribute__((packed)) 136*0561b2d8STREFOU Felix #define PACKED_STRUCT struct PACKED__ 137*0561b2d8STREFOU Felix #else 138*0561b2d8STREFOU Felix #define PACKED__(TYPE) __packed TYPE 139*0561b2d8STREFOU Felix #define PACKED_STRUCT PACKED__(struct) 140*0561b2d8STREFOU Felix #endif 141*0561b2d8STREFOU Felix #elif defined ( __GNUC__ ) 142*0561b2d8STREFOU Felix #define PACKED__ __attribute__((packed)) 143*0561b2d8STREFOU Felix #define PACKED_STRUCT struct PACKED__ 144*0561b2d8STREFOU Felix #elif defined (__ICCARM__) 145*0561b2d8STREFOU Felix #define PACKED_STRUCT __packed struct 146*0561b2d8STREFOU Felix #elif 147*0561b2d8STREFOU Felix #define PACKED_STRUCT __packed struct 148*0561b2d8STREFOU Felix #endif 149*0561b2d8STREFOU Felix 150*0561b2d8STREFOU Felix #ifdef __cplusplus 151*0561b2d8STREFOU Felix } 152*0561b2d8STREFOU Felix #endif 153*0561b2d8STREFOU Felix 154*0561b2d8STREFOU Felix #endif /*__UTILITIES_COMMON_H */ 155*0561b2d8STREFOU Felix 156*0561b2d8STREFOU Felix /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 157