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.

trice16.h 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. /*! \file internalTrice16.h
  2. \author thomas.hoehenleitner [at] seerose.net
  3. *******************************************************************************/
  4. #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 16
  5. // #define TRICE_0 TRICE16_0 //!< Default parameter bit width for 0 parameter count TRICE is 16.
  6. #define TRICE_1 TRICE16_1 //!< Default parameter bit width for 1 parameter count TRICE is 16.
  7. #define TRICE_2 TRICE16_2 //!< Default parameter bit width for 2 parameter count TRICE is 16.
  8. #define TRICE_3 TRICE16_3 //!< Default parameter bit width for 3 parameter count TRICE is 16.
  9. #define TRICE_4 TRICE16_4 //!< Default parameter bit width for 4 parameter count TRICE is 16.
  10. #define TRICE_5 TRICE16_5 //!< Default parameter bit width for 5 parameter count TRICE is 16.
  11. #define TRICE_6 TRICE16_6 //!< Default parameter bit width for 6 parameter count TRICE is 16.
  12. #define TRICE_7 TRICE16_7 //!< Default parameter bit width for 7 parameter count TRICE is 16.
  13. #define TRICE_8 TRICE16_8 //!< Default parameter bit width for 8 parameter count TRICE is 16.
  14. #define TRICE_9 TRICE16_9 //!< Default parameter bit width for 9 parameter count TRICE is 16.
  15. #define TRICE_10 TRICE16_10 //!< Default parameter bit width for 10 parameter count TRICE is 16.
  16. #define TRICE_11 TRICE16_11 //!< Default parameter bit width for 11 parameter count TRICE is 16.
  17. #define TRICE_12 TRICE16_12 //!< Default parameter bit width for 12 parameter count TRICE is 16.
  18. // #define trice_0 trice16_0 //!< Default parameter bit width for 0 parameter count trice is 16.
  19. #define trice_1 trice16_1 //!< Default parameter bit width for 1 parameter count trice is 16.
  20. #define trice_2 trice16_2 //!< Default parameter bit width for 2 parameter count trice is 16.
  21. #define trice_3 trice16_3 //!< Default parameter bit width for 3 parameter count trice is 16.
  22. #define trice_4 trice16_4 //!< Default parameter bit width for 4 parameter count trice is 16.
  23. #define trice_5 trice16_5 //!< Default parameter bit width for 5 parameter count trice is 16.
  24. #define trice_6 trice16_6 //!< Default parameter bit width for 6 parameter count trice is 16.
  25. #define trice_7 trice16_7 //!< Default parameter bit width for 7 parameter count trice is 16.
  26. #define trice_8 trice16_8 //!< Default parameter bit width for 8 parameter count trice is 16.
  27. #define trice_9 trice16_9 //!< Default parameter bit width for 9 parameter count trice is 16.
  28. #define trice_10 trice16_10 //!< Default parameter bit width for 10 parameter count trice is 16.
  29. #define trice_11 trice16_11 //!< Default parameter bit width for 11 parameter count trice is 16.
  30. #define trice_12 trice16_12 //!< Default parameter bit width for 12 parameter count trice is 16.
  31. // #define Trice_0 Trice16_0 //!< Default parameter bit width for 0 parameter count Trice is 16.
  32. #define Trice_1 Trice16_1 //!< Default parameter bit width for 1 parameter count Trice is 16.
  33. #define Trice_2 Trice16_2 //!< Default parameter bit width for 2 parameter count Trice is 16.
  34. #define Trice_3 Trice16_3 //!< Default parameter bit width for 3 parameter count Trice is 16.
  35. #define Trice_4 Trice16_4 //!< Default parameter bit width for 4 parameter count Trice is 16.
  36. #define Trice_5 Trice16_5 //!< Default parameter bit width for 5 parameter count Trice is 16.
  37. #define Trice_6 Trice16_6 //!< Default parameter bit width for 6 parameter count Trice is 16.
  38. #define Trice_7 Trice16_7 //!< Default parameter bit width for 7 parameter count Trice is 16.
  39. #define Trice_8 Trice16_8 //!< Default parameter bit width for 8 parameter count Trice is 16.
  40. #define Trice_9 Trice16_9 //!< Default parameter bit width for 9 parameter count Trice is 16.
  41. #define Trice_10 Trice16_10 //!< Default parameter bit width for 10 parameter count Trice is 16.
  42. #define Trice_11 Trice16_11 //!< Default parameter bit width for 11 parameter count Trice is 16.
  43. #define Trice_12 Trice16_12 //!< Default parameter bit width for 12 parameter count Trice is 16.
  44. // #define TRice_0 TRice16_0 //!< Default parameter bit width for 0 parameter count TRice is 16.
  45. #define TRice_1 TRice16_1 //!< Default parameter bit width for 1 parameter count TRice is 16.
  46. #define TRice_2 TRice16_2 //!< Default parameter bit width for 2 parameter count TRice is 16.
  47. #define TRice_3 TRice16_3 //!< Default parameter bit width for 3 parameter count TRice is 16.
  48. #define TRice_4 TRice16_4 //!< Default parameter bit width for 4 parameter count TRice is 16.
  49. #define TRice_5 TRice16_5 //!< Default parameter bit width for 5 parameter count TRice is 16.
  50. #define TRice_6 TRice16_6 //!< Default parameter bit width for 6 parameter count TRice is 16.
  51. #define TRice_7 TRice16_7 //!< Default parameter bit width for 7 parameter count TRice is 16.
  52. #define TRice_8 TRice16_8 //!< Default parameter bit width for 8 parameter count TRice is 16.
  53. #define TRice_9 TRice16_9 //!< Default parameter bit width for 9 parameter count TRice is 16.
  54. #define TRice_10 TRice16_10 //!< Default parameter bit width for 10 parameter count TRice is 16.
  55. #define TRice_11 TRice16_11 //!< Default parameter bit width for 11 parameter count TRice is 16.
  56. #define TRice_12 TRice16_12 //!< Default parameter bit width for 12 parameter count TRice is 16.
  57. #endif // #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 16
  58. #define TRICE_SHORT0(v) TRICE_HTOTS((uint16_t)(v)) //!< TRICE_SHORT0(v) is the 16-bit value v moved to the LLLL position in a 32-bit value 0xHHHH_LLLL.
  59. #define TRICE_SHORT1(v) ((uint32_t)TRICE_HTOTS((uint16_t)(v)) << 16) //!< TRICE_SHORT1(v) is the 16-bit value v moved to the HHHH position in a 32-bit value 0xHHHH_LLLL.
  60. #define TRICE16(tid, fmt, ...) TRICE_CONCAT2(TRICE16_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(tid, fmt, ##__VA_ARGS__)
  61. //! TRICE16_B expects inside pFmt only one format specifier, which is used n times by using pFmt n times.
  62. //! It is usable for showing n 16-bit values.
  63. #define TRICE16_B(id, pFmt, buf, n) \
  64. do { \
  65. TRICE_N(id, pFmt, buf, 2 * n); \
  66. } while (0)
  67. //! TRICE16_F expects inside pFmt just a string which is assumed to be a remote function name.
  68. //! The trice tool displays the pFmt string followed by n times (16-bit value i).
  69. //! The idea behind is to generate an id - function pointer referece list from the generated til.json file to
  70. //! compile it into a remote device and execute the inside pFmt named function remotely.
  71. //! Look for "TRICE16_F example" inside triceCheck.c.
  72. #define TRICE16_F TRICE16_B
  73. #define TRICE_PUT16_1(v0) TRICE_PUT(TRICE_SHORT0(v0));
  74. #define TRICE_PUT16_2(v0, v1) TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1));
  75. #define TRICE_PUT16_3(v0, v1, v2) \
  76. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  77. TRICE_PUT(TRICE_SHORT0(v2));
  78. #define TRICE_PUT16_4(v0, v1, v2, v3) \
  79. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  80. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3));
  81. #define TRICE_PUT16_5(v0, v1, v2, v3, v4) \
  82. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  83. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  84. TRICE_PUT(TRICE_SHORT0(v4));
  85. #define TRICE_PUT16_6(v0, v1, v2, v3, v4, v5) \
  86. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  87. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  88. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5));
  89. #define TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6) \
  90. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  91. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  92. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5)); \
  93. TRICE_PUT(TRICE_SHORT0(v6));
  94. #define TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7) \
  95. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  96. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  97. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5)); \
  98. TRICE_PUT(TRICE_SHORT0(v6) | TRICE_SHORT1(v7));
  99. #define TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8) \
  100. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  101. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  102. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5)); \
  103. TRICE_PUT(TRICE_SHORT0(v6) | TRICE_SHORT1(v7)); \
  104. TRICE_PUT(TRICE_SHORT0(v8));
  105. #define TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
  106. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  107. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  108. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5)); \
  109. TRICE_PUT(TRICE_SHORT0(v6) | TRICE_SHORT1(v7)); \
  110. TRICE_PUT(TRICE_SHORT0(v8) | TRICE_SHORT1(v9));
  111. #define TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
  112. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  113. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  114. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5)); \
  115. TRICE_PUT(TRICE_SHORT0(v6) | TRICE_SHORT1(v7)); \
  116. TRICE_PUT(TRICE_SHORT0(v8) | TRICE_SHORT1(v9)); \
  117. TRICE_PUT(TRICE_SHORT0(v10));
  118. #define TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
  119. TRICE_PUT(TRICE_SHORT0(v0) | TRICE_SHORT1(v1)); \
  120. TRICE_PUT(TRICE_SHORT0(v2) | TRICE_SHORT1(v3)); \
  121. TRICE_PUT(TRICE_SHORT0(v4) | TRICE_SHORT1(v5)); \
  122. TRICE_PUT(TRICE_SHORT0(v6) | TRICE_SHORT1(v7)); \
  123. TRICE_PUT(TRICE_SHORT0(v8) | TRICE_SHORT1(v9)); \
  124. TRICE_PUT(TRICE_SHORT0(v10) | TRICE_SHORT1(v11));
  125. // The following `TRICE` macro definitions uses the C preprocess to concatenate the code behind the sub-macros.
  126. // The sequence `tid` in this context is executable code `id(n)`, `Id(n)` or `ID(n)` defined in trice.h.
  127. // This works only with tid=`id(n)`, `Id(n)`, `ID(n)`.
  128. //! TRICE16_0 writes trice data as fast as possible in a buffer.
  129. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  130. #define TRICE16_0(tid, pFmt) \
  131. TRICE_ENTER tid; \
  132. TRICE_CNTC(0); \
  133. TRICE_LEAVE
  134. //! TRICE16_1 writes trice data as fast as possible in a buffer.
  135. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  136. //! \param v0 a 16 bit value
  137. #define TRICE16_1(tid, pFmt, v0) \
  138. TRICE_ENTER tid; \
  139. TRICE_CNTC(2); \
  140. TRICE_PUT16_1(v0) \
  141. TRICE_LEAVE
  142. //! TRICE16_2 writes trice data as fast as possible in a buffer.
  143. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  144. //! \param v0 - v1 are 16 bit values
  145. #define TRICE16_2(id, pFmt, v0, v1) \
  146. TRICE_ENTER id; \
  147. TRICE_CNTC(4); \
  148. TRICE_PUT16_2(v0, v1); \
  149. TRICE_LEAVE
  150. //! TRICE16_3 writes trice data as fast as possible in a buffer.
  151. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  152. //! \param v0 - v2 are 16 bit values
  153. #define TRICE16_3(id, pFmt, v0, v1, v2) \
  154. TRICE_ENTER id; \
  155. TRICE_CNTC(6); \
  156. TRICE_PUT16_3(v0, v1, v2); \
  157. TRICE_LEAVE
  158. //! TRICE16_4 writes trice data as fast as possible in a buffer.
  159. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  160. //! \param v0 - v3 are 16 bit values
  161. #define TRICE16_4(id, pFmt, v0, v1, v2, v3) \
  162. TRICE_ENTER id; \
  163. TRICE_CNTC(8); \
  164. TRICE_PUT16_4(v0, v1, v2, v3); \
  165. TRICE_LEAVE
  166. //! TRICE16_5 writes trice data as fast as possible in a buffer.
  167. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  168. //! \param v0 - v4 are 16 bit values
  169. #define TRICE16_5(id, pFmt, v0, v1, v2, v3, v4) \
  170. TRICE_ENTER id; \
  171. TRICE_CNTC(10); \
  172. TRICE_PUT16_5(v0, v1, v2, v3, v4); \
  173. TRICE_LEAVE
  174. //! TRICE16_6 writes trice data as fast as possible in a buffer.
  175. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  176. //! \param v0 - v5 are 16 bit values
  177. #define TRICE16_6(id, pFmt, v0, v1, v2, v3, v4, v5) \
  178. TRICE_ENTER id; \
  179. TRICE_CNTC(12); \
  180. TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
  181. TRICE_LEAVE
  182. //! TRICE16_8 writes trice data as fast as possible in a buffer.
  183. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  184. //! \param v0 - v6 are 16 bit values
  185. #define TRICE16_7(id, pFmt, v0, v1, v2, v3, v4, v5, v6) \
  186. TRICE_ENTER id; \
  187. TRICE_CNTC(14); \
  188. TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
  189. TRICE_LEAVE
  190. //! TRICE16_8 writes trice data as fast as possible in a buffer.
  191. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  192. //! \param v0 - v7 are 16 bit values
  193. #define TRICE16_8(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
  194. TRICE_ENTER id; \
  195. TRICE_CNTC(16); \
  196. TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
  197. TRICE_LEAVE
  198. //! TRICE16_8 writes trice data as fast as possible in a buffer.
  199. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  200. //! \param v0 - v7 are 16 bit values
  201. #define TRICE16_9(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
  202. TRICE_ENTER id; \
  203. TRICE_CNTC(18); \
  204. TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
  205. TRICE_LEAVE
  206. //! TRICE16_8 writes trice data as fast as possible in a buffer.
  207. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  208. //! \param v0 - v7 are 16 bit values
  209. #define TRICE16_10(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
  210. TRICE_ENTER id; \
  211. TRICE_CNTC(20); \
  212. TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
  213. TRICE_LEAVE
  214. //! TRICE16_8 writes trice data as fast as possible in a buffer.
  215. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  216. //! \param v0 - v7 are 16 bit values
  217. #define TRICE16_11(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
  218. TRICE_ENTER id; \
  219. TRICE_CNTC(22); \
  220. TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
  221. TRICE_LEAVE
  222. //! TRICE16_12 writes trice data as fast as possible in a buffer.
  223. //! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
  224. //! \param v0 - v11 are 16 bit values
  225. #define TRICE16_12(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
  226. TRICE_ENTER id; \
  227. TRICE_CNTC(24); \
  228. TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
  229. TRICE_LEAVE