RT-Thread论坛
直播中

ejlwj

9年用户 979经验值
擅长:处理器/DSP
私信 关注
[问答]

rtthread 5.20 安装 systemview 2.52a 出错的原因?

在 SEGGER_SYSVIEW_RTThread.c中

  • Info.sName = thread->name;


提示

  • packages/SystemView-v2.52a/SystemView_Src/Config/SEGGER_SYSVIEW_RTThread.c(73): error: no member named 'name' in 'struct rt_thread'



  • thread = rt_list_entry(node, struct rt_thread, list);



回帖(1)

石玉兰

2025-9-19 17:42:39

在 RT-Thread 5.2.0 中使用 SystemView 2.52a 时出现 no member named 'name' in 'struct rt_thread' 错误的原因是 RT-Thread 线程结构体成员名称已更新。以下是详细分析和解决方案:


问题原因:


RT-Thread 5.2.0 中线程结构体 struct rt_thread 的成员名称发生了变化:



  • 旧版本:直接使用 name 成员(如 thread->name

  • 新版本:线程名称位于 parent 子结构体中(thread->parent.name


SystemView 2.52a 的适配文件 SEGGER_SYSVIEW_RTThread.c 仍在使用旧版 API,导致编译错误。




解决方案:


修改 SEGGER_SYSVIEW_RTThread.c 文件中的线程名称引用:


步骤 1:定位错误代码


在文件中找到类似以下代码(通常在 _cbSendSystemDesc() 函数中):


// 旧代码 (出错行)
Info.sName = thread->name;

步骤 2:修改为 RT-Thread 5.x 的新成员


// 新代码 (RT-Thread 5.2.0+ 适用)
Info.sName = thread->parent.name;

步骤 3:全局检查


搜索文件中所有 thread->name 的引用,替换为 thread->parent.name(通常需要修改 2-3 处)。




其他注意事项:




  1. 兼容性调整


    // 可选:添加宏定义兼容不同版本
    #if RTTHREAD_VERSION >= 0x50000
    #define THREAD_NAME(thread) thread->parent.name
    #else
    #define THREAD_NAME(thread) thread->name
    #endif

    // 使用方式
    Info.sName = THREAD_NAME(thread);



  2. 头文件依赖
    确保包含 RT-Thread 核心头文件:


    #include 



  3. SystemView 更新
    建议升级到更高版本 SystemView(查看 SEGGER 官网),新版可能已兼容 RT-Thread 5.x。




  4. 线程名长度
    RT-Thread 线程名长度默认为 8 字节(RT_NAME_MAX),如需显示更长名称需修改 RT-Thread 配置。






通过以上修改,SystemView 即可正确获取线程名称并适配 RT-Thread 5.2.0。修改后重新编译工程即可解决该错误。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分