Prusa MINI Firmware overview
macros.h File Reference

Go to the source code of this file.

Macros

#define ABCE   4
 
#define XYZE   4
 
#define ABC   3
 
#define XYZ   3
 
#define XY   2
 
#define _AXIS(A)   (A##_AXIS)
 
#define _XMIN_   100
 
#define _YMIN_   200
 
#define _ZMIN_   300
 
#define _XMAX_   101
 
#define _YMAX_   201
 
#define _ZMAX_   301
 
#define _FORCE_INLINE_   __attribute__((__always_inline__)) __inline__
 
#define FORCE_INLINE   __attribute__((always_inline)) inline
 
#define _UNUSED   __attribute__((unused))
 
#define _O0   __attribute__((optimize("O0")))
 
#define _Os   __attribute__((optimize("Os")))
 
#define _O1   __attribute__((optimize("O1")))
 
#define _O2   __attribute__((optimize("O2")))
 
#define _O3   __attribute__((optimize("O3")))
 
#define UNUSED(x)   ((void)(x))
 
#define CYCLES_PER_MICROSECOND   (F_CPU / 1000000UL)
 
#define NANOSECONDS_PER_CYCLE   (1000000000.0 / F_CPU)
 
#define S_FMT   "%s"
 
#define STRINGIFY_(M)   #M
 
#define STRINGIFY(M)   STRINGIFY_(M)
 
#define A(CODE)   " " CODE "\n\t"
 
#define L(CODE)   CODE ":\n\t"
 
#define _BV(n)   (1<<(n))
 
#define TEST(n, b)   (!!((n)&_BV(b)))
 
#define SET_BIT_TO(N, B, TF)   do{ if (TF) SBI(N,B); else CBI(N,B); }while(0)
 
#define SBI(A, B)   (A |= (1 << (B)))
 
#define CBI(A, B)   (A &= ~(1 << (B)))
 
#define _BV32(b)   (1UL << (b))
 
#define TEST32(n, b)   !!((n)&_BV32(b))
 
#define SBI32(n, b)   (n |= _BV32(b))
 
#define CBI32(n, b)   (n &= ~_BV32(b))
 
#define cu(x)   ((x)*(x)*(x))
 
#define RADIANS(d)   ((d)*float(M_PI)/180.0f)
 
#define DEGREES(r)   ((r)*180.0f/float(M_PI))
 
#define HYPOT2(x, y)   (sq(x)+sq(y))
 
#define CIRCLE_AREA(R)   (float(M_PI) * sq(float(R)))
 
#define CIRCLE_CIRC(R)   (2 * float(M_PI) * float(R))
 
#define SIGN(a)   ((a>0)-(a<0))
 
#define IS_POWER_OF_2(x)   ((x) && !((x) & ((x) - 1)))
 
#define NOLESS(v, n)
 
#define NOMORE(v, n)
 
#define LIMIT(v, n1, n2)
 
#define _DO_1(W, C, A)   (_##W##_1(A))
 
#define _DO_2(W, C, A, B)   (_##W##_1(A) C _##W##_1(B))
 
#define _DO_3(W, C, A, V...)   (_##W##_1(A) C _DO_2(W,C,V))
 
#define _DO_4(W, C, A, V...)   (_##W##_1(A) C _DO_3(W,C,V))
 
#define _DO_5(W, C, A, V...)   (_##W##_1(A) C _DO_4(W,C,V))
 
#define _DO_6(W, C, A, V...)   (_##W##_1(A) C _DO_5(W,C,V))
 
#define _DO_7(W, C, A, V...)   (_##W##_1(A) C _DO_6(W,C,V))
 
#define _DO_8(W, C, A, V...)   (_##W##_1(A) C _DO_7(W,C,V))
 
#define _DO_9(W, C, A, V...)   (_##W##_1(A) C _DO_8(W,C,V))
 
