📄 os_tmr.lst
字号:
OSTmr_InitTask();
}
#endif
872
873 /*$PAGE*/
874 /*
875 **********************************************************************************************************
C51 COMPILER V7.50 OS_TMR 12/14/2007 08:25:46 PAGE 17
-**************
876 * INITIALIZE THE TIMER MANAGEMENT TASK
877 *
878 * Description: This function is called by OSTmrInit() to create the timer management task.
879 *
880 * Arguments : none
881 *
882 * Returns : none
883 **********************************************************************************************************
-**************
884 */
885
886 #if OS_TMR_EN > 0
static void OSTmr_InitTask (void) reentrant
{
#if OS_TASK_NAME_SIZE > 6
INT8U err;
#endif
#if OS_TASK_CREATE_EXT_EN > 0
#if OS_STK_GROWTH == 1
(void)OSTaskCreateExt(OSTmr_Task,
(void *)0, /* No arguments passed to OSTmr
-Task() */
&OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1], /* Set Top-Of-Stack
- */
OS_TASK_TMR_PRIO,
OS_TASK_TMR_ID,
&OSTmrTaskStk[0], /* Set Bottom-Of-Stack
- */
OS_TASK_TMR_STK_SIZE,
(void *)0, /* No TCB extension
- */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clea
-r stack */
#else
(void)OSTaskCreateExt(OSTmr_Task,
(void *)0, /* No arguments passed to OSTmr
-Task() */
&OSTmrTaskStk[0], /* Set Top-Of-Stack
- */
OS_TASK_TMR_PRIO,
OS_TASK_TMR_ID,
&OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1], /* Set Bottom-Of-Stack
- */
OS_TASK_TMR_STK_SIZE,
(void *)0, /* No TCB extension
- */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clea
-r stack */
#endif
#else
#if OS_STK_GROWTH == 1
(void)OSTaskCreate(OSTmr_Task,
(void *)0,
&OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],
OS_TASK_TMR_PRIO);
#else
(void)OSTaskCreate(OSTmr_Task,
(void *)0,
&OSTmrTaskStk[0],
C51 COMPILER V7.50 OS_TMR 12/14/2007 08:25:46 PAGE 18
OS_TASK_TMR_PRIO);
#endif
#endif
#if OS_TASK_NAME_SIZE > 12
OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"uC/OS-II Tmr", &err);
#else
#if OS_TASK_NAME_SIZE > 6
OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"OS-Tmr", &err);
#endif
#endif
}
#endif
939
940 /*$PAGE*/
941 /*
942 **********************************************************************************************************
-**************
943 * INSERT A TIMER INTO THE TIMER WHEEL
944 *
945 * Description: This function is called to insert the timer into the timer wheel. The timer is always inse
-rted at the
946 * beginning of the list.
947 *
948 * Arguments : ptmr Is a pointer to the timer to insert.
949 *
950 * type Is either:
951 * OS_TMR_LINK_PERIODIC Means to re-insert the timer after a period expire
-d
952 * OS_TMR_LINK_DLY Means to insert the timer the first time
953 *
954 * Returns : none
955 **********************************************************************************************************
-**************
956 */
957
958 #if OS_TMR_EN > 0
static void OSTmr_Link (OS_TMR *ptmr, INT8U type) reentrant
{
OS_TMR *ptmr1;
OS_TMR_WHEEL *pspoke;
INT16U spoke;
ptmr->OSTmrState = OS_TMR_STATE_RUNNING;
if (type == OS_TMR_LINK_PERIODIC) { /* Determine when timer will expire
- */
ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime;
} else {
if (ptmr->OSTmrDly == 0) {
ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime;
} else {
ptmr->OSTmrMatch = ptmr->OSTmrDly + OSTmrTime;
}
}
spoke = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
pspoke = &OSTmrWheelTbl[spoke];
if (pspoke->OSTmrFirst == (OS_TMR *)0) { /* Link into timer wheel
- */
pspoke->OSTmrFirst = ptmr;
ptmr->OSTmrNext = (OS_TMR *)0;
C51 COMPILER V7.50 OS_TMR 12/14/2007 08:25:46 PAGE 19
pspoke->OSTmrEntries = 1;
} else {
ptmr1 = pspoke->OSTmrFirst; /* Point to first timer in the spoke
- */
pspoke->OSTmrFirst = ptmr;
ptmr->OSTmrNext = (void *)ptmr1;
ptmr1->OSTmrPrev = (void *)ptmr;
pspoke->OSTmrEntries++;
}
ptmr->OSTmrPrev = (void *)0; /* Timer always inserted as first node
-in list */
}
#endif
993
994 /*$PAGE*/
995 /*
996 **********************************************************************************************************
-**************
997 * REMOVE A TIMER FROM THE TIMER WHEEL
998 *
999 * Description: This function is called to remove the timer from the timer wheel.
1000 *
1001 * Arguments : ptmr Is a pointer to the timer to remove.
1002 *
1003 * Returns : none
1004 **********************************************************************************************************
-**************
1005 */
1006
1007 #if OS_TMR_EN > 0
static void OSTmr_Unlink (OS_TMR *ptmr) reentrant
{
OS_TMR *ptmr1;
OS_TMR *ptmr2;
OS_TMR_WHEEL *pspoke;
INT16U spoke;
spoke = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
pspoke = &OSTmrWheelTbl[spoke];
if (pspoke->OSTmrFirst == ptmr) { /* See if timer to remove is at the beginning
-of list */
ptmr1 = (OS_TMR *)ptmr->OSTmrNext;
pspoke->OSTmrFirst = (void *)ptmr1;
if (ptmr1 != (OS_TMR *)0) {
ptmr1->OSTmrPrev = (void *)0;
}
} else {
ptmr1 = (OS_TMR *)ptmr->OSTmrPrev; /* Remove timer from somewhere in the list
- */
ptmr2 = (OS_TMR *)ptmr->OSTmrNext;
ptmr1->OSTmrNext = ptmr2;
if (ptmr2 != (OS_TMR *)0) {
ptmr2->OSTmrPrev = (void *)ptmr1;
}
}
ptmr->OSTmrState = OS_TMR_STATE_STOPPED;
ptmr->OSTmrNext = (void *)0;
ptmr->OSTmrPrev = (void *)0;
pspoke->OSTmrEntries--;
}
C51 COMPILER V7.50 OS_TMR 12/14/2007 08:25:46 PAGE 20
#endif
1039
1040 /*$PAGE*/
1041 /*
1042 **********************************************************************************************************
-**************
1043 * TIMER MANAGER DATA STRUCTURE LOCKING MECHANISM
1044 *
1045 * Description: These functions are used to gain exclusive access to timer management data structures.
1046 *
1047 * Arguments : none
1048 *
1049 * Returns : none
1050 **********************************************************************************************************
-**************
1051 */
1052
1053 #if OS_TMR_EN > 0
static void OSTmr_Lock (void) reentrant
{
INT8U err;
OSSemPend(OSTmrSem, 0, &err);
(void)err;
}
#endif
1063
1064
1065
1066 #if OS_TMR_EN > 0
static void OSTmr_Unlock (void) reentrant
{
(void)OSSemPost(OSTmrSem);
}
#endif
1072
1073 /*$PAGE*/
1074 /*
1075 **********************************************************************************************************
-**************
1076 * TIMER MANAGEMENT TASK
1077 *
1078 * Description: This task is created by OSTmrInit().
1079 *
1080 * Arguments : none
1081 *
1082 * Returns : none
1083 **********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -