/**

  • @section trace_config 配置说明
  • Trace 分析工具基于 NuttX 的 sched_note 机制实现,其功能启用与行为
  • 主要由 Kconfig 选项控制。根据实际调试需求,可在信息完整度、
  • 运行开销与存储成本之间进行权衡。
  • @subsection trace_config_core 核心配置(必选)
  • 以下配置为启用 Trace 机制的基础条件:
  • @code{.config}
  • CONFIG_SCHED_NOTE=y
  • @endcode
  • 启用 sched_note 基础框架,是所有 Trace 功能的前提。
  • @subsection trace_config_events 事件类型配置
  • Trace 支持对不同类型的系统事件进行独立控制,常见配置如下:
    • 任务调度事件
  • @code{.config}
  • CONFIG_SCHED_NOTE_TASK_SWITCH=y
  • CONFIG_SCHED_NOTE_TASK_START=y
  • CONFIG_SCHED_NOTE_TASK_STOP=y
  • @endcode
  • 用于记录任务创建、切换、退出等调度行为,是调度分析的核心数据来源。
    • 中断事件
  • @code{.config}
  • CONFIG_SCHED_NOTE_IRQ=y
  • @endcode
  • 用于记录 IRQ 进入 / 退出事件,支持中断嵌套与中断时序分析。
    • 系统调用事件
  • @code{.config}
  • CONFIG_SCHED_NOTE_SYSCALL=y
  • @endcode
  • 用于分析系统调用频率与内核路径开销。
    • 临界区与锁相关事件(可选)
  • @code{.config}
  • CONFIG_SCHED_NOTE_CRITSECT=y
  • @endcode
  • 用于分析临界区持续时间与潜在锁竞争问题。
  • @subsection trace_config_buffer 缓冲区与存储配置
  • Trace 数据通常通过 RAM 环形缓冲区进行缓存,以降低运行时开销:
  • @code{.config}
  • CONFIG_DRIVERS_NOTE=y
  • CONFIG_DRIVERS_NOTERAM=y
  • @endcode
  • 启用 NoteRAM 作为 Trace 数据的主要存储后端。
    • NoteRAM 缓冲区大小配置
  • @code{.config}
  • CONFIG_DRIVERS_NOTERAM_BUFSIZE=16384
  • @endcode
  • 缓冲区大小直接影响可保留的 Trace 时间窗口:
    • 较小缓冲区:开销低,适合长期运行
    • 较大缓冲区:信息完整,适合问题复现阶段
  • @subsection trace_config_smp 多核相关配置(SMP / AMP)
  • 在多核系统中,Trace 可记录 CPU ID 信息,用于跨核分析:
  • @code{.config}
  • CONFIG_DRIVERS_NOTE_CPUID=y
  • @endcode
  • 启用后,Trace 事件中将携带 CPU ID 字段,便于区分事件来源核。
  • @subsection trace_config_backend 后端与输出方式
  • Trace 数据可被不同后端工具解析,常见使用方式包括:
    • SystemView / Trace32
  • 通过 RTT / J-Link / Trace32 通道实时导出 Trace 数据。
    • Perfetto / 离线分析
  • 将 NoteRAM 中的数据导出并转换为可视化格式。
  • 后端选择不影响内核侧 Trace 机制,仅影响数据导出方式。
  • @subsection trace_config_recommend 推荐配置组合
    • 调度与时序分析(常用)
  • @code{.config}
  • CONFIG_SCHED_NOTE=y
  • CONFIG_SCHED_NOTE_TASK_SWITCH=y
  • CONFIG_SCHED_NOTE_IRQ=y
  • CONFIG_DRIVERS_NOTERAM=y
  • CONFIG_DRIVERS_NOTERAM_BUFSIZE=16384
  • @endcode
    • 性能与临界区分析
  • @code{.config}
  • CONFIG_SCHED_NOTE=y
  • CONFIG_SCHED_NOTE_TASK_SWITCH=y
  • CONFIG_SCHED_NOTE_CRITSECT=y
  • CONFIG_SCHED_NOTE_SYSCALL=y
  • @endcode
    • 多核调度分析
  • @code{.config}
  • CONFIG_SCHED_NOTE=y
  • CONFIG_DRIVERS_NOTE_CPUID=y
  • @endcode */