#define _DO_10(W, C, A, V...)   (_##W##_1(A) C _DO_9(W,C,V))
 
#define _DO_11(W, C, A, V...)   (_##W##_1(A) C _DO_10(W,C,V))
 
#define _DO_12(W, C, A, V...)   (_##W##_1(A) C _DO_11(W,C,V))
 
#define __DO_N(W, C, N, V...)   _DO_##N(W,C,V)
 
#define _DO_N(W, C, N, V...)   __DO_N(W,C,N,V)
 
#define DO(W, C, V...)   _DO_N(W,C,NUM_ARGS(V),V)
 
#define _CAT(a, V...)   a##V
 
#define SWITCH_ENABLED_false   0
 
#define SWITCH_ENABLED_true   1
 
#define SWITCH_ENABLED_0   0
 
#define SWITCH_ENABLED_1   1
 
#define SWITCH_ENABLED_0x0   0
 
#define SWITCH_ENABLED_0x1   1
 
#define SWITCH_ENABLED_   1
 
#define _ENA_1(O)   _CAT(SWITCH_ENABLED_, O)
 
#define _DIS_1(O)   !_ENA_1(O)
 
#define ENABLED(V...)   DO(ENA,&&,V)
 
#define DISABLED(V...)   DO(DIS,&&,V)
 
#define ANY(V...)   !DISABLED(V)
 
#define NONE(V...)   DISABLED(V)
 
#define ALL(V...)   ENABLED(V)
 
#define BOTH(V1, V2)   ALL(V1,V2)
 
#define EITHER(V1, V2)   ANY(V1,V2)
 
#define _PINEX_1(PN)   (defined(PN##_PIN) && PN##_PIN >= 0)
 
#define PIN_EXISTS(V...)   DO(PINEX,&&,V)
 
#define ANY_PIN(V...)   DO(PINEX,||,V)
 
#define _BTNEX_1(BN)   (defined(BTN_##BN) && BTN_##BN >= 0)
 
#define BUTTON_EXISTS(V...)   DO(BTNEX,&&,V)
 
#define ANY_BUTTON(V...)   DO(BTNEX,||,V)
 
#define WITHIN(N, L, H)   ((N) >= (L) && (N) <= (H))
 
#define NUMERIC(a)   WITHIN(a, '0', '9')
 
#define DECIMAL(a)   (NUMERIC(a) || a == '.')
 
#define NUMERIC_SIGNED(a)   (NUMERIC(a) || (a) == '-' || (a) == '+')
 
#define DECIMAL_SIGNED(a)   (DECIMAL(a) || (a) == '-' || (a) == '+')
 
#define COUNT(a)   (sizeof(a)/sizeof(*a))
 
#define ZERO(a)   memset(a,0,sizeof(a))
 
#define COPY(a, b)
 
#define LIST_16(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, ...)   A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
 
#define LIST_15(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, ...)   A,B,C,D,E,F,G,H,I,J,K,L,M,N,O
 
#define LIST_14(A, B, C, D, E, F, G, H, I, J, K, L, M, N, ...)   A,B,C,D,E,F,G,H,I,J,K,L,M,N
 
#define LIST_13(A, B, C, D, E, F, G, H, I, J, K, L, M, ...)   A,B,C,D,E,F,G,H,I,J,K,L,M
 
#define LIST_12(A, B, C, D, E, F, G, H, I, J, K, L, ...)   A,B,C,D,E,F,G,H,I,J,K,L
 
#define LIST_11(A, B, C, D, E, F, G, H, I, J, K, ...)   A,B,C,D,E,F,G,H,I,J,K
 
#define LIST_10(A, B, C, D, E, F, G, H, I, J, ...)   A,B,C,D,E,F,G,H,I,J
 
#define LIST_9(A, B, C, D, E, F, G, H, I, ...)   A,B,C,D,E,F,G,H,I
 
