fault.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * File : fault.c
  3. * This file is part of RT-Thread RTOS
  4. * COPYRIGHT (C) 2009, RT-Thread Development Team
  5. *
  6. * The license and distribution terms for this file may be
  7. * found in the file LICENSE in this distribution or at
  8. * http://www.rt-thread.org/license/LICENSE
  9. *
  10. * Change Logs:
  11. * Date Author Notes
  12. * 2009-01-05 Bernard first version
  13. */
  14. #include <rtthread.h>
  15. struct stack_contex
  16. {
  17. rt_uint32_t r0;
  18. rt_uint32_t r1;
  19. rt_uint32_t r2;
  20. rt_uint32_t r3;
  21. rt_uint32_t r12;
  22. rt_uint32_t lr;
  23. rt_uint32_t pc;
  24. rt_uint32_t psr;
  25. };
  26. extern void rt_hw_interrupt_thread_switch(void);
  27. extern void list_thread(void);
  28. extern rt_thread_t rt_current_thread;
  29. void rt_hw_hard_fault_exception(struct stack_contex* contex)
  30. {
  31. rt_kprintf("psr: 0x%08x\n", contex->psr);
  32. rt_kprintf(" pc: 0x%08x\n", contex->pc);
  33. rt_kprintf(" lr: 0x%08x\n", contex->lr);
  34. rt_kprintf("r12: 0x%08x\n", contex->r12);
  35. rt_kprintf("r03: 0x%08x\n", contex->r3);
  36. rt_kprintf("r02: 0x%08x\n", contex->r2);
  37. rt_kprintf("r01: 0x%08x\n", contex->r1);
  38. rt_kprintf("r00: 0x%08x\n", contex->r0);
  39. rt_kprintf("hard fault on thread: %s\n", rt_current_thread->name);
  40. #ifdef RT_USING_FINSH
  41. list_thread();
  42. #endif
  43. while (1);
  44. }