1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2017-12-23 Bernard first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #include <rtdevice.h> 12*10465441SEvalZero #include <rtthread.h> 13*10465441SEvalZero 14*10465441SEvalZero static const struct rt_clock_cputime_ops *_cputime_ops = RT_NULL; 15*10465441SEvalZero 16*10465441SEvalZero /** 17*10465441SEvalZero * The clock_cpu_getres() function shall return the resolution of CPU time, the 18*10465441SEvalZero * number of nanosecond per tick. 19*10465441SEvalZero * 20*10465441SEvalZero * @return the number of nanosecond per tick 21*10465441SEvalZero */ clock_cpu_getres(void)22*10465441SEvalZerofloat clock_cpu_getres(void) 23*10465441SEvalZero { 24*10465441SEvalZero if (_cputime_ops) 25*10465441SEvalZero return _cputime_ops->cputime_getres(); 26*10465441SEvalZero 27*10465441SEvalZero rt_set_errno(-ENOSYS); 28*10465441SEvalZero return 0; 29*10465441SEvalZero } 30*10465441SEvalZero 31*10465441SEvalZero /** 32*10465441SEvalZero * The clock_cpu_gettime() function shall return the current value of cpu time tick. 33*10465441SEvalZero * 34*10465441SEvalZero * @return the cpu tick 35*10465441SEvalZero */ clock_cpu_gettime(void)36*10465441SEvalZerouint32_t clock_cpu_gettime(void) 37*10465441SEvalZero { 38*10465441SEvalZero if (_cputime_ops) 39*10465441SEvalZero return _cputime_ops->cputime_gettime(); 40*10465441SEvalZero 41*10465441SEvalZero rt_set_errno(-ENOSYS); 42*10465441SEvalZero return 0; 43*10465441SEvalZero } 44*10465441SEvalZero 45*10465441SEvalZero /** 46*10465441SEvalZero * The clock_cpu_microsecond() fucntion shall return the microsecond according to 47*10465441SEvalZero * cpu_tick parameter. 48*10465441SEvalZero * 49*10465441SEvalZero * @param cpu_tick the cpu tick 50*10465441SEvalZero * 51*10465441SEvalZero * @return the microsecond 52*10465441SEvalZero */ clock_cpu_microsecond(uint32_t cpu_tick)53*10465441SEvalZerouint32_t clock_cpu_microsecond(uint32_t cpu_tick) 54*10465441SEvalZero { 55*10465441SEvalZero float unit = clock_cpu_getres(); 56*10465441SEvalZero 57*10465441SEvalZero return (uint32_t)((cpu_tick * unit) / 1000); 58*10465441SEvalZero } 59*10465441SEvalZero 60*10465441SEvalZero /** 61*10465441SEvalZero * The clock_cpu_microsecond() fucntion shall return the millisecond according to 62*10465441SEvalZero * cpu_tick parameter. 63*10465441SEvalZero * 64*10465441SEvalZero * @param cpu_tick the cpu tick 65*10465441SEvalZero * 66*10465441SEvalZero * @return the millisecond 67*10465441SEvalZero */ clock_cpu_millisecond(uint32_t cpu_tick)68*10465441SEvalZerouint32_t clock_cpu_millisecond(uint32_t cpu_tick) 69*10465441SEvalZero { 70*10465441SEvalZero float unit = clock_cpu_getres(); 71*10465441SEvalZero 72*10465441SEvalZero return (uint32_t)((cpu_tick * unit) / (1000 * 1000)); 73*10465441SEvalZero } 74*10465441SEvalZero 75*10465441SEvalZero /** 76*10465441SEvalZero * The clock_cpu_seops() function shall set the ops of cpu time. 77*10465441SEvalZero * 78*10465441SEvalZero * @return always return 0. 79*10465441SEvalZero */ clock_cpu_setops(const struct rt_clock_cputime_ops * ops)80*10465441SEvalZeroint clock_cpu_setops(const struct rt_clock_cputime_ops *ops) 81*10465441SEvalZero { 82*10465441SEvalZero _cputime_ops = ops; 83*10465441SEvalZero if (ops) 84*10465441SEvalZero { 85*10465441SEvalZero RT_ASSERT(ops->cputime_getres != RT_NULL); 86*10465441SEvalZero RT_ASSERT(ops->cputime_gettime != RT_NULL); 87*10465441SEvalZero } 88*10465441SEvalZero 89*10465441SEvalZero return 0; 90*10465441SEvalZero } 91