#define LIST_8(A, B, C, D, E, F, G, H, ...)   A,B,C,D,E,F,G,H
 
#define LIST_7(A, B, C, D, E, F, G, ...)   A,B,C,D,E,F,G
 
#define LIST_6(A, B, C, D, E, F, ...)   A,B,C,D,E,F
 
#define LIST_5(A, B, C, D, E, ...)   A,B,C,D,E
 
#define LIST_4(A, B, C, D, ...)   A,B,C,D
 
#define LIST_3(A, B, C, ...)   A,B,C
 
#define LIST_2(A, B, ...)   A,B
 
#define LIST_1(A, ...)   A
 
#define _LIST_N(N, V...)   LIST_##N(V)
 
#define LIST_N(N, V...)   _LIST_N(N,V)
 
#define ARRAY_N(N, V...)   { _LIST_N(N,V) }
 
#define _JOIN_1(O)   (O)
 
#define JOIN_N(N, C, V...)   (DO(JOIN,C,LIST_N(N,V)))
 
#define INC_0   1
 
#define INC_1   2
 
#define INC_2   3
 
#define INC_3   4
 
#define INC_4   5
 
#define INC_5   6
 
#define INC_6   7
 
#define INC_7   8
 
#define INC_8   9
 
#define INCREMENT_(n)   INC_##n
 
#define INCREMENT(n)   INCREMENT_(n)
 
#define DEC_1   0
 
#define DEC_2   1
 
#define DEC_3   2
 
#define DEC_4   3
 
#define DEC_5   4
 
#define DEC_6   5
 
#define DEC_7   6
 
#define DEC_8   7
 
#define DEC_9   8
 
#define DECREMENT_(n)   DEC_##n
 
#define DECREMENT(n)   DECREMENT_(n)
 
#define NOOP   (void(0))
 
#define CEILING(x, y)   (((x) + (y) - 1) / (y))
 
#define ABS(a)   ({__typeof__(a) _a = (a); _a >= 0 ? _a : -_a;})
 
#define UNEAR_ZERO(x)   ((x) < 0.000001f)
 
#define NEAR_ZERO(x)   WITHIN(x, -0.000001f, 0.000001f)
 
#define NEAR(x, y)   NEAR_ZERO((x)-(y))
 
#define RECIPROCAL(x)   (NEAR_ZERO(x) ? 0 : (1 / float(x)))
 
#define FIXFLOAT(f)   (f + (f < 0 ? -0.00005f : 0.00005f))
 
#define ATAN2(y, x)   atan2f(y, x)
 
#define POW(x, y)   powf(x, y)
 
#define SQRT(x)   sqrtf(x)
 
#define RSQRT(x)   (1 / sqrtf(x))
 
#define CEIL(x)   ceilf(x)
 
#define FLOOR(x)   floorf(x)
 
#define LROUND(x)   lroundf(x)
 
#define FMOD(x, y)   fmodf(x, y)
 
#define HYPOT(x, y)   SQRT(HYPOT2(x,y))
 
#define I2C_ADDRESS(A)   A
 
#define _NUM_ARGS(_, Z, Y, X, W, V, U, T, S, R, Q, P, O, N, M, L, K, J, I, H, G, F, E, D, C, B, A, OUT, ...)   OUT
 
#define NUM_ARGS(V...)   _NUM_ARGS(0,V,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
 
#define MIN_2(a, b)   ((a)<(b)?(a):(b))
 
#define MIN_3(a, V...)   MIN_2(a,MIN_2(V))
 
#define MIN_4(a, V...)   MIN_2(a,MIN_3(V))
 
#define MIN_5(a, V...)   MIN_2(a,MIN_4(V))
 
#define MIN_6(a, V...)   MIN_2(a,MIN_5(V))
 
#define MIN_7(a, V...)   MIN_2(a,MIN_6(V))
 
#define MIN_8(a, V...)   MIN_2(a,MIN_7(V))
 
