Trackdown the exceptions in MQX

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Trackdown the exceptions in MQX

Trackdown the exceptions in MQX

When working on Cortex-M4 platform, an exception which has not been expected (an interrupt without ISR, an access to an illegal address, etc).

The code below shows how to implement it.

static void expt_frm_dump(pointer ext_frm_ptr)

{

  static char *expt_name[] = {

    "None",

    "Reset",

    "NMI",

    "HardFault",

    "MemManage",

    "BusFault",

    "UsageFault",

    "Rsvd",

    "Rsvd",

    "Rsvd",

    "SVCall",

    "Debug Monitor",

    "Rsvd",

    "PendSV",

    "SysTick"

  };

  uint_32 excpt_num = __get_PSR() & 0x1FF;

  printf("Opps, bad thing happened.\n");

  if(excpt_num < 16){

    printf("The exception [%s] invoked in TASK 0x%x\n",

         expt_name[excpt_num] , _task_get_id());

    printf("Dump the exception frame as :\n");

    printf("R0:\t0x%08x\n", *((uint_32 *)ext_frm_ptr));

    printf("R1:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 1));

    printf("R2:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 2));

    printf("R3:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 3));

    printf("R12:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 4));

    printf("LR:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 5));

    printf("PC:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 6));

    printf("PSR:\t0x%08x\n", *((uint_32 *)ext_frm_ptr + 7));

  }else{

    printf("The external interrupt %d occured while no handler to serve it.\n");

  }

}

void  task_exception_handler(_mqx_uint para, pointer stack_ptr)

{

    pointer expt_frm_ptr = (pointer)__get_PSP();

    expt_frm_dump(expt_frm_ptr);

}

void test_task(unsigned long para)

{

  unsigned int *p_bad = (unsigned int *)0;

  printf("Install the _int_exception_isr to replace the _int_default_isr\n");

  _int_install_exception_isr();

  /* Set the exception handler of the task */

  _task_set_exception_handler(_task_get_id(), task_exception_handler);

  *p_bad = 0;     // an access to address 0

   _task_block();

}

%3CLINGO-SUB%20id%3D%22lingo-sub-1122087%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMQX%E3%81%A7%E3%81%AE%E4%BE%8B%E5%A4%96%E3%81%AE%E8%BF%BD%E8%B7%A1%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1122087%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3Dutf-8%22%20%2F%26gt%3B%0A%3CP%3ECortex-M4%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%A7%E4%BD%9C%E6%A5%AD%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E4%BA%88%E6%9C%9F%E3%81%9B%E3%81%AC%E4%BE%8B%E5%A4%96(ISR%E3%81%AA%E3%81%97%E3%81%AE%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%80%81%E4%B8%8D%E6%AD%A3%E3%81%AA%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%AA%E3%81%A9)%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E6%AC%A1%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E3%80%81%E3%81%9D%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95%E3%82%92%E7%A4%BA%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CPRE%20__default_attr%3D%22c%2B%2B%22%20__jive_macro_name%3D%22code%22%20class%3D%22jive_text_macro%20_jivemacro_uid_13685271450596202%20jive_macro_code%22%20jivemacro_uid%3D%22_13685271450596202%22%20modifiedtitle%3D%22true%22%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Estatic%20void%20expt_frm_dump(%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BFext_frm_ptr)%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%E9%9D%99%E7%9A%84%E3%81%AA%E6%96%87%E5%AD%97%20*expt_name%5B%5D%20%3D%20%7B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22%E3%81%AA%E3%81%97%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22NMI%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22HardFault%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22MemManage%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22BusFault%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%22UsageFault%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%22Rsvd%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%22Rsvd%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%22Rsvd%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22SVCall%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%22Debug%20Monitor%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%22Rsvd%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%22PendSV%22%E3%80%81%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%E3%80%8CSysTick%E3%80%8D%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%20%7D%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Euint_32%20excpt_num%20%3D%20__get_PSR()%20%26amp%3B%200x1FF%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22%E3%81%8A%E3%81%A3%E3%81%A8%E3%80%81%E6%82%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E8%B5%B7%E3%81%93%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%5Cn%22)%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eif(excpt_num%20%26lt%3B%2016)%7B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22%E4%BE%8B%E5%A4%96%20%5B%25s%5D%20%E3%81%8C%20TASK%200x%25x%20%E3%81%A7%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%5Cn%22%2C%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eexpt_name%5Bexcpt_num%5D%20%2C%20_task_get_id())%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22%E4%BE%8B%E5%A4%96%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%20%3A%5Cn%22%3B%20%E3%81%A8%E3%81%97%E3%81%A6%E3%83%80%E3%83%B3%E3%83%97%E3%81%97%E3%81%BE%E3%81%99)%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22R0%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22R1%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%201))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22R2%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%202))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22R3%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%203))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22R12%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%204))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22LR%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%205))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22PC%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%206))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22PSR%3A%5Ct0x%2508x%5Cn%22%2C%20*((uint_32%20*)ext_frm_ptr%20%2B%207))%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%20%7Delse%7B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22%E5%A4%96%E9%83%A8%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%20%25d%20%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%E3%81%9D%E3%82%8C%E3%82%92%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B%E3%83%8F%E3%83%B3%E3%83%89%E3%83%A9%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%5Cn%22)%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Evoid%26nbsp%3B%20task_exception_handler(_mqx_uint%20para%2C%20pointer%20stack_ptr)%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%20expt_frm_ptr%20%3D%20(%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF)__get_PSP()%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20expt_frm_dump(expt_frm_ptr)%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%E3%83%9C%E3%82%A4%E3%83%89test_task(%E7%AC%A6%E5%8F%B7%E3%81%AA%E3%81%97%E3%83%AD%E3%83%B3%E3%82%B0%E3%83%91%E3%83%A9)%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%7B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%E7%AC%A6%E5%8F%B7%E3%81%AA%E3%81%97%E6%95%B4%E6%95%B0%20*p_bad%20%3D%20(%E7%AC%A6%E5%8F%B7%E3%81%AA%E3%81%97%E6%95%B4%E6%95%B0%20*)0%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3Eprintf(%22_int_default_isr%E3%82%92%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B_int_exception_isr%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%BE%E3%81%99%5Cn%22)%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E_int_install_exception_isr()%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%2F*%20%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E4%BE%8B%E5%A4%96%E3%83%8F%E3%83%B3%E3%83%89%E3%83%A9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%26nbsp%3B%20_task_set_exception_handler(_task_get_id()%2C%20task_exception_handler)%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E*p_bad%20%3D%200%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%200%20%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E_task_block()%3B%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%20style%3D%22padding-left%3A%2030px%3B%22%3E%3CSPAN%20style%3D%22font-size%3A%208pt%3B%22%3E%7D%3C%2FSPAN%3E%3C%2FP%3E%0A%0A%0A%3C%2FPRE%3E%3C%2FLINGO-BODY%3E
評価なし
バージョン履歴
最終更新日:
‎09-10-2020 02:53 AM
更新者: