You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mcd_cfg.h 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. /*
  2. * Copyright (c) 2025, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2025-08-16 Rbb666 Configuration file for mCoreDump
  9. */
  10. #ifndef __MCD_CFG_H__
  11. #define __MCD_CFG_H__
  12. /*
  13. * ===============================================================
  14. * Operating System Detection and Abstraction Layer
  15. * ===============================================================
  16. */
  17. /* Auto-detect operating system */
  18. #ifdef __RTTHREAD__
  19. #define MCD_OS_RTTHREAD 1
  20. #include <rtthread.h>
  21. #else
  22. #define MCD_OS_BAREMETAL 1
  23. #include <stdint.h>
  24. #include <stdbool.h>
  25. #endif
  26. #define MCD_ALIGN(x, y) (((x - 1) / y + 1) * y)
  27. /*
  28. * ===============================================================
  29. * Print configuration - Printf function abstraction
  30. * ===============================================================
  31. */
  32. /* OS-specific print function abstraction */
  33. #ifdef MCD_OS_RTTHREAD
  34. /* RT-Thread print functions */
  35. #ifndef RT_USING_ULOG
  36. /* Use rt_kprintf directly */
  37. #define mcd_println(...) rt_kprintf(__VA_ARGS__);rt_kprintf("\r\n")
  38. #define mcd_print(...) rt_kprintf(__VA_ARGS__)
  39. #else /* RT_USING_ULOG */
  40. /* Use ulog for unified logging */
  41. #include <ulog.h>
  42. #define MCD_LOG_TAG "mcd"
  43. #define mcd_println(...) ulog_e(MCD_LOG_TAG, __VA_ARGS__);ulog_flush()
  44. #define mcd_print(...) ulog_raw(__VA_ARGS__)
  45. #endif /* RT_USING_ULOG */
  46. #else
  47. /* Bare metal - use standard printf or define custom */
  48. #include <stdio.h>
  49. #define mcd_println(...) printf(__VA_ARGS__);printf("\r\n")
  50. #define mcd_print(...) printf(__VA_ARGS__)
  51. #endif /* MCD_OS_RTTHREAD */
  52. /*
  53. * ===============================================================
  54. * Memory management abstraction
  55. * ===============================================================
  56. */
  57. #ifdef MCD_OS_RTTHREAD
  58. #define mcd_malloc(size) rt_malloc(size)
  59. #define mcd_free(ptr) rt_free(ptr)
  60. #define mcd_memset(ptr, val, size) rt_memset(ptr, val, size)
  61. #define mcd_memcpy(dst, src, size) rt_memcpy(dst, src, size)
  62. #else
  63. /* Standard C library */
  64. #include <stdlib.h>
  65. #include <string.h>
  66. #define mcd_malloc(size) malloc(size)
  67. #define mcd_free(ptr) free(ptr)
  68. #define mcd_memset(ptr, val, size) memset(ptr, val, size)
  69. #define mcd_memcpy(dst, src, size) memcpy(dst, src, size)
  70. #endif
  71. /*
  72. * ===============================================================
  73. * Interrupt control abstraction
  74. * ===============================================================
  75. */
  76. #ifdef MCD_OS_RTTHREAD
  77. typedef rt_base_t mcd_irq_state_t;
  78. #define mcd_irq_disable() rt_hw_interrupt_disable()
  79. #define mcd_irq_enable(state) rt_hw_interrupt_enable(state)
  80. #else
  81. /* Bare metal - define as needed for specific platform */
  82. typedef uint32_t mcd_irq_state_t;
  83. #define mcd_irq_disable() __disable_irq();
  84. #define mcd_irq_enable(state) __enable_irq()
  85. #endif
  86. /*
  87. * ===============================================================
  88. * Command export abstraction
  89. * ===============================================================
  90. */
  91. #ifdef MCD_OS_RTTHREAD
  92. #define MCD_CMD_EXPORT(cmd, desc) MSH_CMD_EXPORT(cmd, desc)
  93. #else
  94. /* Other OS or bare metal */
  95. #define MCD_CMD_EXPORT(cmd, desc) /* No command export */
  96. #endif
  97. /*
  98. * ===============================================================
  99. * Boolean type abstraction
  100. * ===============================================================
  101. */
  102. #ifdef MCD_OS_RTTHREAD
  103. #define mcd_bool_t rt_bool_t
  104. #define MCD_TRUE RT_TRUE
  105. #define MCD_FALSE RT_FALSE
  106. #else
  107. #include <stdbool.h>
  108. #define mcd_bool_t bool
  109. #define MCD_TRUE true
  110. #define MCD_FALSE false
  111. #endif
  112. /*
  113. * ===============================================================
  114. * ASSERT type abstraction
  115. * ===============================================================
  116. */
  117. #ifdef MCD_OS_RTTHREAD
  118. #define mcd_assert(expr) RT_ASSERT(expr)
  119. #else
  120. #include <assert.h>
  121. #define mcd_assert(expr) assert(expr)
  122. #endif /* MCD_OS_RTTHREAD */
  123. /*
  124. * ===============================================================
  125. * Weak attribute abstraction
  126. * ===============================================================
  127. */
  128. #ifdef MCD_OS_RTTHREAD
  129. #ifndef RT_WEAK
  130. #define MCD_WEAK rt_weak
  131. #else
  132. #define MCD_WEAK RT_WEAK
  133. #endif /* RT_WEAK */
  134. #else
  135. /* Standard GCC weak attribute */
  136. #define MCD_WEAK __attribute__((weak))
  137. #endif /* MCD_OS_RTTHREAD */
  138. /*
  139. * ===============================================================
  140. * Floating Point Unit (FPU) configuration
  141. * ===============================================================
  142. */
  143. /* Automatic FPU detection - based on compiler definitions */
  144. #if /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \
  145. /* Clang */ || (defined ( __clang__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) \
  146. /* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \
  147. /* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) )
  148. #define MCD_FPU_SUPPORT 1 /* FPU supported and enabled */
  149. #else
  150. #define MCD_FPU_SUPPORT 0 /* No FPU support */
  151. #endif
  152. /*
  153. * ===============================================================
  154. * Memory configuration
  155. * ===============================================================
  156. */
  157. /* Default memory buffer size (can be overridden by Kconfig) */
  158. #ifndef PKG_MCOREDUMP_MEMORY_SIZE
  159. #define MCD_DEFAULT_MEMORY_SIZE (8 * 1024) /* Default 8KB */
  160. #else
  161. #define MCD_DEFAULT_MEMORY_SIZE PKG_MCOREDUMP_MEMORY_SIZE
  162. #endif /* PKG_MCOREDUMP_MEMORY_SIZE */
  163. /*
  164. * ===============================================================
  165. * Filesystem configuration
  166. * ===============================================================
  167. */
  168. #ifdef PKG_USING_MCOREDUMP_FILESYSTEM
  169. /* Default filesystem settings */
  170. #ifndef PKG_MCOREDUMP_FILESYSTEM_DIR
  171. #define MCD_DEFAULT_COREDUMP_DIR "/sdcard"
  172. #else
  173. #define MCD_DEFAULT_COREDUMP_DIR PKG_MCOREDUMP_FILESYSTEM_DIR
  174. #endif /* PKG_MCOREDUMP_FILESYSTEM_DIR*/
  175. #ifndef PKG_MCOREDUMP_FILESYSTEM_PREFIX
  176. #define MCD_DEFAULT_COREDUMP_PREFIX "core_"
  177. #else
  178. #define MCD_DEFAULT_COREDUMP_PREFIX PKG_MCOREDUMP_FILESYSTEM_PREFIX
  179. #endif /* PKG_MCOREDUMP_FILESYSTEM_PREFIX */
  180. #define MCD_DEFAULT_COREDUMP_EXT ".elf"
  181. #endif /* PKG_USING_MCOREDUMP_FILESYSTEM */
  182. /*
  183. * ===============================================================
  184. * Output mode definitions
  185. * ===============================================================
  186. */
  187. /* Coredump output modes */
  188. typedef enum {
  189. MCD_OUTPUT_SERIAL = 0, /* Output via serial port */
  190. MCD_OUTPUT_MEMORY, /* Store in memory buffer */
  191. MCD_OUTPUT_FILESYSTEM, /* Save to filesystem */
  192. MCD_OUTPUT_FLASH, /* Store in flash (reserved) */
  193. MCD_OUTPUT_FAULT_SERIAL, // 异常时打印到串口
  194. } mcd_output_mode_t;
  195. /* Return codes */
  196. enum {
  197. MCD_ERROR = -1,
  198. MCD_OK = 0,
  199. };
  200. #endif /* __MCD_CFG_H__ */