#define MIN_9(a, V...)   MIN_2(a,MIN_8(V))
 
#define MIN_10(a, V...)   MIN_2(a,MIN_9(V))
 
#define __MIN_N(N, V...)   MIN_##N(V)
 
#define _MIN_N(N, V...)   __MIN_N(N,V)
 
#define _MIN(V...)   _MIN_N(NUM_ARGS(V), V)
 
#define MAX_2(a, b)   ((a)>(b)?(a):(b))
 
#define MAX_3(a, V...)   MAX_2(a,MAX_2(V))
 
#define MAX_4(a, V...)   MAX_2(a,MAX_3(V))
 
#define MAX_5(a, V...)   MAX_2(a,MAX_4(V))
 
#define MAX_6(a, V...)   MAX_2(a,MAX_5(V))
 
#define MAX_7(a, V...)   MAX_2(a,MAX_6(V))
 
#define MAX_8(a, V...)   MAX_2(a,MAX_7(V))
 
#define MAX_9(a, V...)   MAX_2(a,MAX_8(V))
 
#define MAX_10(a, V...)   MAX_2(a,MAX_9(V))
 
#define __MAX_N(N, V...)   MAX_##N(V)
 
#define _MAX_N(N, V...)   __MAX_N(N,V)
 
#define _MAX(V...)   _MAX_N(NUM_ARGS(V), V)
 

Macro Definition Documentation

◆ ABCE

#define ABCE   4

Marlin 3D Printer Firmware Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]

Based on Sprinter and grbl. Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

◆ XYZE

#define XYZE   4

◆ ABC

#define ABC   3

◆ XYZ

#define XYZ   3

◆ XY

#define XY   2

◆ _AXIS

#define _AXIS (   A)    (A##_AXIS)

◆ _XMIN_

#define _XMIN_   100

◆ _YMIN_

#define _YMIN_   200

◆ _ZMIN_

#define _ZMIN_   300

◆ _XMAX_

#define _XMAX_   101

◆ _YMAX_

#define _YMAX_   201

◆ _ZMAX_

#define _ZMAX_   301

◆ _FORCE_INLINE_

#define _FORCE_INLINE_   __attribute__((__always_inline__)) __inline__

◆ FORCE_INLINE

#define FORCE_INLINE   __attribute__((always_inline)) inline

◆ _UNUSED

#define _UNUSED   __attribute__((unused))

◆ _O0

#define _O0   __attribute__((optimize("O0")))

◆ _Os

#define _Os   __attribute__((optimize("Os")))

◆ _O1

#define _O1   __attribute__((optimize("O1")))

◆ _O2

#define _O2   __attribute__((optimize("O2")))

◆ _O3

#define _O3   __attribute__((optimize("O3")))

◆ UNUSED

#define UNUSED (   x)    ((void)(x))

◆ CYCLES_PER_MICROSECOND

#define CYCLES_PER_MICROSECOND   (F_CPU / 1000000UL)

◆ NANOSECONDS_PER_CYCLE

#define NANOSECONDS_PER_CYCLE   (1000000000.0 / F_CPU)

◆ S_FMT

#define S_FMT   "%s"

◆ STRINGIFY_

#define STRINGIFY_ (   M)    #M

◆ STRINGIFY

#define STRINGIFY (   M)    STRINGIFY_(M)

◆ A

#define A (   CODE)    " " CODE "\n\t"

◆ L

#define L (   CODE)    CODE ":\n\t"

◆ _BV

#define _BV (   n)    (1<<(n))

◆ TEST

#define TEST (   n,
 
)    (!!((n)&_BV(b)))

◆ SET_BIT_TO

#define SET_BIT_TO (   N,
  B,
  TF 
)    do{ if (TF) SBI(N,B); else CBI(N,B); }while(0)

◆ SBI

#define SBI (   A,
 
)    (A |= (1 << (B)))

