📄 cpu_core.h
字号:
#endif
#endif
/*
*********************************************************************************************************
* CPU TIMESTAMP TIMER FREQUENCY DATA TYPE
*********************************************************************************************************
*/
typedef CPU_INT32U CPU_TS_TMR_FREQ;
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
#if (CPU_CFG_NAME_EN == DEF_ENABLED)
CPU_CORE_EXT CPU_CHAR CPU_Name[CPU_CFG_NAME_SIZE]; /* CPU host name. */
#endif
#if ((CPU_CFG_TS_32_EN == DEF_ENABLED) && \
(CPU_CFG_TS_TMR_SIZE < CPU_WORD_SIZE_32))
CPU_CORE_EXT CPU_TS32 CPU_TS_32_Accum; /* 32-bit accum'd ts (in ts tmr cnts). */
CPU_CORE_EXT CPU_TS_TMR CPU_TS_32_TmrPrev; /* 32-bit ts prev tmr (in ts tmr cnts). */
#endif
#if ((CPU_CFG_TS_64_EN == DEF_ENABLED) && \
(CPU_CFG_TS_TMR_SIZE < CPU_WORD_SIZE_64))
CPU_CORE_EXT CPU_TS64 CPU_TS_64_Accum; /* 64-bit accum'd ts (in ts tmr cnts). */
CPU_CORE_EXT CPU_TS_TMR CPU_TS_64_TmrPrev; /* 64-bit ts prev tmr (in ts tmr cnts). */
#endif
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
CPU_CORE_EXT CPU_TS_TMR_FREQ CPU_TS_TmrFreq_Hz; /* CPU ts tmr freq (in Hz). */
#endif
#ifdef CPU_CFG_INT_DIS_MEAS_EN
CPU_CORE_EXT CPU_INT16U CPU_IntDisMeasCtr; /* Nbr tot ints dis'd ctr. */
CPU_CORE_EXT CPU_INT16U CPU_IntDisNestCtr; /* Nbr nested ints dis'd ctr. */
/* Ints dis'd time (in ts tmr cnts) : ... */
CPU_CORE_EXT CPU_TS_TMR CPU_IntDisMeasStart_cnts; /* ... start time. */
CPU_CORE_EXT CPU_TS_TMR CPU_IntDisMeasStop_cnts; /* ... stop time. */
CPU_CORE_EXT CPU_TS_TMR CPU_IntDisMeasOvrhd_cnts; /* ... time meas ovrhd. */
CPU_CORE_EXT CPU_TS_TMR CPU_IntDisMeasMaxCur_cnts; /* ... resetable max time dis'd. */
CPU_CORE_EXT CPU_TS_TMR CPU_IntDisMeasMax_cnts; /* ... non-resetable max time dis'd. */
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* MACRO'S
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* CPU_SW_EXCEPTION()
*
* Description : Trap unrecoverable software exception.
*
* Argument(s) : err_rtn_val Error type &/or value of the calling function to return (see Note #2b).
*
* Return(s) : none.
*
* Caller(s) : various.
*
* Note(s) : (1) CPU_SW_EXCEPTION() deadlocks the current code execution -- whether multi-tasked/
* -processed/-threaded or single-threaded -- when the current code execution cannot
* gracefully recover or report a fault or exception condition.
*
* Example CPU_SW_EXCEPTION() call :
*
* void Fnct (CPU_ERR *p_err)
* {
* :
*
* if (p_err == (CPU_ERR *)0) { If 'p_err' NULL, cannot return error ...
* CPU_SW_EXCEPTION(;); ... so trap invalid argument exception.
* }
*
* :
* }
*
* See also 'cpu_core.c CPU_SW_Exception() Note #1'.
*
* (2) (a) CPU_SW_EXCEPTION() MAY be developer-implemented to output &/or handle any error or
* exception conditions; but since CPU_SW_EXCEPTION() is intended to trap unrecoverable
* software conditions, it is recommended that developer-implemented versions prevent
* execution of any code following calls to CPU_SW_EXCEPTION() by deadlocking the code
* (see Note #1).
*
* Example CPU_SW_EXCEPTION() :
*
* #define CPU_SW_EXCEPTION(err_rtn_val) do { \
* Log(__FILE__, __LINE__); \
* CPU_SW_Exception(); \
* } while (0)
*
* (b) (1) However, if execution of code following calls to CPU_SW_EXCEPTION() is required
* (e.g. for automated testing); it is recommended that the last statement in
* developer-implemented versions be to return from the current function to prevent
* possible software exception(s) in the current function from triggering CPU &/or
* hardware exception(s).
*
* Example CPU_SW_EXCEPTION() :
*
* #define CPU_SW_EXCEPTION(err_rtn_val) do { \
* Log(__FILE__, __LINE__); \
* return err_rtn_val; \
* } while (0)
*
* (A) Note that 'err_rtn_val' in the return statement MUST NOT be enclosed in
* parentheses. This allows CPU_SW_EXCEPTION() to return from functions that
* return 'void', i.e. NO return type or value (see also Note #2b2A).
*$PAGE*
* (2) In order for CPU_SW_EXCEPTION() to return from functions with various return
* types/values, each caller function MUST pass an appropriate error return type
* & value to CPU_SW_EXCEPTION().
*
* (A) Note that CPU_SW_EXCEPTION() MUST NOT be passed any return type or value
* for functions that return 'void', i.e. NO return type or value; but SHOULD
* instead be passed a single semicolon. This prevents possible compiler
* warnings that CPU_SW_EXCEPTION() is passed too few arguments. However,
* the compiler may warn that CPU_SW_EXCEPTION() does NOT prevent creating
* null statements on lines with NO other code statements.
*
* Example CPU_SW_EXCEPTION() calls :
*
* void Fnct (CPU_ERR *p_err)
* {
* :
*
* if (p_err == (CPU_ERR *)0) {
* CPU_SW_EXCEPTION(;); Exception macro returns NO value
* } (see Note #2b2A)
*
* :
* }
*
* CPU_BOOLEAN Fnct (CPU_ERR *p_err)
* {
* :
*
* if (p_err == (CPU_ERR *)0) {
* CPU_SW_EXCEPTION(DEF_FAIL); Exception macro returns 'DEF_FAIL'
* }
*
* :
* }
*
* OBJ *Fnct (CPU_ERR *p_err)
* {
* :
*
* if (p_err == (CPU_ERR *)0) {
* CPU_SW_EXCEPTION((OBJ *)0); Exception macro returns NULL 'OBJ *'
* }
*
* :
* }
*
*********************************************************************************************************
*/
#ifndef CPU_SW_EXCEPTION /* See Note #2. */
#define CPU_SW_EXCEPTION(err_rtn_val) do { \
CPU_SW_Exception(); \
} while (0)
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CPU_TYPE_CREATE()
*
* Description : Creates a generic type value.
*
* Argument(s) : char_1 1st ASCII character to create generic type value.
*
* char_2 2nd ASCII character to create generic type value.
*
* char_3 3rd ASCII character to create generic type value.
*
* char_4 4th ASCII character to create generic type value.
*
* Return(s) : 32-bit generic type value.
*
* Caller(s) : various.
*
* Note(s) : (1) (a) Generic type values should be #define'd with large, non-trivial values to trap
* & discard invalid/corrupted objects based on type value.
*
* In other words, by assigning large, non-trivial values to valid objects' type
* fields; the likelihood that an object with an unassigned &/or corrupted type
* field will contain a value is highly improbable & therefore the object itself
* will be trapped as invalid.
*
* (b) (1) CPU_TYPE_CREATE() creates a 32-bit type value from four values.
*
* (2) Ideally, generic type values SHOULD be created from 'CPU_CHAR' characters to
* represent ASCII string abbreviations of the specific object types. Memory
* displays of object type values will display the specific object types with
* their chosen ASCII names.
*
* Examples :
*
* #define FILE_TYPE CPU_TYPE_CREATE('F', 'I', 'L', 'E')
* #define BUF_TYPE CPU_TYPE_CREATE('B', 'U', 'F', ' ')
*********************************************************************************************************
*/
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define CPU_TYPE_CREATE(char_1, char_2, char_3, char_4) (((CPU_INT32U)((CPU_INT08U)(char_1)) << (3u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_2)) << (2u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_3)) << (1u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_4)) << (0u * DEF_OCTET_NBR_BITS)))
#else
#if ((CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_64) || \
(CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32))
#define CPU_TYPE_CREATE(char_1, char_2, char_3, char_4) (((CPU_INT32U)((CPU_INT08U)(char_1)) << (0u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_2)) << (1u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_3)) << (2u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_4)) << (3u * DEF_OCTET_NBR_BITS)))
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
#define CPU_TYPE_CREATE(char_1, char_2, char_3, char_4) (((CPU_INT32U)((CPU_INT08U)(char_1)) << (2u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_2)) << (3u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_3)) << (0u * DEF_OCTET_NBR_BITS)) | \
((CPU_INT32U)((CPU_INT08U)(char_4)) << (1u * DEF_OCTET_NBR_BITS)))
#else /* Dflt CPU_WORD_SIZE_08. */
#define CPU_TYPE_CREATE(char_1, char_2, char_3, char_4) (((CPU_INT32U)((CPU_INT08U)(char_1)) << (3u * DEF_OCTET_NBR_BITS)) | \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -