OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3799|回复: 0

硬件中断调试程序求解

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2015-9-1
在线时间
30 小时
发表于 2016-11-7 15:01:11 | 显示全部楼层 |阅读模式
5金钱
这段查找硬件中断原因的代码,下面子函数获取的代码变量各是什么意思呢?(stacked_r0 这些等)
HardFault_Handler\
                PROC
                        IMPORT hard_fault_handler_c
                        TST LR, #4   
                        ITE EQ   
                        MRSEQ R0, MSP   
                        MRSNE R0, PSP   
                        B hard_fault_handler_c   
                ENDP

// hard fault handler in C,   

// with stack frame location as input parameter   

void hard_fault_handler_c(unsigned int * hardfault_args)   

{   
        unsigned int stacked_r0;   
        unsigned int stacked_r1;   
        unsigned int stacked_r2;   
        unsigned int stacked_r3;   
        unsigned int stacked_r12;   
        unsigned int stacked_lr;   
        unsigned int stacked_pc;   
        unsigned int stacked_psr;             

        stacked_r0 = ((unsigned long) hardfault_args[0]);   
        stacked_r1 = ((unsigned long) hardfault_args[1]);   
        stacked_r2 = ((unsigned long) hardfault_args[2]);   
        stacked_r3 = ((unsigned long) hardfault_args[3]);   

        stacked_r12 = ((unsigned long) hardfault_args[4]);   
        stacked_lr = ((unsigned long) hardfault_args[5]);   
        stacked_pc = ((unsigned long) hardfault_args[6]);   
        stacked_psr = ((unsigned long) hardfault_args[7]);   

        printf ("[Hard fault handler]\n");   
        printf ("R0 = %x\n", stacked_r0);   
        printf ("R1 = %x\n", stacked_r1);   
        printf ("R2 = %x\n", stacked_r2);   
        printf ("R3 = %x\n", stacked_r3);   
        printf ("R12 = %x\n", stacked_r12);   
        printf ("LR = %x\n", stacked_lr);   
        printf ("PC = %x\n", stacked_pc);   
        printf ("PSR = %x\n", stacked_psr);   
        printf ("BFAR = %x\n", (*((volatile unsigned long *)(0xE000ED38))));
        printf ("CFSR = %x\n", (*((volatile unsigned long *)(0xE000ED28))));
        printf ("HFSR = %x\n", (*((volatile unsigned long *)(0xE000ED2C))));
        printf ("DFSR = %x\n", (*((volatile unsigned long *)(0xE000ED30))));
        printf ("AFSR = %x\n", (*((volatile unsigned long *)(0xE000ED3C))));
        while(1)
        {
                ;
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 09:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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