◆ CBI

#define CBI (   A,
 
)    (A &= ~(1 << (B)))

◆ _BV32

#define _BV32 (   b)    (1UL << (b))

◆ TEST32

#define TEST32 (   n,
 
)    !!((n)&_BV32(b))

◆ SBI32

#define SBI32 (   n,
 
)    (n |= _BV32(b))

◆ CBI32

#define CBI32 (   n,
 
)    (n &= ~_BV32(b))

◆ cu

#define cu (   x)    ((x)*(x)*(x))

◆ RADIANS

#define RADIANS (   d)    ((d)*float(M_PI)/180.0f)

◆ DEGREES

#define DEGREES (   r)    ((r)*180.0f/float(M_PI))

◆ HYPOT2

#define HYPOT2 (   x,
 
)    (sq(x)+sq(y))

◆ CIRCLE_AREA

#define CIRCLE_AREA (   R)    (float(M_PI) * sq(float(R)))

◆ CIRCLE_CIRC

#define CIRCLE_CIRC (   R)    (2 * float(M_PI) * float(R))

◆ SIGN

#define SIGN (   a)    ((a>0)-(a<0))

◆ IS_POWER_OF_2

#define IS_POWER_OF_2 (   x)    ((x) && !((x) & ((x) - 1)))

◆ NOLESS

#define NOLESS (   v,
 
)
Value:
do{ \
__typeof__(n) _n = (n); \
if (_n > v) v = _n; \
}while(0)

◆ NOMORE

#define NOMORE (   v,
 
)
Value:
do{ \
__typeof__(n) _n = (n); \
if (_n < v) v = _n; \
}while(0)

◆ LIMIT

#define LIMIT (   v,
  n1,
  n2 
)
Value:
do{ \
__typeof__(n1) _n1 = (n1); \
__typeof__(n2) _n2 = (n2); \
if (_n1 > v) v = _n1; \
else if (_n2 < v) v = _n2; \
}while(0)

◆ _DO_1

#define _DO_1 (   W,
  C,
  A 
)    (_##W##_1(A))

◆ _DO_2

#define _DO_2 (   W,
  C,
  A,
 
)    (_##W##_1(A) C _##W##_1(B))

◆ _DO_3

#define _DO_3 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_2(W,C,V))

◆ _DO_4

#define _DO_4 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_3(W,C,V))

◆ _DO_5

#define _DO_5 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_4(W,C,V))

◆ _DO_6

#define _DO_6 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_5(W,C,V))

◆ _DO_7

#define _DO_7 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_6(W,C,V))

◆ _DO_8

#define _DO_8 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_7(W,C,V))

◆ _DO_9

#define _DO_9 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_8(W,C,V))

◆ _DO_10

#define _DO_10 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_9(W,C,V))

◆ _DO_11

#define _DO_11 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_10(W,C,V))

◆ _DO_12

#define _DO_12 (   W,
  C,
  A,
  V... 
)    (_##W##_1(A) C _DO_11(W,C,V))

◆ __DO_N

#define __DO_N (   W,
  C,
  N,
  V... 
)    _DO_##N(W,C,V)

◆ _DO_N

#define _DO_N (   W,
  C,
  N,
  V... 
)    __DO_N(W,C,N,V)

◆ DO

#define DO (   W,
  C,
  V... 
)    _DO_N(W,C,NUM_ARGS(V),V)

◆ _CAT

#define _CAT (   a,
  V... 
)    a##V

◆ SWITCH_ENABLED_false

#define SWITCH_ENABLED_false   0

◆ SWITCH_ENABLED_true

#define SWITCH_ENABLED_true   1

◆ SWITCH_ENABLED_0

#define SWITCH_ENABLED_0   0

◆ SWITCH_ENABLED_1

#define SWITCH_ENABLED_1   1

◆ SWITCH_ENABLED_0x0

#define SWITCH_ENABLED_0x0   0

