Panchip Cop.

查看: 663|回复: 0

PAN1080 : 线程堆栈溢出问题分析

[复制链接]

8

主题

52

帖子

1万

积分

磐启员工

Rank: 7Rank: 7Rank: 7

积分
10799
发表于 2024-12-2 17:48:34 | 显示全部楼层 |阅读模式
在zephyr系统中,应用层有时存在多个线程运行的情况,如果某个线程堆栈分配内存比较小,可能存在溢出的风险。
直接的表现就是“HARD FAULT” (如果看门狗开了就会复位)
分析流程: 在配置文件(prj.conf)里面打开LOG输出,加入下面两条指令
默认你的串口已经打开,如果没有请设置对应的配置,另外开了看门狗的话也先关闭
CONFIG_LOG=y  
CONFIG_LOG_DEFAULT_LEVEL=1


然后编译烧录后观察异常后,串口有没有打印hard fault相关信息,我这个线程堆栈溢出的信息如下:
[17:30:03.447]收←◆[00:00:14.024,000] <err> os: ***** HARD FAULT *****
[00:00:14.024,000] <err> os: ARCH_EXCEPT with reason 2

[00:00:14.024,000] <err> os: r0/a1:  0x00000002  r1/a2:  0x000f0758  r2/a3:  0xf0f0f0f0
[00:00:14.024,000] <err> os: r3/a4:  0x200085f8 r12/ip:  0x0003b401 r14/lr:  0x0003b417
[00:00:14.024,000] <err> os:  xpsr:  0x0100001d
[00:00:14.024,000] <err> os: Faulting instruction address (r15/pc): 0x000453e0
[00:00:14.024,000] <err> os: >>> ZEPHYR FATAL ERROR 2: Stack overflow on CPU 0
[00:00:14.024,000] <err> os: Fault during interrupt handling

[00:00:14.024,000] <err> os: Current thread: 0x200038a0 (unknown)
[00:00:14.086,000] <err> os: Halting system



从上面信息可以看到异常的原因是“tack overflow”, 并且当前的线程位于“ 0x200038a0 ”。
异常的线程信息我们可以从工程编译后输出目录中的zephyr.map文件中找到。
(使用我们ZAL工具的“Open  Output Folder” 按钮可以直接跳转到输出目录,具体目录位于 01_SDK\build\工程名\zephyr)


具体每个线程的栈资源应该设置多大,可以参考这个文档进行测试
https://docs.panchip.com/pan1080dk-doc/latest/docs-zdk/04_dev_guides/zephyr_ram_analysis_guidance.html






回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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