📄 erc.c
字号:
/*************************************************************************//* *//* Copyright Mentor Graphics Corporation 2002 *//* All Rights Reserved. *//* *//* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS *//* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS *//* SUBJECT TO LICENSE TERMS. *//* *//*************************************************************************//*************************************************************************//* *//* FILE NAME VERSION *//* *//* erc.c Nucleus PLUS 1.14 *//* *//* COMPONENT *//* *//* ER - Error Management *//* *//* DESCRIPTION *//* *//* This file contains the core routines for the Error management *//* component. *//* *//* DATA STRUCTURES *//* *//* None *//* *//* FUNCTIONS *//* *//* ERC_System_Error System error function *//* ERC_Assert System assertion routine *//* *//* DEPENDENCIES *//* *//* tc_defs.h Thread control definitions *//* er_extr.h Error handling functions *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* 03-01-1994 Modified copyright notice, *//* resulting in version 1.1 *//* *//* 03-18-1994 Verified version 1.1 *//* 04-17-1996 updated to version 1.2 *//* 03-24-1998 Released version 1.3. *//* 11-24-1998 Added ERC_Assert routine. *//* 03-26-1999 Released 1.11m (new release *//* numbering scheme) *//* 04-07-1999 Release 1.11mA *//* 04-17-2002 Released version 1.13m *//* 11-07-2002 Released version 1.14 *//*************************************************************************/#define NU_SOURCE_FILE#ifdef NU_ERROR_STRING#include <stdio.h> /* Standard I/O functions */#endif#include "tc_defs.h" /* Thread control constants */#include "er_extr.h" /* Error handling functions */#ifdef NU_DEBUG_MEMORY#include "er_defs.h" /* Error management structures */#include "dm_extr.h" /* Memory management */#include "ncl\inc\string.h" /* memcmp & memcpy functions */#include "ncl\inc\nu_ncl.h" /* memcmp & memcpy functions */extern NU_MEMORY_POOL NU_DEBUG_POOL;extern const UINT8 ERD_MemoryAllocationHead[];extern const UINT8 ERD_MemoryAllocationFoot[];extern ER_DEBUG_ALLOCATION *ERD_RecentAllocation;extern UINT32 ERD_AllocationCount;extern UINT32 ERD_AllocationSequenceCounter;extern UINT32 ERD_TotalMemoryAllocated;extern UINT32 ERD_TotalMemoryAllocations;extern UINT32 ERD_MaxTotalMemoryAllocated;extern UINT32 ERD_MaxTotalMemoryAllocations;#endif /* NU_DEBUG_MEMORY *//* Define external inner-component global data references. */extern INT ERD_Error_Code;#ifdef NU_ERROR_STRINGextern CHAR ERD_Error_String[];#endif#ifdef NU_DEBUGextern UNSIGNED ERD_Assert_Count;#endif/* Define direct access to a thread component variable. */extern VOID *TCD_Current_Thread;/*************************************************************************//* *//* FUNCTION *//* *//* ERC_System_Error *//* *//* DESCRIPTION *//* *//* This function processes system errors detected by various *//* system components. Typically an error of this type is *//* considered fatal. *//* *//* CALLED BY *//* *//* Various Components *//* *//* CALLS *//* *//* None *//* *//* INPUTS *//* *//* error_code Code of detected system error*//* *//* OUTPUTS *//* *//* None *//* *//* HISTORY *//* *//* DATE REMARKS *//* *//* 03-01-1993 Created initial version 1.0 *//* 04-19-1993 Verified version 1.0 *//* *//*************************************************************************/VOID ERC_System_Error(INT error_code){#ifdef NU_ERROR_STRINGINT i;CHAR *pointer;CHAR name[NU_MAX_NAME+1];#endifNU_SUPERV_USER_VARIABLES /* Switch to supervisor mode */ NU_SUPERVISOR_MODE(); /* First place the error code into the global variable. */ ERD_Error_Code = error_code;#ifdef NU_ERROR_STRING /* Build string that corresponds to the error. */ switch(error_code) { case NU_ERROR_CREATING_TIMER_HISR: /* Build string that indicates an error occurred creating the timer HISR. */ sprintf(ERD_Error_String,"%s\n", "Error Creating Timer HISR"); break; case NU_ERROR_CREATING_TIMER_TASK: /* Build string that indicates an error occurred creating the timer Task. */ sprintf(ERD_Error_String,"%s\n", "Error Creating Timer Task"); break; case NU_STACK_OVERFLOW: /* Build string that indicates a stack overflow occurred. */ name[NU_MAX_NAME] = (CHAR) 0; pointer = (((TC_TCB *) TCD_Current_Thread) -> tc_name); for (i = 0; i < NU_MAX_NAME; i++) name[i] = *pointer++; sprintf(ERD_Error_String,"%s %s\n", "Stack Overflow in task/HISR: ", name); break; case NU_UNHANDLED_INTERRUPT: /* Build string that indicates an error occurred because of an unhandled interrupt. */ sprintf(ERD_Error_String,"%s\n", "Unhandled interrupt error"); break; }#endif /* This function cannot return, since the error is fatal. */ while(1) { } /* No need to return to user mode because of the infinite loop. */ /* Returning to user mode will cause warnings with some compilers. */}#ifdef NU_DEBUG_MEMORY/*************************************************************************//* *//* FUNCTION *//* *//* ERC_Memory_To_Debug *//* *//* DESCRIPTION *//* *//* This function returns a pointer to the ER_DEBUG_ALLOCATION that */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -