diff --git a/kernel/base/core/los_sortlink.c b/kernel/base/core/los_sortlink.c index 77f38266981f1129e9a98e722df442caa407944a..9791ed306318796766b153cf40a9c95eb60b9810 100644 --- a/kernel/base/core/los_sortlink.c +++ b/kernel/base/core/los_sortlink.c @@ -45,14 +45,14 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsSortLinkInit(SortLinkAttribute *sortLinkHeader) LOS_DL_LIST *listObject = NULL; UINT32 index; - size = sizeof(LOS_DL_LIST) << OS_TSK_SORTLINK_LOGLEN;//这行代码很精彩,得到 8个 LOS_DL_LIST - listObject = (LOS_DL_LIST *)LOS_MemAlloc(m_aucSysMem0, size); /* system resident resource *///常驻内存 + size = sizeof(LOS_DL_LIST) << OS_TSK_SORTLINK_LOGLEN;//这行代码很精彩, size=64个字节 每个LOS_DL_LIST8个字节,即等于 8个LOS_DL_LIST + listObject = (LOS_DL_LIST *)LOS_MemAlloc(m_aucSysMem0, size); /* system resident resource *///常驻内存 size表示字节的意思 if (listObject == NULL) { return LOS_NOK; } (VOID)memset_s(listObject, size, 0, size);//清0 - sortLinkHeader->sortLink = listObject;//可以知道 sortLink是个链表数组 + sortLinkHeader->sortLink = listObject;//可以知道 sortLink是个链表数组,这个很重要 sortLinkHeader->cursor = 0;//游标默认为0 for (index = 0; index < OS_TSK_SORTLINK_LEN; index++, listObject++) {// OS_TSK_SORTLINK_LEN = 8 LOS_ListInit(listObject);//初始化8个链表 @@ -92,7 +92,7 @@ LITE_OS_SEC_TEXT VOID OsAdd2SortLink(const SortLinkAttribute *sortLinkHeader, So } else { listSorted = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//取出SortLinkList do { - if (ROLLNUM(listSorted->idxRollNum) <= ROLLNUM(sortList->idxRollNum)) {// @note_? 这块没看懂,谁能帮帮我 + if (ROLLNUM(listSorted->idxRollNum) <= ROLLNUM(sortList->idxRollNum)) {// @note_why 这块没看懂,谁能帮帮我 ROLLNUM_SUB(sortList->idxRollNum, listSorted->idxRollNum); } else { ROLLNUM_SUB(listSorted->idxRollNum, sortList->idxRollNum); @@ -110,7 +110,7 @@ LITE_OS_SEC_TEXT STATIC VOID OsCheckSortLink(const LOS_DL_LIST *listHead, const { LOS_DL_LIST *tmp = listNode->pstPrev; - /* recursive check until double link round to itself */ + /* recursive check until double link round to itself */ //递归检查,直到双链接循环到自身 while (tmp != listNode) { if (tmp == listHead) { goto FOUND; @@ -125,17 +125,17 @@ LITE_OS_SEC_TEXT STATIC VOID OsCheckSortLink(const LOS_DL_LIST *listHead, const FOUND: return; } - +//删除排序链表 LITE_OS_SEC_TEXT VOID OsDeleteSortLink(const SortLinkAttribute *sortLinkHeader, SortLinkList *sortList) { LOS_DL_LIST *listObject = NULL; SortLinkList *nextSortList = NULL; UINT32 sortIndex; - sortIndex = SORT_INDEX(sortList->idxRollNum); - listObject = sortLinkHeader->sortLink + sortIndex; + sortIndex = SORT_INDEX(sortList->idxRollNum);//找出对应索引,索引是通过滚动的idxRollNum来定位的 + listObject = sortLinkHeader->sortLink + sortIndex;//找出索引对应的链表 - /* check if pstSortList node is on the right sortlink */ + /* check if pstSortList node is on the right sortlink */ //检查pstSortList节点是否在正确的sortlink上 OsCheckSortLink(listObject, &sortList->sortLinkNode); if (listObject != sortList->sortLinkNode.pstNext) { diff --git a/kernel/base/core/los_swtmr.c b/kernel/base/core/los_swtmr.c index d330de346828e81c76b7f2366bb00c0230cb8589..ea3b52f6490369187b58c2980093a1aef735403c 100644 --- a/kernel/base/core/los_swtmr.c +++ b/kernel/base/core/los_swtmr.c @@ -165,20 +165,20 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsSwtmrInit(VOID) /* * Description: Start Software Timer * Input : swtmr --- Need to start software timer - */ + */ //开始定时器 LITE_OS_SEC_TEXT VOID OsSwtmrStart(SWTMR_CTRL_S *swtmr) { if ((swtmr->ucOverrun == 0) && ((swtmr->ucMode == LOS_SWTMR_MODE_ONCE) || (swtmr->ucMode == LOS_SWTMR_MODE_OPP) || (swtmr->ucMode == LOS_SWTMR_MODE_NO_SELFDELETE))) { - SET_SORTLIST_VALUE(&(swtmr->stSortList), swtmr->uwExpiry); + SET_SORTLIST_VALUE(&(swtmr->stSortList), swtmr->uwExpiry);//设置过期时间 } else { SET_SORTLIST_VALUE(&(swtmr->stSortList), swtmr->uwInterval); } - OsAdd2SortLink(&OsPercpuGet()->swtmrSortLink, &swtmr->stSortList); + OsAdd2SortLink(&OsPercpuGet()->swtmrSortLink, &swtmr->stSortList); //通过stSortList节点挂到CPU的软件定时器排序链表上 - swtmr->ucState = OS_SWTMR_STATUS_TICKING; + swtmr->ucState = OS_SWTMR_STATUS_TICKING;//定时器状态成正在 ticking 中 #if (LOSCFG_KERNEL_SMP == YES) swtmr->uwCpuid = ArchCurrCpuid(); @@ -279,24 +279,24 @@ LITE_OS_SEC_TEXT UINT32 OsSwtmrGetNextTimeout(VOID)//获取下一个timeout /* * Description: Stop of Software Timer interface * Input : swtmr --- the software timer contrl handler - */ + */ //停止定时器 LITE_OS_SEC_TEXT STATIC VOID OsSwtmrStop(SWTMR_CTRL_S *swtmr) { SortLinkAttribute *sortLinkHeader = NULL; #if (LOSCFG_KERNEL_SMP == YES) /* - * the timer is running on the specific processor, - * we need delete the timer from that processor's sortlink. + * the timer is running on the specific processor, //计时器正在特定处理器上运行 + * we need delete the timer from that processor's sortlink. //我们需要从处理器的sortlink中删除计时器 */ - sortLinkHeader = &g_percpu[swtmr->uwCpuid].swtmrSortLink; + sortLinkHeader = &g_percpu[swtmr->uwCpuid].swtmrSortLink;//找到定时器所属CPU的 sortlind #else sortLinkHeader = &g_percpu[0].swtmrSortLink; #endif - OsDeleteSortLink(sortLinkHeader, &swtmr->stSortList); + OsDeleteSortLink(sortLinkHeader, &swtmr->stSortList);//将自己摘出去 - swtmr->ucState = OS_SWTMR_STATUS_CREATED; - swtmr->ucOverrun = 0; + swtmr->ucState = OS_SWTMR_STATUS_CREATED;//状态变成已创建,又可以再利用. + swtmr->ucOverrun = 0;//计次器清0 } /* @@ -359,13 +359,13 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_SwtmrCreate(UINT32 interval, SWTMR_UNLOCK(intSave); swtmr->uwOwnerPid = OsCurrProcessGet()->processID;//定时器进程归属设定 - swtmr->pfnHandler = handler; - swtmr->ucMode = mode; - swtmr->ucOverrun = 0; - swtmr->uwInterval = interval; - swtmr->uwExpiry = interval; - swtmr->uwArg = arg; - swtmr->ucState = OS_SWTMR_STATUS_CREATED; + swtmr->pfnHandler = handler;//时间到了的回调函数 + swtmr->ucMode = mode; //定时器模式 + swtmr->ucOverrun = 0; //重复计时的次数 + swtmr->uwInterval = interval; //周期性超时间隔 + swtmr->uwExpiry = interval; //一次性超时间隔 + swtmr->uwArg = arg; //回调函数的参数 + swtmr->ucState = OS_SWTMR_STATUS_CREATED; //已创建状态 SET_SORTLIST_VALUE(&(swtmr->stSortList), 0); *swtmrID = swtmr->usTimerID; diff --git a/kernel/base/include/los_queue_pri.h b/kernel/base/include/los_queue_pri.h index 02b817457c0caf9940261ca8caffa3be45c78c07..efe2785257478b4ef1c8d2bf4fc9c83e20997991 100644 --- a/kernel/base/include/los_queue_pri.h +++ b/kernel/base/include/los_queue_pri.h @@ -75,7 +75,7 @@ typedef struct { UINT16 queueTail; /**< Node tail */ //队列尾部节点 UINT16 readWriteableCnt[OS_QUEUE_N_RW]; /**< Count of readable or writable resources, 0:readable, 1:writable */ LOS_DL_LIST readWriteList[OS_QUEUE_N_RW]; /**< the linked list to be read or written, 0:readlist, 1:writelist */ - LOS_DL_LIST memList; /**< Pointer to the memory linked list */ //@note_? 这么尚未搞明白是啥意思 + LOS_DL_LIST memList; /**< Pointer to the memory linked list */ //@note_why 这里尚未搞明白是啥意思 } LosQueueCB;//读写队列分离 /* queue state */ diff --git a/kernel/base/include/los_sortlink_pri.h b/kernel/base/include/los_sortlink_pri.h index 39c1cd99b7c74a0e3310f8b25086f760f101c5d1..09367f295802c1a7b04518fa924850a2673220fa 100644 --- a/kernel/base/include/los_sortlink_pri.h +++ b/kernel/base/include/los_sortlink_pri.h @@ -81,7 +81,8 @@ extern "C" { #define SET_SORTLIST_VALUE(sortList, value) (((SortLinkList *)(sortList))->idxRollNum = (value)) /**************************************** @note_pic - sortLink + + sortLink[0:7] +-------->+-----------------+ | sortLinkNode | +-----------------+ @@ -106,7 +107,7 @@ typedef struct { UINT32 idxRollNum; //滚动数 } SortLinkList; typedef struct { - LOS_DL_LIST *sortLink;//排序节点 + LOS_DL_LIST *sortLink;//排序链表,看上图它指向的结构. UINT16 cursor; //游标 UINT16 reserved; //保留用 } SortLinkAttribute; diff --git a/kernel/base/misc/los_stackinfo.c b/kernel/base/misc/los_stackinfo.c index e24bdead9837f2aa3a9fc06e9c493981ec50ab5a..6c6acbaf2c6500ee7651af2d749b097e6a510755 100644 --- a/kernel/base/misc/los_stackinfo.c +++ b/kernel/base/misc/los_stackinfo.c @@ -105,7 +105,7 @@ VOID OsExcStackInfo(VOID) OsExcStackCheck(); } -/***************************************************************************************@note_pic +/*************************************************************************************** @note_pic OsExcStackInfo 各个CPU栈布局图,其他栈也是一样,CPU各核硬件栈都是紧挨着 __undef_stack(SMP) +-------------------+ <--- cpu1 top diff --git a/kernel/include/los_swtmr.h b/kernel/include/los_swtmr.h index 205539f0a2a19474fd554fc2fd857ccf3df7722b..1dff73755eb196a6cae3ec2c1c5fd9979be2e50e 100644 --- a/kernel/include/los_swtmr.h +++ b/kernel/include/los_swtmr.h @@ -229,10 +229,10 @@ extern "C" { * Software timer mode */ enum enSwTmrType { - LOS_SWTMR_MODE_ONCE, /**< One-off software timer */ - LOS_SWTMR_MODE_PERIOD, /**< Periodic software timer */ - LOS_SWTMR_MODE_NO_SELFDELETE, /**< One-off software timer, but not self-delete */ - LOS_SWTMR_MODE_OPP /**< After the one-off timer finishes timing, + LOS_SWTMR_MODE_ONCE, /**< One-off software timer */ //一次性的软件计时器 + LOS_SWTMR_MODE_PERIOD, /**< Periodic software timer */ //周期性的软件计时器 + LOS_SWTMR_MODE_NO_SELFDELETE, /**< One-off software timer, but not self-delete */ //一次性软件计时器,但不能自删除 + LOS_SWTMR_MODE_OPP /**< After the one-off timer finishes timing, //一次性完成后启用周期性软件计时器,鸿蒙目前暂时不支持这种方式 the periodic software timer is enabled. This mode is not supported temporarily. */ }; @@ -257,27 +257,27 @@ enum enSwTmrType { *