📄 cpu_core.c
字号:
* CPU_NameGet()
*
* Description : Get CPU host name.
*
* Argument(s) : p_name Pointer to an ASCII character array that will receive the return CPU host
* name ASCII string from this function (see Note #1).
*
* p_err Pointer to variable that will receive the return error code from this function :
*
* CPU_ERR_NONE CPU host name successfully returned.
* CPU_ERR_NULL_PTR Argument 'p_name' passed a NULL pointer.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* This function is a CPU module application interface (API) function & MAY be called by
* application function(s).
*
* Note(s) : (1) The size of the ASCII character array that will receive the return CPU host name
* ASCII string :
*
* (a) MUST be greater than or equal to the current CPU host name's ASCII string
* size including the terminating NULL character;
* (b) SHOULD be greater than or equal to CPU_CFG_NAME_SIZE
*********************************************************************************************************
*/
#if (CPU_CFG_NAME_EN == DEF_ENABLED)
void CPU_NameGet (CPU_CHAR *p_name,
CPU_ERR *p_err)
{
CPU_SR_ALLOC();
if (p_err == (CPU_ERR *)0) {
CPU_SW_EXCEPTION(;);
}
if (p_name == (CPU_CHAR *)0) {
*p_err = CPU_ERR_NULL_PTR;
return;
}
CPU_CRITICAL_ENTER();
(void)Str_Copy_N(p_name,
&CPU_Name[0],
CPU_CFG_NAME_SIZE);
CPU_CRITICAL_EXIT();
*p_err = CPU_ERR_NONE;
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CPU_NameSet()
*
* Description : Set CPU host name.
*
* Argument(s) : p_name Pointer to CPU host name to set.
*
* p_err Pointer to variable that will receive the return error code from this function :
*
* CPU_ERR_NONE CPU host name successfully set.
* CPU_ERR_NULL_PTR Argument 'p_name' passed a NULL pointer.
* CPU_ERR_NAME_SIZE Invalid CPU host name size (see Note #1).
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* This function is a CPU module application interface (API) function & MAY be called by
* application function(s).
*
* Note(s) : (1) 'p_name' ASCII string size, including the terminating NULL character, MUST be less
* than or equal to CPU_CFG_NAME_SIZE.
*********************************************************************************************************
*/
#if (CPU_CFG_NAME_EN == DEF_ENABLED)
void CPU_NameSet (const CPU_CHAR *p_name,
CPU_ERR *p_err)
{
CPU_SIZE_T len;
CPU_SR_ALLOC();
if (p_err == (CPU_ERR *)0) {
CPU_SW_EXCEPTION(;);
}
if (p_name == (const CPU_CHAR *)0) {
*p_err = CPU_ERR_NULL_PTR;
return;
}
len = Str_Len_N(p_name,
CPU_CFG_NAME_SIZE);
if (len < CPU_CFG_NAME_SIZE) { /* If cfg name len < max name size, ... */
CPU_CRITICAL_ENTER();
(void)Str_Copy_N(&CPU_Name[0], /* ... copy cfg name to CPU host name. */
p_name,
CPU_CFG_NAME_SIZE);
CPU_CRITICAL_EXIT();
*p_err = CPU_ERR_NONE;
} else {
*p_err = CPU_ERR_NAME_SIZE;
}
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CPU_TS_Get32()
*
* Description : Get current 32-bit CPU timestamp.
*
* Argument(s) : none.
*
* Return(s) : Current 32-bit CPU timestamp (in timestamp timer counts).
*
* Caller(s) : Application.
*
* This function is a CPU module application interface (API) function & MAY be called by
* application function(s).
*
* Note(s) : (1) When applicable, the amount of time measured by CPU timestamps is calculated by
* either of the following equations :
*
* (a) Time measured = Number timer counts * Timer period
*
* where
*
* Number timer counts Number of timer counts measured
* Timer period Timer's period in some units of
* (fractional) seconds
* Time measured Amount of time measured, in same
* units of (fractional) seconds
* as the Timer period
*
* Number timer counts
* (b) Time measured = ---------------------
* Timer frequency
*
* where
*
* Number timer counts Number of timer counts measured
* Timer frequency Timer's frequency in some units
* of counts per second
* Time measured Amount of time measured, in seconds
*
* See also 'cpu_core.h FUNCTION PROTOTYPES CPU_TS_TmrRd() Note #2c1'.
*
* (2) In case the CPU timestamp timer has lower precision than the 32-bit CPU timestamp;
* its precision is extended via periodic updates by accumulating the deltas of the
* timestamp timer count values into the higher-precision 32-bit CPU timestamp.
*
* (3) After initialization, 'CPU_TS_32_Accum' & 'CPU_TS_32_TmrPrev' MUST ALWAYS
* be accessed AND updated exclusively with interrupts disabled -- but NOT
* with critical sections.
*********************************************************************************************************
*/
#if (CPU_CFG_TS_32_EN == DEF_ENABLED)
CPU_TS32 CPU_TS_Get32 (void)
{
CPU_TS32 ts;
#if (CPU_CFG_TS_TMR_SIZE < CPU_WORD_SIZE_32)
CPU_TS_TMR tmr_cur;
CPU_TS_TMR tmr_delta;
CPU_SR_ALLOC();
#endif
#if (CPU_CFG_TS_TMR_SIZE >= CPU_WORD_SIZE_32)
ts = (CPU_TS32)CPU_TS_TmrRd(); /* Get cur ts tmr val (in 32-bit ts cnts). */
#else
CPU_INT_DIS();
tmr_cur = (CPU_TS_TMR) CPU_TS_TmrRd(); /* Get cur ts tmr val (in ts tmr cnts). */
tmr_delta = (CPU_TS_TMR)(tmr_cur - CPU_TS_32_TmrPrev); /* Calc delta ts tmr cnts. */
CPU_TS_32_Accum += (CPU_TS32 ) tmr_delta; /* Inc ts by delta ts tmr cnts (see Note #2). */
CPU_TS_32_TmrPrev = (CPU_TS_TMR) tmr_cur; /* Save cur ts tmr cnts for next update. */
ts = (CPU_TS32 ) CPU_TS_32_Accum;
CPU_INT_EN();
#endif
return (ts);
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CPU_TS_Get64()
*
* Description : Get current 64-bit CPU timestamp.
*
* Argument(s) : none.
*
* Return(s) : Current 64-bit CPU timestamp (in timestamp timer counts).
*
* Caller(s) : Application.
*
* This function is a CPU module application interface (API) function & MAY be called by
* application function(s).
*
* Note(s) : (1) When applicable, the amount of time measured by CPU timestamps is calculated by
* either of the following equations :
*
* (a) Time measured = Number timer counts * Timer period
*
* where
*
* Number timer counts Number of timer counts measured
* Timer period Timer's period in some units of
* (fractional) seconds
* Time measured Amount of time measured, in same
* units of (fractional) seconds
* as the Timer period
*
* Number timer counts
* (b) Time measured = ---------------------
* Timer frequency
*
* where
*
* Number timer counts Number of timer counts measured
* Timer frequency Timer's frequency in some units
* of counts per second
* Time measured Amount of time measured, in seconds
*
* See also 'cpu_core.h FUNCTION PROTOTYPES CPU_TS_TmrRd() Note #2c1'.
*
* (2) In case the CPU timestamp timer has lower precision than the 64-bit CPU timestamp;
* its precision is extended via periodic updates by accumulating the deltas of the
* timestamp timer count values into the higher-precision 64-bit CPU timestamp.
*
* (3) After initialization, 'CPU_TS_64_Accum' & 'CPU_TS_64_TmrPrev' MUST ALWAYS
* be accessed AND updated exclusively with interrupts disabled -- but NOT
* with critical sections.
*********************************************************************************************************
*/
#if (CPU_CFG_TS_64_EN == DEF_ENABLED)
CPU_TS64 CPU_TS_Get64 (void)
{
CPU_TS64 ts;
#if (CPU_CFG_TS_TMR_SIZE < CPU_WORD_SIZE_64)
CPU_TS_TMR tmr_cur;
CPU_TS_TMR tmr_delta;
CPU_SR_ALLOC();
#endif
#if (CPU_CFG_TS_TMR_SIZE >= CPU_WORD_SIZE_64)
ts = (CPU_TS64)CPU_TS_TmrRd(); /* Get cur ts tmr val (in 64-bit ts cnts). */
#else
CPU_INT_DIS();
tmr_cur = (CPU_TS_TMR) CPU_TS_TmrRd(); /* Get cur ts tmr val (in ts tmr cnts). */
tmr_delta = (CPU_TS_TMR)(tmr_cur - CPU_TS_64_TmrPrev); /* Calc delta ts tmr cnts. */
CPU_TS_64_Accum += (CPU_TS64 ) tmr_delta; /* Inc ts by delta ts tmr cnts (see Note #2). */
CPU_TS_64_TmrPrev = (CPU_TS_TMR) tmr_cur; /* Save cur ts tmr cnts for next update. */
ts = (CPU_TS64 ) CPU_TS_64_Accum;
CPU_INT_EN();
#endif
return (ts);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -