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

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

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

Loading…
Cancel
Save