陈一居
weitong 1 year ago
parent b7178ae578
commit 762f964222

@ -29,44 +29,76 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
/*
LOS_TickCountGet()OsGetCurrSchedTimeCycle()
LOS_CyclePerTickGet()
LOS_MS2Tick()
LOS_Tick2MS()
OsNS2Tick()1
*/
#include "los_sys_pri.h" #include "los_sys_pri.h"
#include "los_sched_pri.h" #include "los_sched_pri.h"
// 定义最大值
#define OS_MAX_VALUE 0xFFFFFFFFUL #define OS_MAX_VALUE 0xFFFFFFFFUL
// 获取当前的系统节拍数
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID) LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID)
{ {
// 调用内部函数获取当前调度时间周期并除以每个节拍的周期数,得到节拍数
return OsGetCurrSchedTimeCycle() / OS_CYCLE_PER_TICK; return OsGetCurrSchedTimeCycle() / OS_CYCLE_PER_TICK;
} }
// 获取每个节拍的周期数
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CyclePerTickGet(VOID) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CyclePerTickGet(VOID)
{ {
// 返回系统时钟频率除以每秒节拍数,得到每个节拍的周期数
return g_sysClock / LOSCFG_BASE_CORE_TICK_PER_SECOND; return g_sysClock / LOSCFG_BASE_CORE_TICK_PER_SECOND;
} }
// 将毫秒转换为节拍数
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MS2Tick(UINT32 millisec) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MS2Tick(UINT32 millisec)
{ {
// 如果毫秒数等于最大值,直接返回最大值
if (millisec == OS_MAX_VALUE) { if (millisec == OS_MAX_VALUE) {
return OS_MAX_VALUE; return OS_MAX_VALUE;
} }
// 将毫秒数乘以每秒节拍数,再除以每秒毫秒数,得到节拍数
return ((UINT64)millisec * LOSCFG_BASE_CORE_TICK_PER_SECOND) / OS_SYS_MS_PER_SECOND; return ((UINT64)millisec * LOSCFG_BASE_CORE_TICK_PER_SECOND) / OS_SYS_MS_PER_SECOND;
} }
// 将节拍数转换为毫秒
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_Tick2MS(UINT32 tick) LITE_OS_SEC_TEXT_MINOR UINT32 LOS_Tick2MS(UINT32 tick)
{ {
// 将节拍数乘以每秒毫秒数,再除以每秒节拍数,得到毫秒数
return ((UINT64)tick * OS_SYS_MS_PER_SECOND) / LOSCFG_BASE_CORE_TICK_PER_SECOND; return ((UINT64)tick * OS_SYS_MS_PER_SECOND) / LOSCFG_BASE_CORE_TICK_PER_SECOND;
} }
// 将纳秒转换为节拍数
LITE_OS_SEC_TEXT_MINOR UINT32 OsNS2Tick(UINT64 nanoseconds) LITE_OS_SEC_TEXT_MINOR UINT32 OsNS2Tick(UINT64 nanoseconds)
{ {
// 每个节拍的纳秒数
const UINT32 nsPerTick = OS_SYS_NS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND; const UINT32 nsPerTick = OS_SYS_NS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND;
// 将纳秒数加上每个节拍的纳秒数减1再除以每个节拍的纳秒数得到节拍数
UINT64 ticks = (nanoseconds + nsPerTick - 1) / nsPerTick; UINT64 ticks = (nanoseconds + nsPerTick - 1) / nsPerTick;
// 如果节拍数超过最大值,将其设置为最大值
if (ticks > OS_MAX_VALUE) { if (ticks > OS_MAX_VALUE) {
ticks = OS_MAX_VALUE; ticks = OS_MAX_VALUE;
} }
// 将节拍数转换为32位整数并返回
return (UINT32)ticks; return (UINT32)ticks;
} }

@ -29,6 +29,22 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
/*
g_sysClock
g_tickPerSecond
g_cycle2NsScale
g_tickSpin访
OsTickHandler()VDSOOsSchedTick()
*/
#include "los_tick_pri.h" #include "los_tick_pri.h"
#include "los_swtmr_pri.h" #include "los_swtmr_pri.h"
#include "los_sched_pri.h" #include "los_sched_pri.h"
@ -36,17 +52,22 @@
#include "los_vdso.h" #include "los_vdso.h"
#endif #endif
// 系统时钟频率
LITE_OS_SEC_DATA_INIT UINT32 g_sysClock; LITE_OS_SEC_DATA_INIT UINT32 g_sysClock;
// 每秒节拍数
LITE_OS_SEC_DATA_INIT UINT32 g_tickPerSecond; LITE_OS_SEC_DATA_INIT UINT32 g_tickPerSecond;
// 循环周期到纳秒的缩放比例
LITE_OS_SEC_BSS DOUBLE g_cycle2NsScale; LITE_OS_SEC_BSS DOUBLE g_cycle2NsScale;
/* spinlock for task module */ // 任务模块的自旋锁
LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_tickSpin); LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_tickSpin);
/* /*
* Description : Tick interruption handler * Description : Tick interruption handler
*/ */
// 节拍中断处理函数
LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) LITE_OS_SEC_TEXT VOID OsTickHandler(VOID)
{ {
#ifdef LOSCFG_SCHED_TICK_DEBUG #ifdef LOSCFG_SCHED_TICK_DEBUG
@ -61,6 +82,10 @@ LITE_OS_SEC_TEXT VOID OsTickHandler(VOID)
HalClockIrqClear(); /* diff from every platform */ HalClockIrqClear(); /* diff from every platform */
#endif #endif
// 调度器的节拍处理函数
OsSchedTick(); OsSchedTick();
} }

Loading…
Cancel
Save