Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

triceMcuOrder.h 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*! \file triceMcuOrder.h
  2. \author Thomas.Hoehenleitner [at] seerose.net
  3. *******************************************************************************/
  4. #if !defined(TRICE_HTOTS) && !defined(TRICE_HTOTL) && !defined(TRICE_TTOHS)
  5. #define TRICE_HTOTS(x) ((uint16_t)(x)) //! TRICE_HTOTS reorders short values from host order into trice transfer order.
  6. #define TRICE_HTOTL(x) ((uint32_t)(x)) //! TRICE_HTOTL reorders long values from host order x into trice transfer order.
  7. #define TRICE_TTOHS(x) ((uint16_t)(x)) //! TRICE_TTOHS reorders short values from trice transfer order into host order.
  8. #endif //! defined(TRICE_HTOTS) && !defined(TRICE_HTOTL) && !defined(TRICE_TTOHS)
  9. #if TRICE_TRANSFER_ORDER_IS_BIG_ENDIAN == 0
  10. //! TRICE_PUT16_1616 writes a 16-bit value followed by a 32-bit value in 2 16-bit steps to avoid memory alignment hard fault.
  11. #define TRICE_PUT16_1616(x, ts) /* little endian */ \
  12. do { \
  13. uint16_t* p = (uint16_t*)TriceBufferWritePosition; \
  14. *p++ = x; \
  15. *p++ = ts; /* lo */ \
  16. *p++ = (ts) >> 16; /* hi */ \
  17. TriceBufferWritePosition = (uint32_t*)p; \
  18. } while (0)
  19. #define TRICE_PUT64(x) \
  20. TRICE_PUT((uint32_t)(x)); \
  21. TRICE_PUT((uint32_t)((uint64_t)(x) >> 32)); // little endian
  22. #else // #if TRICE_TRANSFER_ORDER_IS_BIG_ENDIAN == 0
  23. //! TRICE_PUT16_1616 writes a 16-bit value followed by a 32-bit value in 2 16-bit steps to avoid memory alignment hard fault.
  24. #define TRICE_PUT16_1616(x, ts) /* big endian */ \
  25. do { \
  26. uint16_t* p = (uint16_t*)TriceBufferWritePosition; \
  27. *p++ = x; \
  28. *p++ = (ts) >> 16; /* hi */ \
  29. *p++ = ts; /* lo */ \
  30. TriceBufferWritePosition = (uint32_t*)p; \
  31. } while (0)
  32. #define TRICE_PUT64(x) \
  33. TRICE_PUT((uint64_t)(x) >> 32); \
  34. TRICE_PUT((uint32_t)(x)); // big endian
  35. #endif // #else // #if TRICE_TRANSFER_ORDER_IS_BIG_ENDIAN == 0