📄 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_STRING
extern CHAR ERD_Error_String[];
#endif
#ifdef NU_DEBUG
extern 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_STRING
INT i;
CHAR *pointer;
CHAR name[NU_MAX_NAME+1];
#endif
NU_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 + -