[cputime] suuport perf_counter
This commit is contained in:
parent
b010e434ed
commit
808259135f
|
@ -79,12 +79,10 @@ config RT_USING_CPUTIME
|
||||||
|
|
||||||
if RT_USING_CPUTIME
|
if RT_USING_CPUTIME
|
||||||
config RT_USING_CPUTIME_CORTEXM
|
config RT_USING_CPUTIME_CORTEXM
|
||||||
bool "Use DWT for CPU time"
|
bool "Support Cortex-M CPU"
|
||||||
default y
|
default y
|
||||||
depends on ARCH_ARM_CORTEX_M3 || ARCH_ARM_CORTEX_M4 || ARCH_ARM_CORTEX_M7
|
depends on ARCH_ARM_CORTEX_M0 || ARCH_ARM_CORTEX_M3 || ARCH_ARM_CORTEX_M4 || ARCH_ARM_CORTEX_M7
|
||||||
help
|
select PKG_USING_PERF_COUNTER
|
||||||
Some Cortex-M3/4/7 MCU has Data Watchpoint and Trace Register, use
|
|
||||||
the cycle counter in DWT for CPU time.
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
config RT_USING_I2C
|
config RT_USING_I2C
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2017-12-23 Bernard first version
|
* 2017-12-23 Bernard first version
|
||||||
|
* 2022-06-14 Meco Man suuport pref_counter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rthw.h>
|
#include <rthw.h>
|
||||||
|
@ -13,9 +14,11 @@
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
|
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
|
#ifdef PKG_USING_PERF_COUNTER
|
||||||
|
#include <perf_counter.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Use Cycle counter of Data Watchpoint and Trace Register for CPU time */
|
/* Use Cycle counter of Data Watchpoint and Trace Register for CPU time */
|
||||||
|
|
||||||
static float cortexm_cputime_getres(void)
|
static float cortexm_cputime_getres(void)
|
||||||
{
|
{
|
||||||
float ret = 1000 * 1000 * 1000;
|
float ret = 1000 * 1000 * 1000;
|
||||||
|
@ -26,7 +29,11 @@ static float cortexm_cputime_getres(void)
|
||||||
|
|
||||||
static uint64_t cortexm_cputime_gettime(void)
|
static uint64_t cortexm_cputime_gettime(void)
|
||||||
{
|
{
|
||||||
|
#ifdef PKG_USING_PERF_COUNTER
|
||||||
|
return get_system_ticks();
|
||||||
|
#else
|
||||||
return DWT->CYCCNT;
|
return DWT->CYCCNT;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const static struct rt_clock_cputime_ops _cortexm_ops =
|
const static struct rt_clock_cputime_ops _cortexm_ops =
|
||||||
|
@ -35,8 +42,12 @@ const static struct rt_clock_cputime_ops _cortexm_ops =
|
||||||
cortexm_cputime_gettime
|
cortexm_cputime_gettime
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int cortexm_cputime_init(void)
|
int cortexm_cputime_init(void)
|
||||||
{
|
{
|
||||||
|
#ifdef PKG_USING_PERF_COUNTER
|
||||||
|
clock_cpu_setops(&_cortexm_ops);
|
||||||
|
#else
|
||||||
/* check support bit */
|
/* check support bit */
|
||||||
if ((DWT->CTRL & (1UL << DWT_CTRL_NOCYCCNT_Pos)) == 0)
|
if ((DWT->CTRL & (1UL << DWT_CTRL_NOCYCCNT_Pos)) == 0)
|
||||||
{
|
{
|
||||||
|
@ -52,7 +63,7 @@ int cortexm_cputime_init(void)
|
||||||
|
|
||||||
clock_cpu_setops(&_cortexm_ops);
|
clock_cpu_setops(&_cortexm_ops);
|
||||||
}
|
}
|
||||||
|
#endif /* PKG_USING_PERF_COUNTER */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
INIT_BOARD_EXPORT(cortexm_cputime_init);
|
INIT_BOARD_EXPORT(cortexm_cputime_init);
|
||||||
|
|
Loading…
Reference in New Issue