查看: 3493|回复: 2

[分享] [LPC55S69] CMBacktrace模块添加和验证

[复制链接]
  • TA的每日心情
    擦汗
    2025-2-21 12:40
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    11

    主题

    1705

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3788
    最后登录
    2025-9-6
    发表于 2023-2-23 22:50:01 | 显示全部楼层 |阅读模式
    本帖最后由 oxlm 于 2023-2-23 22:51 编辑

    背景
            在添加声卡驱动时,突然遇到了一个问题,运行音频测试程序时,往声卡写数据,audio.c在一个微帧处理完后的下一次微帧处理时会报错,报错内容如下:
    1. (queue->magic == DATAQUEUE_MAGIC) assertion failed at function:rt_data_queue_peek, line number:336
    复制代码

            通过查询代码发现,按照正常逻辑,此问题不应该出现。因此怀疑时内存泄漏等原因导致的异常。而按照之前的经验,arm-m核有个很好的跟踪这类问题的工具,cmbacktrace,因此考虑添加该模块做此方面的确认。

    开启步骤
    1 在“\bsp\lpc55sxx\lpc55s69_nxp_evk”目录下打开env
    2. 输入menuconfig,并按enter键
    3. 选中RT-Thread Online packages -->tools packages --> CMBacktrace
    4. 进入CMBacktrace目录,选择1.4.1版(目前github上最新release版)
    5. 保存并退出menuconfig
    6. 编写测试代码
    1. /*
    2. * Copyright (c) 2006-2023, RT-Thread Development Team
    3. * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
    4. *
    5. * SPDX-License-Identifier: Apache-2.0
    6. *
    7. * Change Logs:
    8. * Date           Author       Notes
    9. * 2023-02-23     Liuxiequan   First Version
    10. *
    11. */

    12. #include <rtdevice.h>
    13. #include <stdlib.h>
    14. #include <string.h>

    15. rt_thread_t pthread = RT_NULL;

    16. void test_func(void)
    17. {
    18.     rt_uint8_t test[1024];

    19.     rt_memset(test, 'x', sizeof(test));

    20.     test[1023] = 0x00;

    21.     rt_kprintf("%s\n", test);
    22. }

    23. void test(void *param)
    24. {
    25.     rt_kprintf("test enter\n");
    26.     test_func();
    27.     while (1)
    28.     {
    29.         rt_thread_mdelay(10);      
    30.     }
    31. }

    32. int crash_test(int argc, char **argv)
    33. {
    34.     if (pthread)
    35.     {
    36.         rt_kprintf("thread already created\n");
    37.         return -RT_ERROR;
    38.     }
    39.     pthread = rt_thread_create("crash_test", test, RT_NULL, 512, 20, 10);
    40.     if (pthread)
    41.     {
    42.         rt_thread_startup(pthread);
    43.     }
    44. }

    45. MSH_CMD_EXPORT(crash_test, crash_test)
    复制代码


    7. 运行 “scons --target=mdk5”
    8. 编译并下载验证
    验证结果
    1. msh />crash_test
    2. msh />test enter
    3. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpsr: 0x0100001e
    4. r00: 0x0000000d
    5. r01: 0x78787878
    6. r02: 0x00007878
    7. r03: 0x00000000
    8. r04: 0xdeadbeef
    9. r05: 0xdeadbeef
    10. r06: 0xdeadbeef
    11. r07: 0xdeadbeef
    12. r08: 0xdeadbeef
    13. r09: 0xdeadbeef
    14. r10: 0xdeadbeef
    15. r11: 0xdeadbeef
    16. r12: 0x00000000
    17. lr: 0x000202fd
    18. pc: 0x00020306
    19. hard fault on handler

    20. bus fault:
    21. SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:7878F0F0
    复制代码


    结论
        RTT已经为M33核适配了CMBacktrace,但很遗憾的是,报错仅停留在错误类型,并未指出是什么位置导致的异常。
        在不做继续完善的情况下,可使用该工具做一定程度的协助分析。若需支持异常未知以及前几级的调用链路,可能需要做针对性的适配。

    ~~~~~~~~~~~~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3936

    主题

    7557

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    40196
    最后登录
    2025-9-5
    发表于 2023-2-24 10:36:46 | 显示全部楼层
    晚上这么晚还在搞啊
    qiandao qiandao
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2025-2-21 12:40
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    11

    主题

    1705

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3788
    最后登录
    2025-9-6
     楼主| 发表于 2023-2-24 17:44:59 | 显示全部楼层
    NXP管管 发表于 2023-2-24 10:36
    晚上这么晚还在搞啊

    基本上就是晚上7点搞到9点,然后回去带娃睡觉,娃睡了写总结,然后发出来
    ~~~~~~~~~~~~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 12:08 , Processed in 0.083432 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表