◆ SWITCH_ENABLED_0x1

#define SWITCH_ENABLED_0x1   1

◆ SWITCH_ENABLED_

#define SWITCH_ENABLED_   1

◆ _ENA_1

#define _ENA_1 (   O)    _CAT(SWITCH_ENABLED_, O)

◆ _DIS_1

#define _DIS_1 (   O)    !_ENA_1(O)

◆ ENABLED

#define ENABLED (   V...)    DO(ENA,&&,V)

◆ DISABLED

#define DISABLED (   V...)    DO(DIS,&&,V)

◆ ANY

#define ANY (   V...)    !DISABLED(V)

◆ NONE

#define NONE (   V...)    DISABLED(V)

◆ ALL

#define ALL (   V...)    ENABLED(V)

◆ BOTH

#define BOTH (   V1,
  V2 
)    ALL(V1,V2)

◆ EITHER

#define EITHER (   V1,
  V2 
)    ANY(V1,V2)

◆ _PINEX_1

#define _PINEX_1 (   PN)    (defined(PN##_PIN) && PN##_PIN >= 0)

◆ PIN_EXISTS

#define PIN_EXISTS (   V...)    DO(PINEX,&&,V)

◆ ANY_PIN

#define ANY_PIN (   V...)    DO(PINEX,||,V)

◆ _BTNEX_1

#define _BTNEX_1 (   BN)    (defined(BTN_##BN) && BTN_##BN >= 0)

◆ BUTTON_EXISTS

#define BUTTON_EXISTS (   V...)    DO(BTNEX,&&,V)

◆ ANY_BUTTON

#define ANY_BUTTON (   V...)    DO(BTNEX,||,V)

◆ WITHIN

#define WITHIN (   N,
  L,
 
)    ((N) >= (L) && (N) <= (H))

◆ NUMERIC

#define NUMERIC (   a)    WITHIN(a, '0', '9')

◆ DECIMAL

#define DECIMAL (   a)    (NUMERIC(a) || a == '.')

◆ NUMERIC_SIGNED

#define NUMERIC_SIGNED (   a)    (NUMERIC(a) || (a) == '-' || (a) == '+')

◆ DECIMAL_SIGNED

#define DECIMAL_SIGNED (   a)    (DECIMAL(a) || (a) == '-' || (a) == '+')

◆ COUNT

#define COUNT (   a)    (sizeof(a)/sizeof(*a))

◆ ZERO

#define ZERO (   a)    memset(a,0,sizeof(a))

◆ COPY

#define COPY (   a,
 
)
Value:
do{ \
static_assert(sizeof(a[0]) == sizeof(b[0]), "COPY: '" STRINGIFY(a) "' and '" STRINGIFY(b) "' types (sizes) don't match!"); \
memcpy(&a[0],&b[0],_MIN(sizeof(a),sizeof(b))); \
}while(0)

◆ LIST_16

#define LIST_16 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  P,
  ... 
)    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P

◆ LIST_15

#define LIST_15 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  O,
  ... 
)    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O

◆ LIST_14

#define LIST_14 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  N,
  ... 
)    A,B,C,D,E,F,G,H,I,J,K,L,M,N

◆ LIST_13

#define LIST_13 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  M,
  ... 
)    A,B,C,D,E,F,G,H,I,J,K,L,M

◆ LIST_12

#define LIST_12 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  L,
  ... 
)    A,B,C,D,E,F,G,H,I,J,K,L

◆ LIST_11

#define LIST_11 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  K,
  ... 
)    A,B,C,D,E,F,G,H,I,J,K

◆ LIST_10

#define LIST_10 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  J,
  ... 
)    A,B,C,D,E,F,G,H,I,J

◆ LIST_9

#define LIST_9 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  I,
  ... 
)    A,B,C,D,E,F,G,H,I

◆ LIST_8

