From 5cda1e77cca89534750a89fd5b1b5faf98e53cd8 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Thu, 6 May 2021 10:37:24 +0800 Subject: [PATCH] fix:The SWTMR_ALIGN timer calculates the count error for the same period, and for the same response time, the later-inserted node should be behind the existing node. Close #I3PS5B Change-Id: I15317e64ea3376a4880e8eb0a3af3e3e8449ba08 --- kernel/src/los_sortlink.c | 5 ++++- kernel/src/los_swtmr.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/src/los_sortlink.c b/kernel/src/los_sortlink.c index c93b9afe..8c2a77eb 100644 --- a/kernel/src/los_sortlink.c +++ b/kernel/src/los_sortlink.c @@ -58,9 +58,12 @@ STATIC INLINE VOID OsAddNode2SortLink(SortLinkAttribute *sortLinkHeader, SortLin } SortLinkList *listSorted = LOS_DL_LIST_ENTRY(head->pstNext, SortLinkList, sortLinkNode); - if (listSorted->responseTime >= sortList->responseTime) { + if (listSorted->responseTime > sortList->responseTime) { LOS_ListAdd(head, &sortList->sortLinkNode); return; + } else if (listSorted->responseTime == sortList->responseTime) { + LOS_ListAdd(head->pstNext, &sortList->sortLinkNode); + return; } LOS_DL_LIST *prevNode = head->pstPrev; diff --git a/kernel/src/los_swtmr.c b/kernel/src/los_swtmr.c index ef8fa081..b6a6c174 100644 --- a/kernel/src/los_swtmr.c +++ b/kernel/src/los_swtmr.c @@ -158,7 +158,7 @@ VOID OsSwtmrFindAlignPos(UINT64 currTime, SWTMR_CTRL_S *swtmr) } /* find same interval timer, directly return */ if (cur->uwInterval == swtmr->uwInterval) { - swtmr->uwCount = 0; + swtmr->uwCount = OsSortLinkGetTargetExpireTime(currTime, &cur->stSortList); return; }