📄 os_tmr.lst
字号:
OSTmr_InitTask();
}
#endif
870
871 /*$PAGE*/
872 /*
873 **********************************************************************************************************
-**************
C51 COMPILER V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 17
874 * INITIALIZE THE TIMER MANAGEMENT TASK
875 *
876 * Description: This function is called by OSTmrInit() to create the timer management task.
877 *
878 * Arguments : none
879 *
880 * Returns : none
881 **********************************************************************************************************
-**************
882 */
883
884 #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],
OS_TASK_TMR_PRIO);
C51 COMPILER V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 18
#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
938
939 /*$PAGE*/
940 /*
941 **********************************************************************************************************
-**************
942 * INSERT A TIMER INTO THE TIMER WHEEL
943 *
944 * Description: This function is called to insert the timer into the timer wheel. The timer is always inse
-rted at the
945 * beginning of the list.
946 *
947 * Arguments : ptmr Is a pointer to the timer to insert.
948 *
949 * type Is either:
950 * OS_TMR_LINK_PERIODIC Means to re-insert the timer after a period expire
-d
951 * OS_TMR_LINK_DLY Means to insert the timer the first time
952 *
953 * Returns : none
954 **********************************************************************************************************
-**************
955 */
956
957 #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 V8.17 OS_TMR 03/26/2009 14:24:25 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
992
993 /*$PAGE*/
994 /*
995 **********************************************************************************************************
-**************
996 * REMOVE A TIMER FROM THE TIMER WHEEL
997 *
998 * Description: This function is called to remove the timer from the timer wheel.
999 *
1000 * Arguments : ptmr Is a pointer to the timer to remove.
1001 *
1002 * Returns : none
1003 **********************************************************************************************************
-**************
1004 */
1005
1006 #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 = (OS_TMR *)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 V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 20
#endif
1038
1039 /*$PAGE*/
1040 /*
1041 **********************************************************************************************************
-**************
1042 * TIMER MANAGER DATA STRUCTURE LOCKING MECHANISM
1043 *
1044 * Description: These functions are used to gain exclusive access to timer management data structures.
1045 *
1046 * Arguments : none
1047 *
1048 * Returns : none
1049 **********************************************************************************************************
-**************
1050 */
1051
1052 #if OS_TMR_EN > 0
static void OSTmr_Lock (void) reentrant
{
INT8U err;
OSSemPend(OSTmrSem, 0, &err);
//(void)err;
}
#endif
1062
1063
1064
1065 #if OS_TMR_EN > 0
static void OSTmr_Unlock (void) reentrant
{
(void)OSSemPost(OSTmrSem);
}
#endif
1071
1072 /*$PAGE*/
1073 /*
1074 **********************************************************************************************************
-**************
1075 * TIMER MANAGEMENT TASK
1076 *
1077 * Description: This task is created by OSTmrInit().
1078 *
1079 * Arguments : none
1080 *
1081
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -