32#ifndef _LOS_SORTLINK_PRI_H
33#define _LOS_SORTLINK_PRI_H
52#ifdef LOSCFG_KERNEL_SMP
66#define OS_SORT_LINK_INVALID_TIME ((UINT64)-1)
67#define SET_SORTLIST_VALUE(sortList, value) (((SortLinkList *)(sortList))->responseTime = (value))
68#define GET_SORTLIST_VALUE(sortList) (((SortLinkList *)(sortList))->responseTime)
73 SET_SORTLIST_VALUE(sortList, OS_SORT_LINK_INVALID_TIME);
85 return OS_SORT_LINK_INVALID_TIME - tickPrecision;
89 if (listSorted->
responseTime <= (startTime + tickPrecision)) {
91 return startTime + tickPrecision;
105#ifdef LOSCFG_KERNEL_SMP
LITE_OS_SEC_ALW_INLINE STATIC INLINE VOID LOS_ListDelete(LOS_DL_LIST *node)
LITE_OS_SEC_ALW_INLINE STATIC INLINE BOOL LOS_ListEmpty(LOS_DL_LIST *list)
Identify whether a specified doubly linked list is empty. | 判断链表是否为空
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
VOID OsDeleteFromSortLink(SortLinkAttribute *head, SortLinkList *node)
VOID OsSortLinkInit(SortLinkAttribute *sortLinkHeader)
排序链表初始化
UINT64 OsSortLinkGetTargetExpireTime(UINT64 currTime, const SortLinkList *targetSortList)
STATIC INLINE UINT64 OsGetSortLinkNextExpireTime(SortLinkAttribute *sortHeader, UINT64 startTime, UINT32 tickPrecision)
STATIC INLINE UINT16 OsGetSortLinkNodeCpuid(const SortLinkList *node)
VOID OsAdd2SortLink(SortLinkAttribute *head, SortLinkList *node, UINT64 responseTime, UINT16 idleCpu)
UINT32 OsSortLinkAdjustNodeResponseTime(SortLinkAttribute *head, SortLinkList *node, UINT64 responseTime)
STATIC INLINE VOID OsDeleteNodeSortLink(SortLinkAttribute *sortLinkHeader, SortLinkList *sortList)
STATIC INLINE UINT32 OsGetSortLinkNodeNum(const SortLinkAttribute *head)
UINT64 OsSortLinkGetNextExpireTime(UINT64 currTime, const SortLinkAttribute *sortLinkHeader)
VOID LOS_SpinLock(SPIN_LOCK_S *lock)
VOID LOS_SpinUnlock(SPIN_LOCK_S *lock)
struct LOS_DL_LIST * pstNext
LOS_DL_LIST sortLink
排序链表,上面挂的任务/软件定时器
LOS_DL_LIST sortLinkNode
排序链表,注意上面挂的是一个个等待被执行的任务/软件定时器
UINT64 responseTime
响应时间,这里提取了最近需要触发的定时器/任务的时间,见于 OsAddNode2SortLink 的实现