日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OS_CORE.C(11)

發(fā)布時(shí)間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS_CORE.C(11) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OS_SchedNew(void)找到將要運(yùn)行的最高優(yōu)先級(jí)任務(wù)函數(shù)

和任務(wù)調(diào)度函數(shù)OS_Sched(void):

/* ********************************************************************************************************* * FIND HIGHEST PRIORITY TASK READY TO RUN * 找到將要運(yùn)行的最高優(yōu)先級(jí)任務(wù) * Description: This function is called by other uC/OS-II services to determine the highest priority task * that is ready to run. The global variable 'OSPrioHighRdy' is changed accordingly. *描述: 該功能被其他服務(wù)調(diào)用,用來(lái)決定將要運(yùn)行的最高優(yōu)先級(jí)任務(wù)是什么。全局變量OSPrioHighRdy相應(yīng)改變。 * Arguments : none *參數(shù):無(wú) * Returns : none *返回值:無(wú) * Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. * 2) Interrupts are assumed to be disabled when this function is called.注釋: 1)該功能是內(nèi)部函數(shù),你的應(yīng)用程序不能調(diào)用。2)當(dāng)這個(gè)功能被調(diào)用的時(shí)候不能被中斷(原子函數(shù)) ********************************************************************************************************* */static void OS_SchedNew(void) /*找到將要被調(diào)度的任務(wù)*/ { #if OS_LOWEST_PRIO <= 63u /*優(yōu)先級(jí)<=63,支持64位任務(wù)*/INT8U y;y = OSUnMapTbl[OSRdyGrp]; OSPrioHighRdy = (INT8U)((y << 3u) + OSUnMapTbl[OSRdyTbl[y]]);/*計(jì)算最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)*/ #else /* We support up to 256 tasks支持256個(gè)任務(wù) */INT8U y;OS_PRIO *ptbl; /*ptb1是指向事件控制塊的指針*/if ((OSRdyGrp & 0xFFu) != 0u) /*如果就緒組不為0*/{ y = OSUnMapTbl[OSRdyGrp & 0xFFu]; /*y為在表中查到的數(shù)*/}else {y = OSUnMapTbl[(OS_PRIO)(OSRdyGrp >> 8u) & 0xFFu] + 8u;/*將y置為8*/}ptbl = &OSRdyTbl[y];if ((*ptbl & 0xFFu) != 0u) /*計(jì)算出優(yōu)先級(jí)*/{OSPrioHighRdy = (INT8U)((y << 4u) + OSUnMapTbl[(*ptbl & 0xFFu)]);}else {OSPrioHighRdy = (INT8U)((y << 4u) + OSUnMapTbl[(OS_PRIO)(*ptbl >> 8u) & 0xFFu] + 8u);} #endif }

/*$PAGE*/ /*2018/2/8 ********************************************************************************************************* * SCHEDULER * 調(diào)度 * Description: This function is called by other uC/OS-II services to determine whether a new, high * priority task has been made ready to run. This function is invoked by TASK level code * and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling). *描述:該功能被其他服務(wù)調(diào)用,用來(lái)決定是否一個(gè)新的、高優(yōu)先級(jí)任務(wù)已經(jīng)準(zhǔn)備好運(yùn)行了。任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()完成的。中斷級(jí)的調(diào)度是由另一個(gè)函數(shù)OSIntExt()完成的). * Arguments : none *參數(shù):無(wú) * Returns : none *返回值:無(wú) * Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. * 2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock()) 注釋: 1)該功能為內(nèi)部函數(shù),你的應(yīng)用程序不能調(diào)用2) 給調(diào)度器上鎖用于禁止任務(wù)調(diào)度 (查看 OSSchedLock()函數(shù)) ********************************************************************************************************* */void OS_Sched(void) /*任務(wù)調(diào)度函數(shù)*/ { #if OS_CRITICAL_METHOD == 3u /*中斷函數(shù)被設(shè)定為模式3*/OS_CPU_SR cpu_sr = 0u; #endifOS_ENTER_CRITICAL(); /*關(guān)中斷*/if (OSIntNesting == 0u) { /*如果所有的中斷都完成了 */if (OSLockNesting == 0u) { /* 并且調(diào)度器沒(méi)有被鎖 */OS_SchedNew(); /*找到要運(yùn)行的任務(wù)*/OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /*為實(shí)現(xiàn)任務(wù)切換,OSTCBHighRdy必須指向優(yōu)先級(jí)最高的那個(gè)任務(wù)控制塊OS_TCB,這是通過(guò)將以O(shè)SPrioHighRdy為下標(biāo)的OSTCBPrioTbl[]數(shù)組中的那個(gè)元素賦給OSTCBHighRdy來(lái)實(shí)現(xiàn)的*/if (OSPrioHighRdy != OSPrioCur) { /*找到最高優(yōu)先級(jí)任務(wù)后,函數(shù)檢查這個(gè)優(yōu)先級(jí)最高的任務(wù)是否是當(dāng)前正在運(yùn)行的任務(wù),以避免不必要的任務(wù)調(diào)度,多花時(shí)間*/#if OS_TASK_PROFILE_EN > 0uOSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this task */#endifOSCtxSwCtr++; /*任務(wù)切換計(jì)數(shù)值加1,統(tǒng)計(jì)切換次數(shù) */OS_TASK_SW(); /*進(jìn)行實(shí)際的任務(wù)交換 */}}}OS_EXIT_CRITICAL(); /*開(kāi)中斷*/ }

這兩個(gè)函數(shù)中讓人費(fèi)解的還是計(jì)算優(yōu)先級(jí)那一塊。回頭看了(9)中介紹的有關(guān)知識(shí),感覺(jué)描述的還是不夠清楚。有時(shí)間重新梳理一下,盡量描述詳盡。

?OS_StrLen(INT8U *psrc)確定一個(gè)ASCII字符串的長(zhǎng)度的函數(shù):

/*$PAGE*/ /*2018/2/8 ********************************************************************************************************* * DETERMINE THE LENGTH OF AN ASCII STRING * 確定一個(gè)ASCII字符串的長(zhǎng)度 * Description: This function is called by other uC/OS-II services to determine the size of an ASCII string * (excluding the NUL character). *描述:該功能被其他服務(wù)調(diào)用,用來(lái)確定一個(gè)ASCII字符串的長(zhǎng)度,包括最后的null字符。 * Arguments : psrc is a pointer to the string for which we need to know the size. *參數(shù): --psrc指向字符串 * Returns : The size of the string (excluding the NUL terminating character) *返回值: 返回字符串的大小(包括最后空終止字符)。 * Notes : 1) This function is INTERNAL to uC/OS-II and your application should not call it. * 2) The string to check must be less than 255 characters long.注釋: 1)該功能是內(nèi)部函數(shù),你的應(yīng)用程序不能調(diào)用它;2)要確定的字符串必須小于255字符。 ********************************************************************************************************* */#if (OS_EVENT_NAME_EN > 0u) || (OS_FLAG_NAME_EN > 0u) || (OS_MEM_NAME_EN > 0u) || (OS_TASK_NAME_EN > 0u) || (OS_TMR_CFG_NAME_EN > 0u) INT8U OS_StrLen(INT8U *psrc) {INT8U len;len = 0u; /*剛開(kāi)始初始化len為0*/while (*psrc != OS_ASCII_NUL) /*字符串沒(méi)有到結(jié)尾*/{psrc++; /*指針后移*/len++; /*長(zhǎng)度加1*/} return (len); /*返回長(zhǎng)度len*/ } #endif

這個(gè)函數(shù)不需要多說(shuō)。


?OS_TaskIdle(void *p_arg)空閑任務(wù)函數(shù):

/*$PAGE*/ /*2018/2/8 ********************************************************************************************************* * IDLE TASK * 空閑任務(wù) * Description: This task is internal to uC/OS-II and executes whenever no other higher priority tasks * executes because they are ALL waiting for event(s) to occur. *描述: 這個(gè)函數(shù)是uC/OS-II內(nèi)部函數(shù),uC/OS-II總要建立一個(gè)空閑任務(wù),這個(gè)任務(wù)在沒(méi)有其它任務(wù)進(jìn)入就緒態(tài)時(shí)投入運(yùn)行。 這個(gè)空閑任務(wù)永遠(yuǎn)設(shè)為最低優(yōu)先級(jí),即OS_LOWEST_PRIO.空閑任務(wù)不可能被應(yīng)用軟件刪除。 * Arguments : none *參數(shù):無(wú) * Returns : none *返回值:無(wú) * Note(s) : 1) OSTaskIdleHook() is called after the critical section to ensure that interrupts will be * enabled for at least a few instructions. On some processors (ex. Philips XA), enabling * and then disabling interrupts didn't allow the processor enough time to have interrupts * enabled before they were disabled again. uC/OS-II would thus never recognize * interrupts. * 2) This hook has been added to allow you to do such things as STOP the CPU to conserve * power.注釋:1)OSTaskIdleHook()......(自行百度)2)讓CPU執(zhí)行STOP指令,從而進(jìn)入低功耗模式,當(dāng)應(yīng)用系統(tǒng)由電池供電時(shí),這種方式特別有用。 ********************************************************************************************************* */void OS_TaskIdle(void *p_arg) { #if OS_CRITICAL_METHOD == 3u /* 中斷號(hào)設(shè)置為3 */OS_CPU_SR cpu_sr = 0u; #endifp_arg = p_arg; /*賦值給自己本身,防止編譯器出現(xiàn)錯(cuò)誤*/for (;;) {OS_ENTER_CRITICAL(); /*關(guān)中斷*/OSIdleCtr++; /*空閑任務(wù)數(shù)量加1*/OS_EXIT_CRITICAL(); /*開(kāi)中斷*/OSTaskIdleHook(); /* 調(diào)用用戶自定義的鉤子函數(shù) */} }

空閑任務(wù)函數(shù)主要是統(tǒng)計(jì)空閑任務(wù)數(shù)量,調(diào)用用戶自定義的鉤子函數(shù)。

OS_TaskStatStkChk(void)檢查所有的任務(wù)堆棧函數(shù):

/*$PAGE*/ /*2018/2/9 ********************************************************************************************************* * CHECK ALL TASK STACKS * 檢查所有的任務(wù)堆棧 * Description: This function is called by OS_TaskStat() to check the stacks of each active task. *描述:該功能被OS_TaskStat()統(tǒng)計(jì)任務(wù)調(diào)用,用來(lái)家產(chǎn)每個(gè)活躍的任務(wù)的堆棧 * Arguments : none *參數(shù):無(wú) * Returns : none 返回值:無(wú) ********************************************************************************************************* */#if (OS_TASK_STAT_STK_CHK_EN > 0u) && (OS_TASK_CREATE_EXT_EN > 0u) void OS_TaskStatStkChk(void) {OS_TCB *ptcb;OS_STK_DATA stk_data;INT8U err;INT8U prio;for (prio = 0u; prio <= OS_TASK_IDLE_PRIO; prio++) {err = OSTaskStkChk(prio, &stk_data); /*檢測(cè)任務(wù)是否有問(wèn)題*/if (err == OS_ERR_NONE) /*如果沒(méi)問(wèn)題*/{ptcb = OSTCBPrioTbl[prio]; /*從優(yōu)先級(jí)為0的任務(wù)開(kāi)始檢查*/if (ptcb != (OS_TCB *)0) { if (ptcb != OS_TCB_RESERVED) /*確定任務(wù)是有效任務(wù)*/{ #if OS_TASK_PROFILE_EN > 0u#if OS_STK_GROWTH == 1u/*向下增長(zhǎng)方式,就是從高地址向低地址增長(zhǎng),棧頂在高地址端。*/ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom + ptcb->OSTCBStkSize;/*改變棧底指針位置*/#elseptcb->OSTCBStkBase = ptcb->OSTCBStkBottom - ptcb->OSTCBStkSize;/*改變棧底指針位置*/#endifptcb->OSTCBStkUsed = stk_data.OSUsed; /* 存儲(chǔ)已經(jīng)使用的字節(jié)數(shù)*/#endif}}}} } #endif上面的:

OS_STK_DATA stk_data;這個(gè)語(yǔ)句中,解釋一下OS_STK_DATA結(jié)構(gòu)體,方便大家理解:

/* *2018/1/30 ********************************************************************************************************* * TASK STACK DATA * 任務(wù)堆棧數(shù)據(jù) ********************************************************************************************************* */#if OS_TASK_CREATE_EXT_EN > 0u typedef struct os_stk_data {INT32U OSFree; /* Number of free bytes on the stack 堆棧中未使用的字節(jié)數(shù) */INT32U OSUsed; /* Number of bytes used on the stack 堆棧中已使用的字節(jié)數(shù) */ } OS_STK_DATA; #endif

?OS_TaskStat(void *p_arg)統(tǒng)計(jì)任務(wù)函數(shù):

/*$PAGE*/ /*2018/2/8 ********************************************************************************************************* * STATISTICS TASK * 統(tǒng)計(jì)任務(wù) * Description: This task is internal to uC/OS-II and is used to compute some statistics about the * multitasking environment. Specifically, OS_TaskStat() computes the CPU usage. * CPU usage is determined by: *描述:這個(gè)任務(wù)是uc/os-ii內(nèi)部任務(wù),并且被用來(lái)計(jì)算一些關(guān)于多任務(wù)環(huán)境的統(tǒng)計(jì)數(shù)據(jù)。最關(guān)鍵的是用OS_TaskStat()函數(shù)計(jì)算CPU的使用率 * OSIdleCtr * OSCPUUsage = 100 * (1 - ------------) (units are in %) * OSIdleCtrMax * cpu的使用率=100*(1-空閑任務(wù)數(shù)/設(shè)定的空閑任務(wù)總數(shù)) * Arguments : parg this pointer is not used at this time. *參數(shù): --parg:這個(gè)時(shí)候不使用parg * Returns : none *返回值: 無(wú) * Notes : 1) This task runs at a priority level higher than the idle task. In fact, it runs at the * next higher priority, OS_TASK_IDLE_PRIO-1. * 2) You can disable this task by setting the configuration #define OS_TASK_STAT_EN to 0. * 3) You MUST have at least a delay of 2/10 seconds to allow for the system to establish the * maximum value for the idle counter.注釋: 1) uC/OS-II已經(jīng)將空閑任務(wù)的優(yōu)先級(jí)設(shè)為最低,即OS_LOWEST_PR10,統(tǒng)計(jì)任務(wù)的優(yōu)先級(jí)設(shè)為次低,OS_LOWEST_PR10-1.2)你可以通過(guò)設(shè)置配置禁用該任務(wù) #define OS_TASK_STAT_EN to 0.3)你必須有至少0.2s(2個(gè)時(shí)鐘節(jié)拍)的延遲來(lái)使系統(tǒng)能夠?yàn)榭臻e任務(wù)計(jì)數(shù)器設(shè)置最大值 ********************************************************************************************************* */#if OS_TASK_STAT_EN > 0u void OS_TaskStat(void *p_arg) /*任務(wù)統(tǒng)計(jì)函數(shù)*/ { #if OS_CRITICAL_METHOD == 3u /*將中斷類型設(shè)置為3*/OS_CPU_SR cpu_sr = 0u; #endifp_arg = p_arg; /*自己給自己賦值,防止編譯出現(xiàn)錯(cuò)誤*/while (OSStatRdy == OS_FALSE) /*如果統(tǒng)計(jì)任務(wù)狀態(tài)不是就緒的,通過(guò)延遲函數(shù)OSTimeDly()等待*/{ OSTimeDly(2u * OS_TICKS_PER_SEC / 10u); /* Wait until statistic task is ready*/}OSIdleCtrMax /= 100uL; /*將最大空閑計(jì)數(shù)值對(duì)100求整*/if (OSIdleCtrMax == 0uL) /*如果最大空閑計(jì)數(shù)值為0*/{OSCPUUsage = 0u; /*CPU使用率為0*/#if OS_TASK_SUSPEND_EN > 0u /*如果允許任務(wù)掛起*/(void)OSTaskSuspend(OS_PRIO_SELF);/*調(diào)用任務(wù)掛起函數(shù)(參數(shù)為自身的優(yōu)先級(jí))*/#else /*不允許任務(wù)掛起*/for (;;) {OSTimeDly(OS_TICKS_PER_SEC); /*就通過(guò)延遲函數(shù)進(jìn)行等待*/}#endif}for (;;) {OS_ENTER_CRITICAL(); /*關(guān)中斷*/OSIdleCtrRun = OSIdleCtr; /*將此時(shí)統(tǒng)計(jì)的空閑計(jì)數(shù)值賦給OSIdleCtrRun這個(gè)臨時(shí)變量*/OSIdleCtr = 0uL; /*將OSIdleCtr重新設(shè)置為0,然后進(jìn)行下一秒鐘的計(jì)數(shù)*/OS_EXIT_CRITICAL(); /*開(kāi)中斷*/OSCPUUsage = (INT8U)(100uL - OSIdleCtrRun / OSIdleCtrMax); /*計(jì)算CPU的使用率*/OSTaskStatHook(); /*執(zhí)行用戶自定義的鉤子函數(shù)*/#if (OS_TASK_STAT_STK_CHK_EN > 0u) && (OS_TASK_CREATE_EXT_EN > 0u)OS_TaskStatStkChk(); /*任務(wù)堆棧檢測(cè)*/#endifOSTimeDly(OS_TICKS_PER_SEC / 10u); /*調(diào)用延遲函數(shù)OSTimeDly()將自身延時(shí)1個(gè)時(shí)鐘節(jié)拍以停止自身的運(yùn)行*/} } #endif

在這個(gè)函數(shù)中想解釋一下幾點(diǎn):

1.任務(wù)統(tǒng)計(jì)函數(shù)中最主要的幾個(gè)語(yǔ)句是:

OSIdleCtrMax /= 100uL; /*將最大空閑計(jì)數(shù)值對(duì)100求整*/ OSIdleCtrRun = OSIdleCtr; /*將此時(shí)統(tǒng)計(jì)的空閑計(jì)數(shù)值賦給OSIdleCtrRun這個(gè)臨時(shí)變量*/ OSIdleCtr = 0uL; /*將OSIdleCtr重新設(shè)置為0,然后進(jìn)行下一秒鐘的計(jì)數(shù)*/ OSCPUUsage = (INT8U)(100uL - OSIdleCtrRun / OSIdleCtrMax); /*計(jì)算CPU的使用率*/

2.在這個(gè)函數(shù)中:解釋一下下面這個(gè)語(yǔ)句:

OSIdleCtrMax /= 100uL; /*將最大空閑計(jì)數(shù)值對(duì)100求整*/

大家可能看到這個(gè)語(yǔ)句時(shí)和我有著同樣的疑問(wèn):為什么要對(duì)100取整?有什么必要性?

?這里將最大值除以100是為了之后的計(jì)算。若是不除100,根據(jù)前面提到的公式來(lái)的話,?OSIdleCtr / OSIdleCtrMax這里我們希望得到的是一個(gè)浮點(diǎn)數(shù),也就是一個(gè)小于1的小數(shù),但是因?yàn)镺SIdleCtr、OSIdleCtrMax 都是整數(shù),且OSIdleCtr < OSIdleCtrMax,則兩個(gè)數(shù)相除就必定為0,則OSCPUUsage 始終會(huì)等于100。所以先OSIdleCtrMax /100,然后再OSIdleCtrRun / OSIdleCtrMax,這個(gè)結(jié)果就不會(huì)是一個(gè)小于0的數(shù),這個(gè)時(shí)候就不會(huì)出現(xiàn)始終等于0的情況 。同時(shí)在算數(shù)邏輯上100 - OSIdleCtrRun / OSIdleCtrMax=100 -OSIdleCtrRun *100/ OSIdleCtrMax = 100(1 -OSIdleCtrRun / OSIdleCtrMax )。這樣計(jì)算能夠接近數(shù)學(xué)運(yùn)算的結(jié)果。

3.第三個(gè)關(guān)于這個(gè)函數(shù)的疑問(wèn)是:在for循環(huán)最后的一行語(yǔ)句:

OSTimeDly(OS_TICKS_PER_SEC / 10u); /*調(diào)用延遲函數(shù)OSTimeDly()將自身延時(shí)1個(gè)時(shí)鐘節(jié)拍以停止自身的運(yùn)行*/

我們知道這個(gè)語(yǔ)句是延遲函數(shù)。但是這里為什么要用呢?

實(shí)際上,OSTimeDly()函數(shù)可以看作一個(gè)延時(shí)函數(shù),但是它真正的內(nèi)涵是將CPU讓給其他的任務(wù)。將自身的任務(wù)延時(shí),在OSTimeDly(Ticks)這段時(shí)間內(nèi)調(diào)用OS_Sched()函數(shù)找出任務(wù)就緒列表中優(yōu)先級(jí)最高的任務(wù)并將當(dāng)前CPU切換到該任務(wù)。

關(guān)于這個(gè)函數(shù)就介紹到這里。


OS_TCBInit(INT8U ? ?prio, OS_STK ?*ptos,OS_STK ?*pbos,INT16U ? id,INT32U ? stk_size,void ? ?*pext,INT16U ? opt)

初始化TCB函數(shù):

/*$PAGE*/ /*2018/2/9 ********************************************************************************************************* * INITIALIZE TCB * 初始化TCB * Description: This function is internal to uC/OS-II and is used to initialize a Task Control Block when * a task is created (see OSTaskCreate() and OSTaskCreateExt()). *描述:該功能是內(nèi)部函數(shù),當(dāng)有任務(wù)被創(chuàng)建時(shí)(詳情見(jiàn)OSTaskCreate()函數(shù)和OSTaskCreateExt()函數(shù)),該函數(shù)被用來(lái)初始化任務(wù)控制塊, * Arguments : prio is the priority of the task being created *參數(shù): --prio是被創(chuàng)建任務(wù)的優(yōu)先級(jí) * ptos is a pointer to the task's top-of-stack assuming that the CPU registers * have been placed on the stack. Note that the top-of-stack corresponds to a * 'high' memory location is OS_STK_GROWTH is set to 1 and a 'low' memory * location if OS_STK_GROWTH is set to 0. Note that stack growth is CPU * specific. * --ptos:假設(shè)CPU寄存器被堆棧占用,ptos就是指向棧頂?shù)闹羔槨W⒁?#xff1a;如果內(nèi)存增長(zhǎng)方式被設(shè)定為1(從高地址到低地址),那么ptos(棧頂)指向的是高地址;相反,如果增長(zhǎng)方式被設(shè)定為0(從低地址到高地址),那么ptos(棧頂)指向的是低地址。具體是什么增長(zhǎng)方式取決于不同的CPU * pbos is a pointer to the bottom of stack. A NULL pointer is passed if called by * 'OSTaskCreate()'. * --pbos:指向棧底的指針。如果是使用OSTaskCreate()創(chuàng)建任務(wù),pbos被設(shè)定為null空。 * id is the task's ID (0..65535) * --id是棧的ID號(hào) * stk_size is the size of the stack (in 'stack units'). If the stack units are INT8Us * then, 'stk_size' contains the number of bytes for the stack. If the stack * units are INT32Us then, the stack contains '4 * stk_size' bytes. The stack * units are established by the #define constant OS_STK which is CPU * specific. 'stk_size' is 0 if called by 'OSTaskCreate()'. * --stk_size:是棧的大小(或者準(zhǔn)確講師棧單元的大小)。如果棧單元是8位的,stk_size值得就是8位可以表示的字節(jié)大小(2的8次方字節(jié))。如果棧單元室32位的,這個(gè)棧就有4*stk_size字節(jié)這么大。棧單元是通過(guò) #define constant OS_STK來(lái)定義的。與CPU類型相關(guān) * pext is a pointer to a user supplied memory area that is used to extend the task * control block. This allows you to store the contents of floating-point * registers, MMU registers or anything else you could find useful during a * context switch. You can even assign a name to each task and store this name * in this TCB extension. A NULL pointer is passed if called by OSTaskCreate(). * --pext擴(kuò)展指針:指向用戶可使用的內(nèi)存單元,該內(nèi)存單元是為了擴(kuò)大任務(wù)控制塊。這樣可以存儲(chǔ)浮點(diǎn)數(shù)寄存器、MMU寄存器或者其他在上下文交換時(shí)可用的寄存器中的內(nèi)容。甚至可以設(shè)定每個(gè)任務(wù)的名稱,并將該名稱存儲(chǔ)在TCB擴(kuò)展中。 * opt options as passed to 'OSTaskCreateExt()' or, * 0 if called from 'OSTaskCreate()'. * --opt:如果是OSTaskCreateExt()調(diào)用,代表OS_TCB的選擇項(xiàng),如果是OSTaskCreate()調(diào)用,opt為0 * Returns : OS_ERR_NONE if the call was successful * OS_ERR_TASK_NO_MORE_TCB if there are no more free TCBs to be allocated and thus, the task cannot * be created. *返回值:OS_ERR_NONE:調(diào)用成功返回該值OS_ERR_TASK_NO_MORE_TCB:如果沒(méi)有空閑的TCB了,任務(wù)不能被創(chuàng)建,返回該值 * Note : This function is INTERNAL to uC/OS-II and your application should not call it. 注釋: 該功能是內(nèi)部函數(shù),你的應(yīng)用程序不能調(diào)用 ********************************************************************************************************* */INT8U OS_TCBInit(INT8U prio, OS_STK *ptos,OS_STK *pbos,INT16U id,INT32U stk_size,void *pext,INT16U opt) {OS_TCB *ptcb; /*指向TCB的指針*/ #if OS_CRITICAL_METHOD == 3u /*將中斷類型設(shè)置為3*/OS_CPU_SR cpu_sr = 0u; #endif #if OS_TASK_REG_TBL_SIZE > 0uINT8U i; #endifOS_ENTER_CRITICAL(); /*關(guān)中斷*/ptcb = OSTCBFreeList; /*ptcb指針指向空閑TCB列表,來(lái)獲得一個(gè)空閑的TCB*/if (ptcb != (OS_TCB *)0) /*如果ptcb不為0,即還有空閑的TCB*/{OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list更新一下空閑TCB列表指針(起始指針后移一個(gè))*/OS_EXIT_CRITICAL(); /*關(guān)中斷*/ptcb->OSTCBStkPtr = ptos; /*將棧頂指針存儲(chǔ)在ptch中的OSTCBStkPtr */ptcb->OSTCBPrio = prio; /*將優(yōu)先級(jí)存儲(chǔ)在OSTCBPrio中*/ptcb->OSTCBStat = OS_STAT_RDY; /*將TCB的狀態(tài)設(shè)置為就緒態(tài)*/ptcb->OSTCBStatPend = OS_STAT_PEND_OK; /* Clear pend status將掛起狀態(tài)設(shè)置為OS_STAT_PEND_OK*/ptcb->OSTCBDly = 0u; /* Task is not delayed無(wú)任務(wù)延遲,直接執(zhí)行*/#if OS_TASK_CREATE_EXT_EN > 0u /*如果創(chuàng)建的是擴(kuò)展型任務(wù),存儲(chǔ)有關(guān)的信息*/ptcb->OSTCBExtPtr = pext; ptcb->OSTCBStkSize = stk_size; ptcb->OSTCBStkBottom = pbos; ptcb->OSTCBOpt = opt; ptcb->OSTCBId = id; #else /*不是擴(kuò)展型任務(wù)*/pext = pext; /*pext只針對(duì)擴(kuò)展型任務(wù),所以這里自己給自己賦值,防止編譯出錯(cuò)*/stk_size = stk_size;pbos = pbos;opt = opt;id = id;#endif#if OS_TASK_DEL_EN > 0uptcb->OSTCBDelReq = OS_ERR_NONE;/*將刪除TCB的請(qǐng)求設(shè)置為OS_ERR_NONE*//*如果可以刪除任務(wù)本身,可以從每個(gè)OS_TCB中節(jié)省出一個(gè)布爾量*/#endif/*提前進(jìn)行相關(guān)計(jì)算,為了節(jié)省CPU的操作事件*/#if OS_LOWEST_PRIO <= 63u ptcb->OSTCBY = (INT8U)(prio >> 3u);ptcb->OSTCBX = (INT8U)(prio & 0x07u);#else ptcb->OSTCBY = (INT8U)((INT8U)(prio >> 4u) & 0xFFu);ptcb->OSTCBX = (INT8U)(prio & 0x0Fu);#endif/* Pre-compute BitX and BitY */ptcb->OSTCBBitY = (OS_PRIO)(1uL << ptcb->OSTCBY);/*提前計(jì)算位掩碼*/ptcb->OSTCBBitX = (OS_PRIO)(1uL << ptcb->OSTCBX);#if (OS_EVENT_EN)ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* 如果不打算在應(yīng)用程序中使用各類事件,OS_TCB中OSTCBEventPt就不會(huì)出現(xiàn)任務(wù)就不會(huì)被掛起Task is not pending on an event*/#if (OS_EVENT_MULTI_EN > 0u)ptcb->OSTCBEventMultiPtr = (OS_EVENT **)0; /* Task is not pending on any events任務(wù)不會(huì)因?yàn)槿魏问录粧炱?/#endif#endif#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u) && (OS_TASK_DEL_EN > 0u)ptcb->OSTCBFlagNode = (OS_FLAG_NODE *)0; /* Task is not pending on an event flag任務(wù)不會(huì)因?yàn)槭录?biāo)志被掛起 */#endif#if (OS_MBOX_EN > 0u) || ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u))ptcb->OSTCBMsg = (void *)0; /* No message received消息數(shù)設(shè)為0*/#endif#if OS_TASK_PROFILE_EN > 0uptcb->OSTCBCtxSwCtr = 0uL; /* Initialize profiling variables初始化分析變量 */ptcb->OSTCBCyclesStart = 0uL;ptcb->OSTCBCyclesTot = 0uL;ptcb->OSTCBStkBase = (OS_STK *)0;ptcb->OSTCBStkUsed = 0uL;#endif#if OS_TASK_NAME_EN > 0uptcb->OSTCBTaskName = (INT8U *)(void *)"?";/*初始化TCB任務(wù)名稱*/#endif#if OS_TASK_REG_TBL_SIZE > 0u /* Initialize the task variables初始化任務(wù)變量*/for (i = 0u; i < OS_TASK_REG_TBL_SIZE; i++) {ptcb->OSTCBRegTbl[i] = 0u;}#endifOSTCBInitHook(ptcb); /*初始化鉤子函數(shù)*/OSTaskCreateHook(ptcb); /* Call user defined hook調(diào)用用戶自定義的鉤子函數(shù)*/OS_ENTER_CRITICAL(); /*關(guān)中斷*/OSTCBPrioTbl[prio] = ptcb; ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain鏈接到任務(wù)控制塊鏈接串*/ptcb->OSTCBPrev = (OS_TCB *)0; if (OSTCBList != (OS_TCB *)0) {OSTCBList->OSTCBPrev = ptcb;}OSTCBList = ptcb;OSRdyGrp |= ptcb->OSTCBBitY; /*通過(guò)掩碼計(jì)算就緒組號(hào)*/OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;/*通過(guò)掩碼計(jì)算在就緒表中的位置*/OSTaskCtr++; /* 任務(wù)數(shù)目加1*/OS_EXIT_CRITICAL(); /*開(kāi)中斷*/return (OS_ERR_NONE);}OS_EXIT_CRITICAL(); /*開(kāi)中斷*/return (OS_ERR_TASK_NO_MORE_TCB); }
相關(guān)介紹:http://blog.csdn.net/m0_37411189/article/details/72967962

解析在創(chuàng)建任務(wù)時(shí)對(duì)該任務(wù)控制塊的初始化過(guò)程(三步走):

  • 被創(chuàng)建任務(wù)從空閑任務(wù)控制鏈表(OSTCBFreeList)中獲取一個(gè)任務(wù)控制塊?

  • 2.用任務(wù)的屬性對(duì)任務(wù)控制塊各個(gè)成員進(jìn)行賦值


    3.把這個(gè)任務(wù)控制塊鏈入到任務(wù)控制塊鏈表(OSTCBList),并在任務(wù)就緒表中登記該任務(wù)


    個(gè)人感覺(jué)源代碼讀起來(lái)有些費(fèi)神,但是這三個(gè)圖表現(xiàn)的很清楚。

    到這里,OS_CORE.C文件讀完。

    總結(jié)

    以上是生活随笔為你收集整理的OS_CORE.C(11)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    91色亚洲 | 中文一区二区三区在线观看 | 免费看搞黄视频网站 | 91亚洲综合 | 91av蜜桃 | 免费的国产精品 | 国产精品久久久久久久久费观看 | 日本精品视频在线观看 | 色婷婷电影 | 91香蕉视频污在线 | 在线av资源| av丝袜在线| 亚洲欧美成人在线 | 91精品导航 | 永久精品视频 | 永久免费的av电影 | 国产另类av| 综合网中文字幕 | 国产精品区二区三区日本 | 中文字幕传媒 | 午夜精品婷婷 | 亚洲精品自在在线观看 | 99久久精品免费看国产麻豆 | 男女男视频 | av网站地址| 国产黄色片在线免费观看 | 欧美国产亚洲精品久久久8v | 成人av中文字幕 | 狠狠色噜噜狠狠狠 | 国产一区免费看 | 久久久网址 | 欧美日韩不卡在线 | 99视频在线精品国自产拍免费观看 | 中文字幕.av.在线 | 国产五码一区 | avwww在线观看 | 91一区二区三区在线观看 | 91成人免费 | 91av视频免费观看 | 精品亚洲一区二区 | 99精品网站 | 国产在线观看免费av | av在线h| 亚洲最大的av网站 | 日韩欧美电影网 | 免费成人在线视频网站 | 99久久这里有精品 | 99999精品| 精品国产免费人成在线观看 | 国产精品成人自产拍在线观看 | 日韩福利在线观看 | 欧美日韩在线视频观看 | 国产免费小视频 | 日本在线观看一区二区 | 久久久精品久久 | 成人精品国产免费网站 | 97成人在线观看 | 日本最新一区二区三区 | 九九热精 | 国产精久久 | 亚洲欧美999 | 日日日干 | 99久久精品久久久久久清纯 | 热久久影视 | 午夜视频在线观看欧美 | 欧美日韩不卡在线视频 | 亚洲精品免费在线 | 天无日天天操天天干 | 亚洲综合小说电影qvod | 免费一级片视频 | 国产精品理论片在线播放 | 欧美成人高清 | 天操夜夜操 | 久久首页| 色视频网站免费观看 | 日韩综合视频在线观看 | 精品国产乱码久久久久久1区二区 | 天天综合网~永久入口 | 亚洲国产精品久久久久久 | 色999视频| www激情网| 久久黄色小说视频 | 青青草久草在线 | 伊人五月天婷婷 | 五月开心激情网 | 麻豆视频国产 | 黄色亚洲大片免费在线观看 | 超碰人人乐 | 麻豆一级视频 | 久久成人综合视频 | 精品av网站| 亚洲精品88欧美一区二区 | 天天操天天添天天吹 | 在线观看一区二区视频 | 亚洲国产一区在线观看 | 成人黄大片视频在线观看 | 夜夜操狠狠操 | 亚洲专区视频在线观看 | 精品国产一区二区三区日日嗨 | 免费一级片久久 | 最新国产在线观看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 777视频在线观看 | 日本美女xx | 久久免费视频网 | 一本一道久久a久久精品蜜桃 | 日本中文字幕影院 | 欧美极品xxxx | 国产999精品久久久影片官网 | 国产a视频免费观看 | 91av在线免费观看 | 亚洲三级网 | 天天插狠狠干 | 日本精品久久久久久 | 国产真实在线 | 国产不卡在线观看 | 国产一区精品在线观看 | www视频在线观看 | 欧美精品久久久久性色 | 成人网页在线免费观看 | 丁香综合网 | 丁香九月激情 | 久久久久观看 | 国产手机在线播放 | 精品一区二区三区久久久 | 91网页版免费观看 | 99久久精品免费看国产 | 91免费观看网站 | 亚洲久草视频 | 国产精品手机在线观看 | 久久极品 | 日日夜夜天天 | 69精品视频在线观看 | 免费观看黄色12片一级视频 | 天天操·夜夜操 | 久草青青在线观看 | 久久精品毛片 | 99久久日韩精品免费热麻豆美女 | 欧美激情一区不卡 | 开心综合网| 日韩在线高清 | 免费人成在线观看 | 在线观看国产麻豆 | 免费a级黄色毛片 | 久久久久久国产精品久久 | 在线导航福利 | 胖bbbb搡bbbb擦bbbb| 久久免费a | 国产一级片视频 | 久久国产精彩视频 | www.色的 | 丁香婷婷自拍 | 亚洲精品午夜国产va久久成人 | 高清色免费 | 五月天六月色 | 亚洲视频一区二区三区在线观看 | 国产96在线观看 | 91久久黄色 | 99久久久久久久 | 久久精品视频播放 | 国产成人一区二区三区 | 中文字幕在线视频精品 | 一级α片免费看 | 午夜精品久久久久久久久久 | www.国产精品 | 欧美大片aaa | 超碰在线9 | 国产不卡网站 | 日本精品久久久久影院 | 91精品在线免费视频 | 欧美一级裸体视频 | 欧美日韩激情视频8区 | 亚洲精品视频在线观看网站 | 国产亚洲精品日韩在线tv黄 | 国产精品久久久久久久久久99 | 91中文字幕在线播放 | 国产 日韩 欧美 中文 在线播放 | 在线av资源 | 日韩欧美视频免费看 | 91精品国产综合久久福利 | 四虎永久免费在线观看 | 日韩欧美在线第一页 | 天天鲁一鲁摸一摸爽一爽 | 婷婷激情5月天 | 免费国产黄线在线观看视频 | 欧美电影黄色 | 久久这里只有精品久久 | 久久久国产一区二区三区四区小说 | 97色视频在线 | 亚洲日日射 | 中文字幕一区二区三区视频 | 久久1电影院 | 国产精品久久久久婷婷 | 日韩a欧美| 日韩视频一区二区在线观看 | 久久久99久久 | 久久99国产精品免费网站 | 亚洲理论电影网 | 午夜aaaa | 国产成人av免费在线观看 | 久久精品这里精品 | 国内99视频 | www.天堂av| 美女视频一区二区 | 成人av在线看 | 最新av免费在线 | 婷婷色五 | 狠狠色丁香婷婷综合久久片 | 中文字幕有码在线播放 | 欧美精品首页 | 日韩免费一区二区三区 | 91精品国产91久久久久 | 91成人久久 | 欧美日韩国产高清视频 | av在线电影播放 | 精品国内自产拍在线观看视频 | 婷婷国产v亚洲v欧美久久 | 国产免费影院 | 久久久久久国产精品美女 | 国内精品福利视频 | 国产品久精国精产拍 | 日韩av网页 | 日韩免费在线观看 | 国产黄在线播放 | 一区av在线播放 | 天天射,天天干 | 色视频在线观看 | 国产美腿白丝袜足在线av | 国产69精品久久app免费版 | 国产精品久久99综合免费观看尤物 | 久草观看视频 | 高清av在线免费观看 | 最近高清中文字幕在线国语5 | 国内精品视频在线播放 | 插婷婷| 久草在线免费资源站 | 免费高清在线观看成人 | 国产精品美女久久 | 久久久久久国产精品久久 | 一级成人免费 | 国产护士av | 免费观看日韩 | 五月激情五月激情 | 日韩午夜网站 | 亚州激情视频 | 美女天天操 | 国产视频精选在线 | 国产99久久九九精品 | 欧美日韩视频一区二区 | 9ⅰ精品久久久久久久久中文字幕 | 精品久久久成人 | 亚洲视频精品在线 | 国产成人一区二区三区免费看 | 一区二区中文字幕在线 | 久久综合狠狠综合久久综合88 | 日韩欧美视频免费观看 | 青青草国产精品 | 日韩xxxbbb | 亚洲国产一二三 | 超碰在97| 久久成人国产精品免费软件 | 日韩精品一区二区免费视频 | 九九热re | 91精品蜜桃 | 亚洲国产中文字幕在线观看 | 久久视| 欧洲性视频| 亚洲第一色 | 国产一区观看 | 婷婷久久婷婷 | 日本特黄一级 | 国产精品久久嫩一区二区免费 | 91热在线| 草久视频在线观看 | 国产精品成人自拍 | www.91av在线| 99人久久精品视频最新地址 | 一级成人免费 | 国产91精品一区二区绿帽 | 日韩电影一区二区三区在线观看 | 成人久久影院 | 玖玖玖在线观看 | 国产精品久久久久久久午夜片 | 国产小视频免费观看 | 九九免费在线观看 | 国产黄色免费电影 | 日日操日日插 | 91网址在线 | 91在线最新| 五月花丁香婷婷 | 日韩免费视频线观看 | 99热只有精品在线观看 | 五月天最新网址 | 日日干av| 五月天电影免费在线观看一区 | 中文字幕在线视频第一页 | 99精品在线播放 | 五月天婷婷免费视频 | 久久99热久久99精品 | 日本三级人妇 | 日韩在线三级 | 久久久精品高清 | 色狠狠久久av五月综合 | 在线a视频免费观看 | 久久久久久久久久久免费 | 在线成人看片 | 中文字幕在线观看完整版电影 | 日日夜夜狠狠操 | av一区二区三区在线播放 | 成人小视频在线观看免费 | 中文字幕乱码亚洲精品一区 | 国产亚洲在线视频 | 天天草天天 | 麻豆高清免费国产一区 | 天天操狠狠操 | 国产精品一区二区三区免费视频 | 日韩有色 | 精品乱码一区二区三四区 | 欧美黄色成人 | 九九欧美视频 | 91超碰在线播放 | 五月开心激情网 | 丁五月婷婷 | 麻豆成人小视频 | 黄色三级免费片 | 欧美91片 | 久久深夜福利免费观看 | 国产资源网 | 久久久久久蜜桃一区二区 | 亚洲欧美视屏 | 天天操狠狠操网站 | 亚洲一区二区三区在线看 | 精品99免费 | 中文永久免费观看 | 香蕉成人在线视频 | 欧美日韩中文视频 | 精产嫩模国品一二三区 | 狠狠88综合久久久久综合网 | 色噜噜日韩精品欧美一区二区 | 中文字幕在线观看第一页 | 久久久久久伊人 | 婷婷天天色 | av免费在线观看网站 | 一级α片免费看 | 99久热在线精品视频观看 | 国产精品手机视频 | 免费网站在线观看人 | 国内精品久久天天躁人人爽 | 99精品久久只有精品 | 日韩精品中文字幕在线 | 欧美日韩高清在线 | 中文字幕高清有码 | 久久综合久久88 | 91精品视频免费观看 | h视频在线看 | 久久天堂精品视频 | 九九色在线观看 | 国产精品无 | 天天干天天碰 | 中文字幕999 | 日韩精品在线一区 | 激情黄色一级片 | 深夜免费福利视频 | 精品国产乱码久久久久久浪潮 | 久久激情影院 | 亚洲人xxx | 黄毛片在线观看 | 在线日韩亚洲 | 欧美不卡视频在线 | 国产乱对白刺激视频不卡 | 天天激情天天干 | 在线观看香蕉视频 | 97香蕉视频| 高潮久久久久久久久 | 久久免费av电影 | 日韩在线播放av | 狠日日 | 美女网站在线观看 | 国产亚洲精品精品精品 | 久久人人爽人人爽人人 | 亚洲精品无 | 久久九九精品 | 久久天天躁狠狠躁亚洲综合公司 | 91色一区二区三区 | 五月婷婷av| 久久久久久久久免费 | 国产婷婷色 | 日本中文在线播放 | 亚洲欧美视频 | 亚洲精品乱码久久久久久9色 | 91亚洲精品乱码久久久久久蜜桃 | 国产在线p | 久久国产免费 | 免费在线成人av电影 | 九九精品无码 | 一本一本久久a久久精品综合小说 | 91九色蝌蚪在线 | 天堂av在线网 | 永久黄网站色视频免费观看w | 99精品免费久久久久久日本 | 亚洲综合在线五月 | 黄网在线免费观看 | 亚洲成免费 | 免费v片 | 久久国产91 | www.狠狠插.com | 丰满少妇在线观看资源站 | 免费看国产曰批40分钟 | 国产尤物在线 | 91九色成人蝌蚪首页 | 人人干人人上 | 欧美成人区 | 亚洲一区美女视频在线观看免费 | 亚洲日本中文字幕在线观看 | 在线影视 一区 二区 三区 | 精品国产乱码久久 | 免费91麻豆精品国产自产在线观看 | 在线亚洲午夜片av大片 | 天天色棕合合合合合合 | 黄色在线看网站 | 亚洲精品美女在线观看播放 | 中文字幕乱在线伦视频中文字幕乱码在线 | 99热日本| av不卡免费在线观看 | 亚洲欧美国产精品18p | 有码视频在线观看 | 99久久婷婷国产一区二区三区 | 国产精品国产三级国产aⅴ入口 | 黄色亚洲| 国产综合精品一区二区三区 | 久久 国产一区 | 天天射天天干天天爽 | 18性欧美xxxⅹ性满足 | 日韩乱码中文字幕 | 成人免费观看视频大全 | 中文字幕久久精品亚洲乱码 | 久久综合导航 | 国产成人一区二区三区在线观看 | 最新色视频 | 久草国产精品 | 尤物97国产精品久久精品国产 | 九色视频网 | 综合网伊人 | 免费看黄电影 | 久久国产一区 | 精品久久久99 | 四虎在线免费观看 | 欧美色图狠狠干 | 91看片成人 | 成人黄色在线看 | 国产91九色视频 | 97在线观看视频 | 日本韩国欧美在线观看 | 成人黄大片视频在线观看 | 91丨九色丨高潮丰满 | 婷婷精品在线 | 最近中文字幕完整高清 | 日韩高清在线看 | 日日夜夜天天久久 | 日韩欧美视频免费观看 | 亚洲国产影院av久久久久 | 天天操天天干天天操天天干 | 久久免费视频一区 | 国产一区二区久久 | 免费久久视频 | 欧美日韩xxxxx | 国产黄色在线看 | 久久综合爱 | 麻豆视频免费网站 | 综合色中文 | 在线观看精品黄av片免费 | 欧美日高清视频 | 亚洲成人黄色在线观看 | 精品专区一区二区 | 天天操天天射天天操 | www.色婷婷.com| 国产精品久久中文字幕 | 99av国产精品欲麻豆 | 日日弄天天弄美女bbbb | 日韩中字在线观看 | 91手机视频在线 | 亚洲va欧美va人人爽 | 丝袜精品视频 | 九色porny真实丨国产18 | 国产成人精品午夜在线播放 | 91在线免费播放视频 | 日韩免| 亚洲欧洲av在线 | 97超碰国产精品 | 国产资源av | www.天天射.com | 俺要去色综合狠狠 | www.亚洲精品在线 | 婷婷在线免费视频 | 欧美午夜精品久久久久 | 在线 日韩 av| 人人澡超碰碰 | 日韩精品在线一区 | 天天干天天操天天 | 国产手机视频精品 | 国产91电影在线观看 | 久久久久黄色 | 日本爽妇网 | 日本久久不卡视频 | 91大神精品视频在线观看 | 日本性视频| 一区二区三区高清在线观看 | 日韩午夜高清 | 超碰国产97 | 黄色免费电影网站 | 波多野结衣视频在线 | 在线播放日韩av | 在线久草视频 | 亚洲综合视频在线播放 | 亚洲精品在线免费 | 伊人日日干 | 女人18精品一区二区三区 | 在线а√天堂中文官网 | 国产在线视频一区 | 亚洲 欧洲av | 亚洲成av人影院 | 久久在线免费观看 | 91av官网 | 中文字幕在线播放第一页 | 久操视频在线免费看 | 97超碰在线久草超碰在线观看 | 久久久高清一区二区三区 | 丰满少妇对白在线偷拍 | 欧美精品久久久久久久久久久 | 亚洲综合爱 | 成年人免费看片网站 | 日韩在线电影 | 在线观看a视频 | 国产高清 不卡 | 成人免费看片98欧美 | 精品一区二区三区电影 | 国产一区二区在线免费观看 | 91超在线 | 欧美不卡视频在线 | 亚洲涩涩色 | 日日夜夜天天人人 | 亚洲电影黄色 | 国产资源精品在线观看 | 日韩在线首页 | 91爱看片| 亚洲国产日韩在线 | 66av99精品福利视频在线 | 日韩 精品 一区 国产 麻豆 | 国产第一页在线观看 | 久久久久久激情 | 亚洲成人999 | 日日爽视频 | 国产色网| 国产精品久久久久久欧美 | 午夜久久影视 | 中文字幕在 | 一级片视频免费观看 | 日韩视频一区二区在线观看 | 亚洲国产理论片 | 亚洲精品乱码久久久久久 | 国产又粗又硬又长又爽的视频 | 天天色天天色天天色 | 麻豆影视在线观看 | 国产精品h在线观看 | 国产中文字幕在线播放 | 中文高清av| av高清影院 | 天天干天天操天天射 | 91麻豆精品91久久久久同性 | 国产精品9区 | 国产精品日韩在线播放 | 久久综合五月婷婷 | 国产精品一区二区在线观看免费 | 欧美精品v国产精品v日韩精品 | 久久精选视频 | 免费黄色在线网站 | 国产亚州精品视频 | 久久亚洲欧美日韩精品专区 | 欧美午夜寂寞影院 | 91丨九色丨蝌蚪丨老版 | 天天人人| 在线观看视频一区二区 | 婷婷久久网站 | 久久情侣偷拍 | 黄av资源| 成人av免费 | 国产麻豆精品一区 | 91九色国产蝌蚪 | 国产精品二区在线观看 | 97视频在线免费播放 | 亚洲国产视频直播 | 国产精品爽爽久久久久久蜜臀 | 超碰在线94 | 日韩资源在线 | 婷婷深爱网 | 欧美另类网站 | 在线视频日韩 | 黄色精品一区二区 | 欧美小视频在线观看 | 久久免费精品国产 | 天天天天色综合 | 波多野结衣电影一区二区三区 | 久久国产精品久久久久 | 99精品久久精品一区二区 | 九九视频在线观看视频6 | 天天爽天天射 | 麻豆传媒电影在线观看 | 国产又黄又爽又猛视频日本 | 成人网看片 | 亚洲精品456在线播放乱码 | 911香蕉 | 激情久久久 | 蜜臀av麻豆 | 人人插人人澡 | 91久久丝袜国产露脸动漫 | 欧美日韩精| 99热手机在线 | 亚洲视频播放 | 国产视频 亚洲精品 | 精品999久久久 | 久久精品黄色 | www国产亚洲精品久久网站 | 国内偷拍精品视频 | 亚洲色视频 | av在线官网 | 黄色国产高清 | 久草在线最新视频 | 国产精品美女久久久久久久 | 人人草在线视频 | 成人黄色av网站 | 亚洲最大av网站 | 亚洲午夜精品久久久久久久久久久久 | 国产中文字幕免费 | 中文字幕在线免费观看 | 久艹在线播放 | 日韩素人在线观看 | av大全免费在线观看 | 久久三级毛片 | 国产精品麻豆果冻传媒在线播放 | 久久久精品国产免费观看一区二区 | 欧美高清视频不卡网 | 国内偷拍精品视频 | 免费成人结看片 | 亚洲人人av| 成人黄色免费在线观看 | 91看片成人 | 免费av高清 | 一区二区三区三区在线 | 日韩精品一区二 | 九九热免费在线观看 | 久草在线观看视频免费 | 精品在线你懂的 | 一区av在线播放 | 一区二区三区免费在线观看视频 | 91视频久久久 | 日日爽视频| 久热久草在线 | a视频在线观看免费 | 亚洲做受高潮欧美裸体 | 中文字幕资源网在线观看 | 国产亚州精品视频 | 天天综合亚洲 | 成人 亚洲 欧美 | 天天爱综合 | 国产九九九精品视频 | 91成人精品在线 | 欧美大片mv免费 | 午夜精品视频福利 | 国产 视频 高清 免费 | 日韩激情第一页 | 欧美国产日韩一区二区 | 欧美激情视频一区二区三区 | 日韩字幕| 成人电影毛片 | 中文字幕第一页在线视频 | 99热这里有精品 | 成人手机在线视频 | 激情文学综合丁香 | 国产一二三精品 | 国产福利免费在线观看 | 人人爽人人射 | 中文字幕在线观看日本 | 啪啪免费观看网站 | 夜夜爽夜夜操 | 99久久婷婷| 亚洲视频免费在线观看 | 日韩视频一二三区 | 美女免费视频一区二区 | 成人教育av | 在线免费国产视频 | 91最新视频在线观看 | 97视频免费在线看 | 国产美女久久久 | 天天曰天天射 | 狠狠干天天射 | 在线亚洲精品 | 成人av免费电影 | 国产成人精品在线 | 九九精品视频在线 | 在线观看视频 | 91免费版在线观看 | 97人人澡人人添人人爽超碰 | 九九热在线免费观看 | 国产精品手机视频 | 欧美资源 | 欧美日韩精品在线一区二区 | 成人黄色片免费看 | 最新日韩在线 | av在线电影网站 | 狠狠色丁香 | 久久不射影院 | 亚洲精品乱码久久久久v最新版 | 国产最顶级的黄色片在线免费观看 | www.夜夜操.com | 在线黄频 | 又黄又刺激的网站 | 久久这里 | aaawww| 久久久国际精品 | 成人资源在线 | 国产在线观看91 | 国产老太婆免费交性大片 | 天天草天天干天天 | 婷婷六月在线 | 久久免费成人精品视频 | 国产小视频在线观看免费 | 五月婷婷六月丁香激情 | 久久观看最新视频 | 99久久精品免费看国产 | 欧美整片sss | 免费网址你懂的 | 免费一级片观看 | 欧美在线视频精品 | 91大神精品视频在线观看 | 97操操操 | 日韩三级精品 | 国产美女网站在线观看 | av在线播放一区二区三区 | 国产免费久久av | 欧洲精品码一区二区三区免费看 | 欧美成人手机版 | 在线观看一区二区视频 | 国产亚洲成av人片在线观看桃 | 日韩videos| 国产裸体永久免费视频网站 | 偷拍区另类综合在线 | .国产精品成人自产拍在线观看6 | 久久99久久99精品免观看粉嫩 | 成人激情开心网 | 岛国av在线免费 | 久久久久 免费视频 | 视频一区视频二区在线观看 | 一区二区视 | 在线观看视频色 | 欧美精品v国产精品v日韩精品 | 久久高清视频免费 | 亚洲精品在线一区二区三区 | 精品字幕在线 | 免费观看av网站 | 人人射人人爱 | 亚洲艳情 | 911久久香蕉国产线看观看 | 免费午夜在线视频 | 九七在线视频 | 成人中文字幕+乱码+中文字幕 | 中文字幕在线看片 | 午夜精品视频福利 | 欧美日韩亚洲精品在线 | 久热这里有精品 | 国产一区二区精品久久 | 999久久久久久 | 亚洲免费av在线 | 久久久视频在线 | 免费看网站在线 | 免费能看的av | 亚洲综合欧美激情 | 午夜av免费在线观看 | 国产亚洲精品久久 | 在线观看视频一区二区三区 | 中文字幕电影高清在线观看 | 成人在线电影观看 | 久久久久久久久久久影视 | 成年美女黄网站色大片免费看 | 日本公乱妇视频 | 久久免费观看少妇a级毛片 久久久久成人免费 | 青青草在久久免费久久免费 | 欧美极度另类性三渗透 | 日本精品一区二区三区在线播放视频 | 精品国产视频在线 | 日韩在线视频线视频免费网站 | 国产精品免费在线播放 | 久久视频这里只有精品 | 亚洲电影影音先锋 | 黄色免费观看 | 亚洲视频在线观看 | 亚洲精品ww| 国产99久久久精品视频 | 久草在线手机观看 | 日韩另类在线 | 亚洲精品资源在线 | 欧美在线观看视频 | 中文字幕日韩国产 | av在线免费观看不卡 | 日日摸日日| 国产福利91精品一区 | 91视频久久久久久 | 在线观看日韩专区 | 99热精品国产一区二区在线观看 | 久久成人免费视频 | 欧美与欧洲交xxxx免费观看 | 亚洲精品国偷拍自产在线观看 | 免费在线色视频 | 激情图片久久 | 国产黄色理论片 | 最新中文在线视频 | 中文字幕第一页在线 | 色狠狠干| 久久国产亚洲 | 亚洲精品黄色在线观看 | av高清在线| www日日| av电影av在线 | 久久av在线播放 | 久久久免费播放 | 91av免费在线观看 | 婷婷色综 | 久久免费黄色网址 | 国产高清中文字幕 | 丁香午夜婷婷 | 日韩动漫免费观看高清完整版在线观看 | 久草在线视频首页 | 久久久久国产成人精品亚洲午夜 | 日韩精品亚洲专区在线观看 | 91精品办公室少妇高潮对白 | 亚洲精品av中文字幕在线在线 | 天天色综合三 | 亚洲成人精品av | 久久热亚洲 | 国产精品一区二区三区免费视频 | 在线播放 亚洲 | 国产日本亚洲 | www.午夜色.com | 久久综合精品国产一区二区三区 | 97成人精品视频在线播放 | 最近2019年日本中文免费字幕 | 成 人 黄 色 视频 免费观看 | 91丨九色丨国产女 | 久久亚洲私人国产精品va | 久久成人国产精品 | 国产精品白丝jk白祙 | 九九久久电影 | 国产精品丝袜在线 | 国产精品中文久久久久久久 | 国产高清在线a视频大全 | 超碰日韩 | 99精品免费| 婷婷丁香激情综合 | 亚洲欧美在线视频免费 | 高潮久久久久久久久 | 日韩精品综合在线 | 国内精品视频在线播放 | 日韩精品一区在线观看 | 久久久午夜视频 | 99久久精品免费看国产四区 | 亚洲一级免费观看 | 国产精品网红福利 | 欧美在线观看视频 | 久久久免费电影 | 亚洲一区二区视频在线 | 国产精品日韩久久久久 | 久久草草热国产精品直播 | 麻豆va一区二区三区久久浪 | 欧美日韩二区三区 | 精品国产观看 | av解说在线观看 | 久久精品国产第一区二区三区 | www免费在线观看 | 国产视频日韩视频欧美视频 | 亚洲精品黄色在线观看 | 中文字幕高清有码 | 97福利在线观看 | 一级特黄av | 免费观看xxxx9999片 | 91丨九色丨国产丨porny精品 | 久久8| 综合在线观看色 | a天堂一码二码专区 | 色五月激情五月 | 国产喷水在线 | 免费网站观看www在线观看 | 日韩免费视频观看 | 国产精品69av | 特级西西444www高清大视频 | 亚洲一区免费在线 | 婷婷色av | 国产精品一区二区电影 | 一级黄色在线免费观看 | 一区 在线 影院 | 午夜精品福利一区二区三区蜜桃 | 日本高清xxxx | 国产精品成人久久 | 国产精品入口a级 | 麻豆一级视频 | 精品中文字幕在线 | 日韩sese | 色美女在线| 亚洲精品xx| 久久久久女人精品毛片九一 | 精品国产精品国产偷麻豆 | 日日夜夜综合网 | 亚洲 综合 专区 | 伊人久久电影网 | av一区二区三区在线观看 | 精品国产aⅴ麻豆 | 国产69精品久久久久久久久久 | av短片在线观看 | 一级特黄av| 国产视频18 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 天天干,天天操 | 国产日韩欧美视频在线观看 | 亚洲久久视频 | 婷婷国产v亚洲v欧美久久 | 久久久精品影视 | 少妇高潮流白浆在线观看 | 日韩r级在线 | 久久这里只精品 | 午夜视频欧美 | 免费在线播放视频 | 欧美日韩91 | 天天舔天天搞 | 91x色| 很黄很黄的网站免费的 | 国产va饥渴难耐女保洁员在线观看 | 中文字幕不卡在线88 | 久久精品视频日本 | 久久观看 | 中文视频一区二区 | 亚洲欧洲精品一区二区精品久久久 | 天天干天天操天天入 | 色综合天天综合网国产成人网 | 国产丝袜在线 | 国产视频网站在线观看 | 三级在线视频播放 | 亚洲精品资源在线观看 | 日韩免费在线 | 日批在线看 | 99电影456麻豆 | 黄色亚洲精品 | 国产精品一区电影 | 欧美日韩另类在线 | 精品一区二区在线免费观看 | 国产理论在线 | 国产v在线观看 | av中文字幕在线免费观看 | 91亚洲精品久久久中文字幕 | 在线日韩 | 免费三级黄色片 | 黄色av播放| 日韩在线播放av | 欧美日韩在线视频观看 | 韩日电影在线免费看 | 天堂在线一区 | 成人av影视 | 日韩欧美在线视频一区二区三区 | 天天操偷偷干 | 国产美女免费观看 | 天天草天天操 | 久久这里精品视频 | 久久久精品视频网站 | 99精品久久久久久久 | 久久av在线播放 | 黄色国产高清 | 二区视频在线观看 | 国产精品9999 | 国产99久久久国产精品免费二区 | av高清一区二区三区 | 日韩欧美高清免费 | 91亚色免费视频 | 国产999久久久 | 99精品在这里 | 狠狠干婷婷色 | 99视频黄 | 中文字幕在线观看完整版电影 | 69亚洲视频 | 国产精品麻豆91 | 中文字幕第一 | 精品资源在线 | 亚洲精品乱码白浆高清久久久久久 | 中文欧美字幕免费 | 亚洲欧美日韩国产一区二区三区 | 91桃色在线观看视频 | 91大神精品视频在线观看 | 久久在线精品 | av成人免费观看 | 经典三级一区 | 亚洲国产精品久久 | 人人狠狠综合久久亚洲 |