Percepio Trace Recorder v4.11.0
Loading...
Searching...
No Matches
trcUtility.h
1/*
2* Percepio Trace Recorder for Tracealyzer v4.11.0
3* Copyright 2025 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 */