#define LIST_8 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  ... 
)    A,B,C,D,E,F,G,H

◆ LIST_7

#define LIST_7 (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  ... 
)    A,B,C,D,E,F,G

◆ LIST_6

#define LIST_6 (   A,
  B,
  C,
  D,
  E,
  F,
  ... 
)    A,B,C,D,E,F

◆ LIST_5

#define LIST_5 (   A,
  B,
  C,
  D,
  E,
  ... 
)    A,B,C,D,E

◆ LIST_4

#define LIST_4 (   A,
  B,
  C,
  D,
  ... 
)    A,B,C,D

◆ LIST_3

#define LIST_3 (   A,
  B,
  C,
  ... 
)    A,B,C

◆ LIST_2

#define LIST_2 (   A,
  B,
  ... 
)    A,B

◆ LIST_1

#define LIST_1 (   A,
  ... 
)    A

◆ _LIST_N

#define _LIST_N (   N,
  V... 
)    LIST_##N(V)

◆ LIST_N

#define LIST_N (   N,
  V... 
)    _LIST_N(N,V)

◆ ARRAY_N

#define ARRAY_N (   N,
  V... 
)    { _LIST_N(N,V) }

◆ _JOIN_1

#define _JOIN_1 (   O)    (O)

◆ JOIN_N

#define JOIN_N (   N,
  C,
  V... 
)    (DO(JOIN,C,LIST_N(N,V)))

◆ INC_0

#define INC_0   1

◆ INC_1

#define INC_1   2

◆ INC_2

#define INC_2   3

◆ INC_3

#define INC_3   4

◆ INC_4

#define INC_4   5

◆ INC_5

#define INC_5   6

◆ INC_6

#define INC_6   7

◆ INC_7

#define INC_7   8

◆ INC_8

#define INC_8   9

◆ INCREMENT_

#define INCREMENT_ (   n)    INC_##n

◆ INCREMENT

#define INCREMENT (   n)    INCREMENT_(n)

◆ DEC_1

#define DEC_1   0

◆ DEC_2

#define DEC_2   1

◆ DEC_3

#define DEC_3   2

◆ DEC_4

#define DEC_4   3

◆ DEC_5

#define DEC_5   4

◆ DEC_6

#define DEC_6   5

◆ DEC_7

#define DEC_7   6

◆ DEC_8

#define DEC_8   7

◆ DEC_9

#define DEC_9   8

◆ DECREMENT_

#define DECREMENT_ (   n)    DEC_##n

◆ DECREMENT

#define DECREMENT (   n)    DECREMENT_(n)

◆ NOOP

#define NOOP   (void(0))

◆ CEILING

#define CEILING (   x,
 
)    (((x) + (y) - 1) / (y))

◆ ABS

#define ABS (   a)    ({__typeof__(a) _a = (a); _a >= 0 ? _a : -_a;})

◆ UNEAR_ZERO

#define UNEAR_ZERO (   x)    ((x) < 0.000001f)

◆ NEAR_ZERO

#define NEAR_ZERO (   x)    WITHIN(x, -0.000001f, 0.000001f)

◆ NEAR

#define NEAR (   x,
 
)    NEAR_ZERO((x)-(y))

◆ RECIPROCAL

#define RECIPROCAL (   x)    (NEAR_ZERO(x) ? 0 : (1 / float(x)))

◆ FIXFLOAT

#define FIXFLOAT (   f)    (f + (f < 0 ? -0.00005f : 0.00005f))

◆ ATAN2

#define ATAN2 (   y,
 
)    atan2f(y, x)

◆ POW

#define POW (   x,
 
)    powf(x, y)

◆ SQRT

#define SQRT (   x)    sqrtf(x)

◆ RSQRT

#define RSQRT (   x)    (1 / sqrtf(x))

◆ CEIL

#define CEIL (   x)    ceilf(x)

◆ FLOOR

#define FLOOR (   x)    floorf(x)

