⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssp_except_arm.c

📁 abstract rtos
💻 C
字号:
#ifdef __cplusplusextern "C"{#endif#include "syscfg.h"#if( AOS_INCLUDE_SSP_KER_EXCEPTION == TRUE )#include "sys/sys_pub.h"#include "aos.h"#include "ssp_event.h"#include "ssp_task.h"#include "ssp_except_arm.h"extern EXCEPTION_BUF_S *g_pException;S8 g_aRegName[][10] = {"r0",                       "r1",                       "r2",                       "r3",                       "r4",                       "r5",                       "r6",                       "r7",                       "r8",                       "r9",                       "r10",                       "r11",                       "r12",                       "r13",                       "r14",                       "pc",                       "cpsr"};VOID ssp_except_handle(U32 ulTask,U32 ulVecNum,ESF *pEsf);#if CONFIG_OS_VXWORKSextern void dbg_dbg_info_cache_flush();extern char * sysMemTop (void);#endifVOID ssp_except_handle(U32 ulTask,U32 ulVecNum,ESF *pEsf){    U32 ulTaskID;    U32 sp,fp;    U32 bp;    U32 i;    EXCEPTION_ITEM_S *pItem;    SYS_TIME_S DateTime;    REG_SET  *pRegs;            if(pEsf == NULL)    {        return;    }    ulTaskID = ssp_task_osidTOaosid(ulTask);    if(ulTaskID == U32_BUTT)    {        return;    }        g_pException->m_ulCounter ++;    g_pException->m_ulIndex = (g_pException->m_ulIndex + 1) % EXCEPTION_RECORD_NUM;        pItem = g_pException->m_aItem + g_pException->m_ulIndex;        pItem->m_ulVecNum  = ulVecNum;    pItem->m_ulErrorNo = 0;    pItem->m_ulIntCount= (U32)intCount();        for(i = 0;i < AOS_NAME_LEN;i++)    {        pItem->m_cTaskName[i] = g_pstTask[ulTaskID].name[i];    }        aos_time_get(&DateTime);    pItem->m_uDate      = DateTime.date;    pItem->m_uHour      = DateTime.hour;    pItem->m_uMinute    = DateTime.minute;    pItem->m_uSecond    = DateTime.second;    pItem->m_ulMillisec = DateTime.millisec;    pRegs = aos_list_entry(pEsf, REG_SET, pc);        pItem->m_ulPc = (U32)(pEsf->pc);    pItem->m_ulSp = pRegs->r[11];        sp = pItem->m_ulSp;    bp = g_pstTask[ulTaskID].sys_task_id;    if( bp < (U32)sysMemTop() )    {        for(i = 0;i < EXCEPTION_STACK_SIZE;i++)        {            if((sp + i) < bp)            {                pItem->m_aStack[i] = *(U32 *)(sp+i);            }            else            {                pItem->m_aStack[i] = 0;            }        }    }        else    {        for(i = 0;i < EXCEPTION_STACK_SIZE;i++)        {            pItem->m_aStack[i] = 0xEE;        }    }    fp = sys_get_cur_fp();        {        i = 0;        pItem->m_aStackLayer[0].stack_addr     = sp;        pItem->m_aStackLayer[0].next_inst_addr = pItem->m_ulPc;        i++;        if( fp < (U32)sysMemTop() )        {            fp = *(U32*)(fp-12);            for ( ; (i< EXCEPTION_STACK_LAYER) && (sp != 0); i++ )            {                if( fp < (U32)sysMemTop() )                {                    sp = *(U32*)(fp-8);                    pItem->m_aStackLayer[i].stack_addr     = sp;                    pItem->m_aStackLayer[i].next_inst_addr = *(U32*)(fp-4);                    fp = *(U32*)(fp-12);                }                else                {                    break;                }            }        }        if( i < EXCEPTION_STACK_LAYER )        {            pItem->m_aStackLayer[i].stack_addr     = sp;            pItem->m_aStackLayer[i].next_inst_addr = 0xBAD00BAD;            i++;        }                if( i < EXCEPTION_STACK_LAYER )        {            pItem->m_aStackLayer[i].stack_addr     = NULL;            pItem->m_aStackLayer[i].next_inst_addr = NULL;        }    }        for(i = 0;i < 15;i++)    {        pItem->m_aReg.r[i] = pRegs->r[i];    }    pItem->m_aReg.pc   = pEsf->pc;    pItem->m_aReg.cpsr    = pEsf->cpsr;        dbg_dbg_info_cache_flush();        #if CONFIG_VERSION_DEBUG    {        S8  cName[AOS_NAME_LEN+1];                        for(i = 0;i < AOS_NAME_LEN;i++)        {            cName[i] = pItem->m_cTaskName[i];        }        cName[i] = '\0';        aos_printf(MPE_SYS,"\r\nexception:0x%x"                           "\r\ntask:%s"                           "\r\npc=0x%x,fp=0x%x,bp=0x%x\r\n",                           pItem->m_ulVecNum,                           cName,                           pItem->m_ulPc,                           pItem->m_ulSp,                           bp);                #if(CONFIG_BOARD_GDSP == TRUE || CONFIG_BOARD_EIA == TRUE )        drv_cpu_reset();#endif    }       #else        drv_cpu_reset();    #endif}#endif#ifdef __cplusplus}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -