How to get PC, LR and other information of all threads in a multi threading system?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to get PC, LR and other information of all threads in a multi threading system?

869 Views
preetmehta
Contributor III

Hello All,

I am trying to capture all the possible information for all the threads from a "so called monitor" thread, like PC, SP, LR or whole TD.

I am able to get SP_BASE and SP and SP Limit from the TD_STRUCT of MQX.

But I am not able to find PC and LR.

Let me clarify my motive behind my active which is to gather all such information of TD while Watchdog is going to trigger.

So in my system I am using api to get TD and accessing it's info.

Does anyone know how can I get value of last PC of all the threads?

Preet...

Tags (1)
0 Kudos
1 Reply

558 Views
danielchen
NXP TechSupport
NXP TechSupport

Hi Preet

Please refer to the following code,

        uint32_t                    psp, msp, i;
        printf("\n\r*** UNHANDLED INTERRUPT ***\n\r");
        printf("Vector #: 0x%02x Task Id: 0x%0x Td_ptr 0x%x\n\r",
        (uint32_t)parameter, (uint32_t)td_ptr->TASK_ID, (uint32_t)td_ptr);

        psp = __get_PSP();
        msp = __get_MSP();
        printf("PC: 0x%08x LR: 0x%08x PSP: 0x%08x MSP: 0x%08x PSR: 0x%08x\n\r", __get_PC(), __get_LR(), psp, msp, __get_PSR());

        printf("\n\r\n\rMemory dump:\n\r");
        for (i = 0; i < 32; i += 4) {
            printf("0x%08x : 0x%08x 0x%08x 0x%08x 0x%08x\n\r", psp + i * 4, ((uint32_t*)psp)[i], ((uint32_t*)psp)[i + 1], ((uint32_t*)psp)[i + 2], ((uint32_t*)psp)[i + 3]);
        }

        printf("\n\r\n\rMemory dump:\n\r");
        for (i = 0; i < 32; i += 4) {
            printf("0x%08x : 0x%08x 0x%08x 0x%08x 0x%08x\n\r", msp + i * 4, ((uint32_t*)msp)[i], ((uint32_t*)msp)[i + 1], ((uint32_t*)msp)[i + 2], ((uint32_t*)msp)[i + 3]);
        }

You also can find this code in mqx/source/psp/cortex_m/int_unx.c

Regards

Daniel

0 Kudos