1 /* 2 * Percepio Trace Recorder for Tracealyzer v4.10.3 3 * Copyright 2023 Percepio AB 4 * www.percepio.com 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 * 8 * The interface for trace utility functions. 9 */ 10 11 #ifndef TRC_UTILITY_H 12 #define TRC_UTILITY_H 13 14 /* These will align a size up or down to a specific alignment */ 15 #define TRC_ALIGN_CEIL(size, alignment) ((((size) + (alignment) - 1) / (alignment)) * (alignment)) 16 #define TRC_ALIGN_FLOOR(size, alignment) (((size) / (alignment)) * (alignment)) 17 18 #ifndef TRC_MEMCPY 19 #define TRC_MEMCPY(dst, src, size) \ 20 { \ 21 uint32_t __i; \ 22 for (__i = 0; __i < size; __i++) { \ 23 ((uint8_t*)(dst))[__i] = ((uint8_t*)(src))[__i]; \ 24 } \ 25 } 26 #endif 27 28 #define TRC_STRCAT(dst, dst_size, pDstLength, src) \ 29 { \ 30 TraceUnsignedBaseType_t uxTRC_STRCAT_INDEX = 0; \ 31 while (*(pDstLength) < (dst_size)) \ 32 { \ 33 dst[*(pDstLength)] = src[uxTRC_STRCAT_INDEX]; \ 34 if (dst[*(pDstLength)] == 0) \ 35 break; \ 36 (*(pDstLength))++; \ 37 uxTRC_STRCAT_INDEX++; \ 38 } \ 39 } 40 #if (defined(TRC_CFG_USE_GCC_STATEMENT_EXPR) && TRC_CFG_USE_GCC_STATEMENT_EXPR == 1) || \ 41 (!defined(TRC_CFG_USE_GCC_STATEMENT_EXPR) && (__GNUC__ || __IAR_SYSTEMS_ICC__ || __TI_ARM__)) 42 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_1(e1) __extension__({e1;}) 43 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(e1, e2) __extension__({e1; e2;}) 44 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3(e1, e2, e3) __extension__({e1; e2; e3;}) 45 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4(e1, e2, e3, e4) __extension__({e1; e2; e3; e4;}) 46 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_5(e1, e2, e3, e4, e5) __extension__({e1; e2; e3; e4; e5;}) 47 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_6(e1, e2, e3, e4, e5, e6) __extension__({e1; e2; e3; e4; e5; e6;}) 48 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_7(e1, e2, e3, e4, e5, e6, e7) __extension__({e1; e2; e3; e4; e5; e6; e7;}) 49 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_8(e1, e2, e3, e4, e5, e6, e7, e8) __extension__({e1; e2; e3; e4; e5; e6; e7; e8;}) 50 #else 51 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_1(e1) (e1) 52 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(e1, e2) (e1, e2) 53 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3(e1, e2, e3) (e1, e2, e3) 54 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4(e1, e2, e3, e4) (e1, e2, e3, e4) 55 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_5(e1, e2, e3, e4, e5) (e1, e2, e3, e4, e5) 56 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_6(e1, e2, e3, e4, e5, e6) (e1, e2, e3, e4, e5, e6) 57 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_7(e1, e2, e3, e4, e5, e6, e7) (e1, e2, e3, e4, e5, e6, e7) 58 #define TRC_COMMA_EXPR_TO_STATEMENT_EXPR_8(e1, e2, e3, e4, e5, e6, e7, e8) (e1, e2, e3, e4, e5, e6, e7, e8) 59 #endif 60 61 #endif /* TRC_UTILITY_H */ 62