金牌会员
 
- 积分
- 1236
- 金钱
- 1236
- 注册时间
- 2015-5-14
- 在线时间
- 352 小时
|
发表于 2017-2-17 20:13:17
|
显示全部楼层
我也来捧个汤,这个是我做的系统延时服务:
/******************************************************************************
* Function: void scheduler_software_timer_t(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: None
*
* Note:
1、调度的时候,不能够添加任务,否则数据结构造到破坏,所以要加锁;
2、timer_service调度实在定时器中断中,如果能够保证没有更高级的中断加入
timer服务队列,则可以不加锁;
*****************************************************************************/
void scheduler_software_timer_t(void)
{
#if (TIMER_SERVICE_IS_ENABLE_LOCK && TIMER_SCHEDULER_IS_ADD_LOCK)
SAFE_ATOM_CODE(
CLASS(software_timer_t) **pptTask = &s_pTaskList;
CLASS(software_timer_t) *ptTask = s_pTaskList;
while(NULL != ptTask){
if(ptTask->delay){
ptTask->delay--;
pptTask = &ptTask->ptNext;
ptTask = ptTask->ptNext;
}else{
#if (TIMER_SCHEDULER_IS_COMPATIBLE_TO_JOIN_CORE_TASK_FAILURE)
if(USER_NEW_TASK(ptTask->pCallTask,ptTask->pRam,ADD_TASK_FIFO_TAIL)){
*pptTask = ptTask->ptNext;
free_software_timer_t((software_timer_t*)ptTask);
ptTask = *pptTask;
}else{
pptTask = &ptTask->ptNext;
ptTask = ptTask->ptNext;
}
#else
USER_NEW_TASK(ptTask->pCallTask,ptTask->pRam,ADD_TASK_FIFO_TAIL);//不保证添加成功
*pptTask = ptTask->ptNext;
free_software_timer_t((software_timer_t*)ptTask);
ptTask = *pptTask;
#endif
}
}
)
#else
CLASS(software_timer_t) **pptTask = &s_pTaskList;
CLASS(software_timer_t) *ptTask = s_pTaskList;
while(NULL != ptTask){
if(ptTask->delay){
ptTask->delay--;
pptTask = &ptTask->ptNext;
ptTask = ptTask->ptNext;
}else{
#if (TIMER_SCHEDULER_IS_COMPATIBLE_TO_JOIN_CORE_TASK_FAILURE)
if(USER_NEW_TASK(ptTask->pCallTask,ptTask->pRam,ADD_TASK_FIFO_TAIL)){
*pptTask = ptTask->ptNext;
free_software_timer_t((software_timer_t*)ptTask);
ptTask = *pptTask;
}else{
pptTask = &ptTask->ptNext;
ptTask = ptTask->ptNext;
}
#else
USER_NEW_TASK(ptTask->pCallTask,ptTask->pRam,ADD_TASK_FIFO_TAIL);//不保证添加成功
*pptTask = ptTask->ptNext;
free_software_timer_t((software_timer_t*)ptTask);
ptTask = *pptTask;
#endif
}
}
#endif
}
|
|