Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CmBacktrace
STM32F407
已解决CmBacktrace不能打印栈信息的问题
发布于 2022-07-04 18:02:15 浏览:1887
订阅该版
[tocm] 之前发了一篇提问帖[CmBacktrace打印hardfault信息时提示栈溢出,无法完全打印](https://club.rt-thread.org/ask/question/e8ce659474215e14.html "CmBacktrace打印hardfault信息时提示栈溢出,无法完全打印"),也没有获得想要的结果。后面经过一番折腾,用了另外一种方式解决了。如下: ###开发环境 * 硬件平台:正点原子F407开发板 * 软件版本:rtt 4.1.0 * IDE:keil * demo:使用rtt固件包里的stm32f407-atk-explorer分支配合CmBacktrace里rtt平台的example ### 初始移植 一开始按照demo里给的方式,先初始化Cmbacktrace,然后注册异常钩子函数,在钩子函数里执行cm_backtrace_fault函数,然后在另外一个线程里执行除零操作。当程序运行起来,串口就会打印如下信息。 ```c msh />thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- sys_moni 30 running 0x00000048 0x00000800 04% 0x00000005 000 tshell 20 suspend 0x00000094 0x00001000 03% 0x00000009 000 tcp_clie 5 suspend 0x00000160 0x00000800 17% 0x00000000 000 phy 30 suspend 0x00000094 0x00000400 14% 0x00000002 000 tcpip 10 suspend 0x000000c8 0x00000400 20% 0x00000014 000 etx 12 suspend 0x00000098 0x00000400 14% 0x00000010 000 erx 12 suspend 0x00000098 0x00000400 14% 0x00000010 000 sys work 23 suspend 0x00000060 0x00000800 04% 0x0000000a 000 tidle0 31 ready 0x00000054 0x00000400 09% 0x0000000a 000 main 10 suspend 0x0000009c 0x00000800 33% 0x00000007 000 Firmware name: CmBacktrace, hardware version: V1.0.0, software version: V0.1.0 Fault on thread sys_moni Error: Thread stack(20000d00) was overflow ===== Thread stack information ===== ==================================== Usage fault is caused by Indicates a divide by zero has taken place (can be set only if DIV_0_TRP is set) Dump call stack has an error ``` #从这段信息看,并不能找到异常发生时栈的使用情况。找了一圈没找到原因。 ###再次移植 于是又把cmbacktrace的demo移植到裸机和ucosii平台都调通了。这时我就想了下这几个demo的区别,发现调通的这两个平台是用的cmb_fault.s里的的Hard_Fault函数,这个函数如下: ```c HardFault_Handler PROC MOV r0, lr ; get lr MOV r1, sp ; get stack pointer (current is MSP) BL cm_backtrace_fault ``` 于是我把rtt里的Hard_Fault注释掉,也使用cmb_fault.s里的这个Hard_Fault,并注释掉异常钩子函数,程序居然可以正常打印栈里面的信息了。至此算是成功把cmbacktrace成功移植到rtt平台了。 ###疑问 为什么使用cmbacktrace里的rtt平台的demo没跑通?demo里在异常钩子函数里执行cm_backtrace_fault为什么这么写没看明白,还请大佬们帮忙解释下。 ```c static rt_err_t exception_hook(void *context) { extern long list_thread(void); uint8_t _continue = 1; rt_enter_critical(); #ifdef RT_USING_FINSH list_thread(); #endif cm_backtrace_fault(*((uint32_t *)(cmb_get_sp() + sizeof(uint32_t) * 8)), cmb_get_sp() + sizeof(uint32_t) * 9); while (_continue == 1); return RT_EOK; } ```
7
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
wcyingdream
这家伙很懒,什么也没写!
文章
1
回答
3
被采纳
0
关注TA
发私信
相关文章
1
STM32F407 enable ethernet driver
2
F407使用QEMU调试网络功能报错,附Cm_backtrace信息
3
tm32f407-atk-explorer这个BSP中,1M外置的SRAM
4
串口怎样接收int类型数据?
5
F407无法使用RTC,手册上的RTC实验例程跑不通。请各位不吝赐教!
6
CAN不能推出休眠模式
7
ENV配置Lwip后不能将包跟新到本地?
8
程序跳转出问题,怀疑rtt有指定地址的函数
9
rtthread3.1.2中使用env建立的工程需还需要修改什么东西吗
10
在STM32F407跟着教程制作新bsp后 ,程序运行卡死
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部