◆ LROUND

#define LROUND (   x)    lroundf(x)

◆ FMOD

#define FMOD (   x,
 
)    fmodf(x, y)

◆ HYPOT

#define HYPOT (   x,
 
)    SQRT(HYPOT2(x,y))

◆ I2C_ADDRESS

#define I2C_ADDRESS (   A)    A

◆ _NUM_ARGS

#define _NUM_ARGS (   _,
  Z,
  Y,
  X,
  W,
  V,
  U,
  T,
  S,
  R,
  Q,
  P,
  O,
  N,
  M,
  L,
  K,
  J,
  I,
  H,
  G,
  F,
  E,
  D,
  C,
  B,
  A,
  OUT,
  ... 
)    OUT

◆ NUM_ARGS

#define NUM_ARGS (   V...)    _NUM_ARGS(0,V,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)

◆ MIN_2

#define MIN_2 (   a,
 
)    ((a)<(b)?(a):(b))

◆ MIN_3

#define MIN_3 (   a,
  V... 
)    MIN_2(a,MIN_2(V))

◆ MIN_4

#define MIN_4 (   a,
  V... 
)    MIN_2(a,MIN_3(V))

◆ MIN_5

#define MIN_5 (   a,
  V... 
)    MIN_2(a,MIN_4(V))

◆ MIN_6

#define MIN_6 (   a,
  V... 
)    MIN_2(a,MIN_5(V))

◆ MIN_7

#define MIN_7 (   a,
  V... 
)    MIN_2(a,MIN_6(V))

◆ MIN_8

#define MIN_8 (   a,
  V... 
)    MIN_2(a,MIN_7(V))

◆ MIN_9

#define MIN_9 (   a,
  V... 
)    MIN_2(a,MIN_8(V))

◆ MIN_10

#define MIN_10 (   a,
  V... 
)    MIN_2(a,MIN_9(V))

◆ __MIN_N

#define __MIN_N (   N,
  V... 
)    MIN_##N(V)

◆ _MIN_N

#define _MIN_N (   N,
  V... 
)    __MIN_N(N,V)

◆ _MIN

#define _MIN (   V...)    _MIN_N(NUM_ARGS(V), V)

◆ MAX_2

#define MAX_2 (   a,
 
)    ((a)>(b)?(a):(b))

◆ MAX_3

#define MAX_3 (   a,
  V... 
)    MAX_2(a,MAX_2(V))

◆ MAX_4

#define MAX_4 (   a,
  V... 
)    MAX_2(a,MAX_3(V))

◆ MAX_5

#define MAX_5 (   a,
  V... 
)    MAX_2(a,MAX_4(V))

◆ MAX_6

#define MAX_6 (   a,
  V... 
)    MAX_2(a,MAX_5(V))

◆ MAX_7

#define MAX_7 (   a,
  V... 
)    MAX_2(a,MAX_6(V))

◆ MAX_8

#define MAX_8 (   a,
  V... 
)    MAX_2(a,MAX_7(V))

◆ MAX_9

#define MAX_9 (   a,
  V... 
)    MAX_2(a,MAX_8(V))

◆ MAX_10

#define MAX_10 (   a,
  V... 
)    MAX_2(a,MAX_9(V))

◆ __MAX_N

#define __MAX_N (   N,
  V... 
)    MAX_##N(V)

◆ _MAX_N

#define _MAX_N (   N,
  V... 
)    __MAX_N(N,V)

◆ _MAX

#define _MAX (   V...)    _MAX_N(NUM_ARGS(V), V)
_MIN
#define _MIN(V...)
Definition: macros.h:333
STRINGIFY
#define STRINGIFY(M)
Definition: macros.h:73
createSpeedLookupTable.a
list a
Definition: createSpeedLookupTable.py:29
createSpeedLookupTable.b
list b
Definition: createSpeedLookupTable.py:30