Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. /*! \file Trice8.h
  2. \author thomas.hoehenleitner [at] seerose.net
  3. *******************************************************************************/
  4. #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 8
  5. // #define TRICE_0 TRICE8_0 //!< Default parameter bit width for 0 parameter count TRICE is 8.
  6. #define TRICE_1 TRICE8_1 //!< Default parameter bit width for 1 parameter count TRICE is 8.
  7. #define TRICE_2 TRICE8_2 //!< Default parameter bit width for 2 parameter count TRICE is 8.
  8. #define TRICE_3 TRICE8_3 //!< Default parameter bit width for 3 parameter count TRICE is 8.
  9. #define TRICE_4 TRICE8_4 //!< Default parameter bit width for 4 parameter count TRICE is 8.
  10. #define TRICE_5 TRICE8_5 //!< Default parameter bit width for 5 parameter count TRICE is 8.
  11. #define TRICE_6 TRICE8_6 //!< Default parameter bit width for 6 parameter count TRICE is 8.
  12. #define TRICE_7 TRICE8_7 //!< Default parameter bit width for 7 parameter count TRICE is 8.
  13. #define TRICE_8 TRICE8_8 //!< Default parameter bit width for 8 parameter count TRICE is 8.
  14. #define TRICE_9 TRICE8_9 //!< Default parameter bit width for 9 parameter count TRICE is 8.
  15. #define TRICE_10 TRICE8_10 //!< Default parameter bit width for 10 parameter count TRICE is 8.
  16. #define TRICE_11 TRICE8_11 //!< Default parameter bit width for 11 parameter count TRICE is 8.
  17. #define TRICE_12 TRICE8_12 //!< Default parameter bit width for 12 parameter count TRICE is 8.
  18. // #define trice_0 trice8_0 //!< Default parameter bit width for 0 parameter count trice is 8.
  19. #define trice_1 trice8_1 //!< Default parameter bit width for 1 parameter count trice is 8.
  20. #define trice_2 trice8_2 //!< Default parameter bit width for 2 parameter count trice is 8.
  21. #define trice_3 trice8_3 //!< Default parameter bit width for 3 parameter count trice is 8.
  22. #define trice_4 trice8_4 //!< Default parameter bit width for 4 parameter count trice is 8.
  23. #define trice_5 trice8_5 //!< Default parameter bit width for 5 parameter count trice is 8.
  24. #define trice_6 trice8_6 //!< Default parameter bit width for 6 parameter count trice is 8.
  25. #define trice_7 trice8_7 //!< Default parameter bit width for 7 parameter count trice is 8.
  26. #define trice_8 trice8_8 //!< Default parameter bit width for 8 parameter count trice is 8.
  27. #define trice_9 trice8_9 //!< Default parameter bit width for 9 parameter count trice is 8.
  28. #define trice_10 trice8_10 //!< Default parameter bit width for 10 parameter count trice is 8.
  29. #define trice_11 trice8_11 //!< Default parameter bit width for 11 parameter count trice is 8.
  30. #define trice_12 trice8_12 //!< Default parameter bit width for 12 parameter count trice is 8.
  31. // #define Trice_0 Trice8_0 //!< Default parameter bit width for 1 parameter count Trice is 8.
  32. #define Trice_1 Trice8_1 //!< Default parameter bit width for 1 parameter count Trice is 8.
  33. #define Trice_2 Trice8_2 //!< Default parameter bit width for 2 parameter count Trice is 8.
  34. #define Trice_3 Trice8_3 //!< Default parameter bit width for 3 parameter count Trice is 8.
  35. #define Trice_4 Trice8_4 //!< Default parameter bit width for 4 parameter count Trice is 8.
  36. #define Trice_5 Trice8_5 //!< Default parameter bit width for 5 parameter count Trice is 8.
  37. #define Trice_6 Trice8_6 //!< Default parameter bit width for 6 parameter count Trice is 8.
  38. #define Trice_7 Trice8_7 //!< Default parameter bit width for 7 parameter count Trice is 8.
  39. #define Trice_8 Trice8_8 //!< Default parameter bit width for 8 parameter count Trice is 8.
  40. #define Trice_9 Trice8_9 //!< Default parameter bit width for 9 parameter count Trice is 8.
  41. #define Trice_10 Trice8_10 //!< Default parameter bit width for 10 parameter count Trice is 8.
  42. #define Trice_11 Trice8_11 //!< Default parameter bit width for 11 parameter count Trice is 8.
  43. #define Trice_12 Trice8_12 //!< Default parameter bit width for 12 parameter count Trice is 8.
  44. // #define TRice_0 TRice8_0 //!< Default parameter bit width for 1 parameter count TRice is 8.
  45. #define TRice_1 TRice8_1 //!< Default parameter bit width for 1 parameter count TRice is 8.
  46. #define TRice_2 TRice8_2 //!< Default parameter bit width for 2 parameter count TRice is 8.
  47. #define TRice_3 TRice8_3 //!< Default parameter bit width for 3 parameter count TRice is 8.
  48. #define TRice_4 TRice8_4 //!< Default parameter bit width for 4 parameter count TRice is 8.
  49. #define TRice_5 TRice8_5 //!< Default parameter bit width for 5 parameter count TRice is 8.
  50. #define TRice_6 TRice8_6 //!< Default parameter bit width for 6 parameter count TRice is 8.
  51. #define TRice_7 TRice8_7 //!< Default parameter bit width for 7 parameter count TRice is 8.
  52. #define TRice_8 TRice8_8 //!< Default parameter bit width for 8 parameter count TRice is 8.
  53. #define TRice_9 TRice8_9 //!< Default parameter bit width for 9 parameter count TRice is 8.
  54. #define TRice_10 TRice8_10 //!< Default parameter bit width for 10 parameter count TRice is 8.
  55. #define TRice_11 TRice8_11 //!< Default parameter bit width for 11 parameter count TRice is 8.
  56. #define TRice_12 TRice8_12 //!< Default parameter bit width for 12 parameter count TRice is 8.
  57. #endif // #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 8
  58. //! TRICE8 inlining code for up to 12 8-bit parameters.
  59. #define TRICE8(tid, fmt, ...) TRICE_CONCAT2(TRICE8_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(tid, fmt, ##__VA_ARGS__)
  60. //! TRICE8_B expects inside pFmt only one format specifier, which is used n times by using pFmt n times.
  61. //! It is usable for showing n 8-bit values.
  62. #define TRICE8_B TRICE_N
  63. //! TRICE8_F expects inside pFmt just a string which is assumed to be a remote function name.
  64. //! \li The trice tool displays the pFmt string followed by n times (value i).
  65. //! \li The idea behind is to generate an id - function pointer referece list from the generated til.json file to compile it into a remote device and execute the inside pFmt named function remotely.
  66. //! \li Look for "TRICE8_F example" inside triceCheck.c.
  67. //! Look for "TRICE8_F example" inside triceCheck.c.
  68. #define TRICE8_F TRICE8_B
  69. #define TRICE_BYTE0(v) ((uint8_t)(v)) //!< TRICE_BYTE0(v) is the 8-bit value v moved to the LL position in a 32-bit value 0xHH_HL_LH_LL.
  70. #define TRICE_BYTE1(v) (0x0000FF00 & ((uint32_t)(v) << 8)) //!< TRICE_BYTE1(v) is the 8-bit value v moved to the LH position in a 32-bit value 0xHH_HL_LH_LL.
  71. #define TRICE_BYTE2(v) (0x00FF0000 & ((uint32_t)(v) << 16)) //!< TRICE_BYTE2(v) is the 8-bit value v moved to the HL position in a 32-bit value 0xHH_HL_LH_LL.
  72. #define TRICE_BYTE3(v) ((uint32_t)(v) << 24) //!< TRICE_BYTE3(v) is the 8-bit value v moved to the HH position in a 32-bit value 0xHH_HL_LH_LL.
  73. //! TRICE_PUT8_1 transfers a single 8-bit parameter value to the Trice buffer.
  74. #define TRICE_PUT8_1(v0) TRICE_PUT(TRICE_BYTE0(v0));
  75. #define TRICE_PUT8_2(v0, v1) TRICE_PUT(TRICE_BYTE1(v1) | TRICE_BYTE0(v0));
  76. #define TRICE_PUT8_3(v0, v1, v2) TRICE_PUT(TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0));
  77. #define TRICE_PUT8_4(v0, v1, v2, v3) TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0));
  78. #define TRICE_PUT8_5(v0, v1, v2, v3, v4) \
  79. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  80. TRICE_PUT(TRICE_BYTE0(v4));
  81. #define TRICE_PUT8_6(v0, v1, v2, v3, v4, v5) \
  82. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  83. TRICE_PUT(TRICE_BYTE1(v5) | TRICE_BYTE0(v4));
  84. #define TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6) \
  85. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  86. TRICE_PUT(TRICE_BYTE2(v6) | TRICE_BYTE1(v5) | TRICE_BYTE0(v4));
  87. #define TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7) \
  88. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  89. TRICE_PUT(TRICE_BYTE3(v7) | TRICE_BYTE2(v6) | TRICE_BYTE1(v5) | TRICE_BYTE0(v4));
  90. #define TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8) \
  91. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  92. TRICE_PUT(TRICE_BYTE3(v7) | TRICE_BYTE2(v6) | TRICE_BYTE1(v5) | TRICE_BYTE0(v4)); \
  93. TRICE_PUT(TRICE_BYTE0(v8));
  94. #define TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
  95. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  96. TRICE_PUT(TRICE_BYTE3(v7) | TRICE_BYTE2(v6) | TRICE_BYTE1(v5) | TRICE_BYTE0(v4)); \
  97. TRICE_PUT(TRICE_BYTE1(v9) | TRICE_BYTE0(v8));
  98. #define TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
  99. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  100. TRICE_PUT(TRICE_BYTE3(v7) | TRICE_BYTE2(v6) | TRICE_BYTE1(v5) | TRICE_BYTE0(v4)); \
  101. TRICE_PUT(TRICE_BYTE2(v10) | TRICE_BYTE1(v9) | TRICE_BYTE0(v8));
  102. #define TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
  103. TRICE_PUT(TRICE_BYTE3(v3) | TRICE_BYTE2(v2) | TRICE_BYTE1(v1) | TRICE_BYTE0(v0)); \
  104. TRICE_PUT(TRICE_BYTE3(v7) | TRICE_BYTE2(v6) | TRICE_BYTE1(v5) | TRICE_BYTE0(v4)); \
  105. TRICE_PUT(TRICE_BYTE3(v11) | TRICE_BYTE2(v10) | TRICE_BYTE1(v9) | TRICE_BYTE0(v8));
  106. // The following `TRICE` macro definitions are using the C preprocess to concatenate the code behind the sub-macros.
  107. // The sequence `tid` in this context is executable code `id(n)`, `Id(n)` or `ID(n)` defined in trice.h.
  108. // This works only with tid=`id(n)`, `Id(n)`, `ID(n)`.
  109. //! TRICE8_0 writes trice data as fast as possible in a buffer.
  110. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  111. #define TRICE8_0(tid, pFmt) \
  112. TRICE_ENTER tid; \
  113. TRICE_CNTC(0); \
  114. TRICE_LEAVE
  115. //! TRICE8_1 writes trice data as fast as possible in a buffer.
  116. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  117. //! \param v0 a 8 bit bit value
  118. #define TRICE8_1(tid, pFmt, v0) \
  119. TRICE_ENTER tid; \
  120. TRICE_CNTC(1); \
  121. TRICE_PUT8_1(v0) \
  122. TRICE_LEAVE
  123. //! TRICE8_2 writes trice data as fast as possible in a buffer.
  124. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  125. //! \param v0 - v1 are 8 bit bit values
  126. #define TRICE8_2(tid, pFmt, v0, v1) \
  127. TRICE_ENTER tid; \
  128. TRICE_CNTC(2); \
  129. TRICE_PUT8_2(v0, v1); \
  130. TRICE_LEAVE
  131. //! TRICE8_3 writes trice data as fast as possible in a buffer.
  132. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  133. //! \param v0 - v2 are 8 bit bit values
  134. #define TRICE8_3(tid, pFmt, v0, v1, v2) \
  135. TRICE_ENTER tid; \
  136. TRICE_CNTC(3); \
  137. TRICE_PUT8_3(v0, v1, v2); \
  138. TRICE_LEAVE
  139. //! TRICE8_4 writes trice data as fast as possible in a buffer.
  140. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  141. //! \param v0 - v3 are 8 bit bit values
  142. #define TRICE8_4(tid, pFmt, v0, v1, v2, v3) \
  143. TRICE_ENTER tid; \
  144. TRICE_CNTC(4); \
  145. TRICE_PUT8_4(v0, v1, v2, v3); \
  146. TRICE_LEAVE
  147. //! TRICE8_5 writes trice data as fast as possible in a buffer.
  148. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  149. //! \param v0 - v4 are 8 bit bit values
  150. #define TRICE8_5(tid, pFmt, v0, v1, v2, v3, v4) \
  151. TRICE_ENTER tid; \
  152. TRICE_CNTC(5); \
  153. TRICE_PUT8_5(v0, v1, v2, v3, v4); \
  154. TRICE_LEAVE
  155. //! TRICE8_6 writes trice data as fast as possible in a buffer.
  156. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  157. //! \param v0 - v5 are 8 bit bit values
  158. #define TRICE8_6(tid, pFmt, v0, v1, v2, v3, v4, v5) \
  159. TRICE_ENTER tid; \
  160. TRICE_CNTC(6); \
  161. TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
  162. TRICE_LEAVE
  163. //! TRICE8_8 writes trice data as fast as possible in a buffer.
  164. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  165. //! \param v0 - v6 are 8 bit bit values
  166. #define TRICE8_7(tid, pFmt, v0, v1, v2, v3, v4, v5, v6) \
  167. TRICE_ENTER tid; \
  168. TRICE_CNTC(7); \
  169. TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
  170. TRICE_LEAVE
  171. //! TRICE8_8 writes trice data as fast as possible in a buffer.
  172. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  173. //! \param v0 - v7 are 8 bit bit values
  174. #define TRICE8_8(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
  175. TRICE_ENTER tid; \
  176. TRICE_CNTC(8); \
  177. TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
  178. TRICE_LEAVE
  179. //! TRICE8_8 writes trice data as fast as possible in a buffer.
  180. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  181. //! \param v0 - v7 are 8 bit bit values
  182. #define TRICE8_9(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
  183. TRICE_ENTER tid; \
  184. TRICE_CNTC(9); \
  185. TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
  186. TRICE_LEAVE
  187. //! TRICE8_8 writes trice data as fast as possible in a buffer.
  188. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  189. //! \param v0 - v7 are 8 bit bit values
  190. #define TRICE8_10(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
  191. TRICE_ENTER tid; \
  192. TRICE_CNTC(10); \
  193. TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
  194. TRICE_LEAVE
  195. //! TRICE8_8 writes trice data as fast as possible in a buffer.
  196. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  197. //! \param v0 - v7 are 8 bit bit values
  198. #define TRICE8_11(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
  199. TRICE_ENTER tid; \
  200. TRICE_CNTC(11); \
  201. TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
  202. TRICE_LEAVE
  203. //! TRICE8_12 writes trice data as fast as possible in a buffer.
  204. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  205. //! \param v0 - v11 are 8 bit bit values
  206. #define TRICE8_12(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
  207. TRICE_ENTER tid; \
  208. TRICE_CNTC(12); \
  209. TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
  210. TRICE_LEAVE