fault.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /******************************************************************//**
  2. * @file fault.c
  3. * @brief This file is part of RT-Thread RTOS
  4. * COPYRIGHT (C) 2011, RT-Thread Development Team
  5. * @author Bernard, onelife
  6. * @version 0.4 beta
  7. **********************************************************************
  8. * @section License
  9. * The license and distribution terms for this file may be found in the file LICENSE in this
  10. * distribution or at http://www.rt-thread.org/license/LICENSE
  11. **********************************************************************
  12. * @section Change Logs
  13. * Date Author Notes
  14. * 2009-01-05 Bernard first version
  15. * 2011-02-14 onelife Modify for EFM32
  16. *********************************************************************/
  17. /******************************************************************//**
  18. * @addtogroup cortex-m3
  19. * @{
  20. *********************************************************************/
  21. /* Includes -------------------------------------------------------------------*/
  22. #include <rtthread.h>
  23. /* Private typedef -------------------------------------------------------------*/
  24. struct stack_contex
  25. {
  26. rt_uint32_t r0;
  27. rt_uint32_t r1;
  28. rt_uint32_t r2;
  29. rt_uint32_t r3;
  30. rt_uint32_t r12;
  31. rt_uint32_t lr;
  32. rt_uint32_t pc;
  33. rt_uint32_t psr;
  34. };
  35. /* Private define --------------------------------------------------------------*/
  36. /* Private macro --------------------------------------------------------------*/
  37. /* Private variables ------------------------------------------------------------*/
  38. /* External function prototypes --------------------------------------------------*/
  39. extern void list_thread(void);
  40. extern rt_thread_t rt_current_thread;
  41. /* Private function prototypes ---------------------------------------------------*/
  42. /* Private functions ------------------------------------------------------------*/
  43. void rt_hw_hard_fault_exception(struct stack_contex* contex)
  44. {
  45. rt_kprintf("psr: 0x%08x\n", contex->psr);
  46. rt_kprintf(" pc: 0x%08x\n", contex->pc);
  47. rt_kprintf(" lr: 0x%08x\n", contex->lr);
  48. rt_kprintf("r12: 0x%08x\n", contex->r12);
  49. rt_kprintf("r03: 0x%08x\n", contex->r3);
  50. rt_kprintf("r02: 0x%08x\n", contex->r2);
  51. rt_kprintf("r01: 0x%08x\n", contex->r1);
  52. rt_kprintf("r00: 0x%08x\n", contex->r0);
  53. rt_kprintf("hard fault on thread: %s\n", rt_current_thread->name);
  54. #ifdef RT_USING_FINSH
  55. list_thread();
  56. #endif
  57. while (1);
  58. }
  59. /******************************************************************//**
  60. * @}
  61. *********************************************************************/