打印
[STM32F1]

如何根据异常打印的信息回到事发现场

[复制链接]
5318|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsf1048|  楼主 | 2014-12-19 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, pen, se, ps, ST
打印的信息如下:
r00: 0x2000dde8
r01: 0x10000000
r02: 0xf0000000
r03: 0x00000020
r04: 0x68003b90
r05: 0x2000161c
r06: 0x68005740
r07: 0x00000000
r08: 0x00000000
r09: 0x00000002
r10: 0x20001520
r11: 0x68005740
r12: 0x0801ce09
lr: 0x080160cb
pc: 0x080160ca
hard fault on thread: mp3

thread  pri  status      sp     stack size max used   left tick  error
-------- ---- ------- ---------- ---------- ---------- ---------- ---
mp3      0x11 ready   0x00000044 0x00001000 0x0000039c 0x00000020 000
tcpip    0x0c suspend 0x000000dc 0x00001000 0x00000144 0x00000012 000
tshell   0x14 suspend 0x0000008c 0x00001800 0x00000094 0x0000x     00
etx      0x0e suspend 0x00000090 0x00000200 0x00000090 0x00000010 000
erx      0x0e suspend 0x00000094 0x00000200 0x00000094 0x00000010 000
tidle    0x1f ready   0x00000044 0x00000200 0x0000005c 0x0000000a 000
udpserve 0x14 suspend 0x000001d0 0x00000800 0x000001d0 0x00000005 000
led      0x13 ready   0x00000090 0x00000800 0x00000090 0x00000005 -02
key      0x12 ready   0x00000078 0x00000100 0x00000078 0x00000005 -02
init     0x0a close   0x00000068 0x00001000 0x000003a8 0x0000000d 000
bus fault:
SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:68003BB0

沙发
xlsf1048|  楼主 | 2014-12-19 15:14 | 只看该作者
自顶,求助!

使用特权

评论回复
板凳
xlsf1048|  楼主 | 2014-12-19 15:16 | 只看该作者
void rt_hw_hard_fault_exception(struct exception_info * exception_info)
{
    extern long list_thread(void);
        extern int cpuportssockfd;
        extern unsigned char flag_net_ready;
    struct stack_frame* context = &exception_info->stack_frame;

    if (rt_exception_hook != RT_NULL)
    {
        rt_err_t result;

        result = rt_exception_hook(exception_info);
        if (result == RT_EOK)
            return;
    }

    rt_kprintf("psr: 0x%08x\n", context->exception_stack_frame.psr);

    rt_kprintf("r00: 0x%08x\n", context->exception_stack_frame.r0);
    rt_kprintf("r01: 0x%08x\n", context->exception_stack_frame.r1);
    rt_kprintf("r02: 0x%08x\n", context->exception_stack_frame.r2);
    rt_kprintf("r03: 0x%08x\n", context->exception_stack_frame.r3);
    rt_kprintf("r04: 0x%08x\n", context->r4);
    rt_kprintf("r05: 0x%08x\n", context->r5);
    rt_kprintf("r06: 0x%08x\n", context->r6);
    rt_kprintf("r07: 0x%08x\n", context->r7);
    rt_kprintf("r08: 0x%08x\n", context->r8);
    rt_kprintf("r09: 0x%08x\n", context->r9);
    rt_kprintf("r10: 0x%08x\n", context->r10);
    rt_kprintf("r11: 0x%08x\n", context->r11);
    rt_kprintf("r12: 0x%08x\n", context->exception_stack_frame.r12);
    rt_kprintf(" lr: 0x%08x\n", context->exception_stack_frame.lr);
    rt_kprintf(" pc: 0x%08x\n", context->exception_stack_frame.pc);

    if(exception_info->exc_return & (1 << 2) )
    {
        rt_kprintf("hard fault on thread: %s\r\n\r\n", rt_thread_self()->name);

#ifdef RT_USING_FINSH
        list_thread();
#endif /* RT_USING_FINSH */
    }
    else
    {
        rt_kprintf("hard fault on handler\r\n\r\n");
    }

#ifdef RT_USING_FINSH
    hard_fault_track();
#endif /* RT_USING_FINSH */
    while (1);
}
死循环的位置

使用特权

评论回复
地板
airwill| | 2014-12-19 18:32 | 只看该作者
想必楼主是遇到了硬 FAULT 了吧,
你应该首先要做的是, 从堆栈中找到发生 FAULT 异常的代码地址, 然后再从这些内容恢复到寄存器的值去看问题, 还可以参照 Fault 寄存器的值来确定发生异常的原因.
我收藏了一份手册, 上传来跟楼主共同学习.
Hard Fault的诊断.pdf (227.31 KB)

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
xlsf1048 + 3 赞一个!
5
mmuuss586| | 2014-12-19 19:29 | 只看该作者

程序提示硬件仿真出错的话,一般是程序问题,比如中断名;

使用特权

评论回复
6
xlsf1048|  楼主 | 2014-12-22 17:03 | 只看该作者
airwill 发表于 2014-12-19 18:32
想必楼主是遇到了硬 FAULT 了吧,
你应该首先要做的是, 从堆栈中找到发生 FAULT 异常的代码地址, 然后再从 ...

BFSR为0x82,BFAR包含引起总线异常的指令地址,如何根据SCB->BFAR:0x*****来寻址事发现场,通过所得的信息在command上执行,没有跳转到事发现场。新鸟,直接实操,在使用上还是欠缺很大。

使用特权

评论回复
7
xlsf1048|  楼主 | 2014-12-22 17:05 | 只看该作者
mmuuss586 发表于 2014-12-19 19:29
程序提示硬件仿真出错的话,一般是程序问题,比如中断名;

之前在开发板上都可以播放MP3,转到实验板上MP3线程就不行了,DMA方面有没有需要注意的

使用特权

评论回复
8
盘古遗族| | 2015-5-18 13:36 | 只看该作者
airwill 发表于 2014-12-19 18:32
想必楼主是遇到了硬 FAULT 了吧,
你应该首先要做的是, 从堆栈中找到发生 FAULT 异常的代码地址, 然后再从 ...

谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

58

帖子

0

粉丝