📄 ggt_timer.c
字号:
/****************************************************************************************************
** Gogoto OS
** (c) Copyright 2007-2008, luyigui(卢益贵)
** All Rights Reserved
** V1.00.0
**
** 狗狗兔嵌入式多任务系统(基于消息机制)
** 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
** QQ:48092788
**
**------------------文件信息------------------------------------------------------------------------
** 文件名: GGT_Timer.c
** 创建人: 卢益贵
** 日 期: 2007年12月8日
** 版 本: V1.00.0
** 描 述: Gogoto OS 用户定时器功能单元
**
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
****************************************************************************************************/
#include "GGT_OS.h"
#include "GGT_CPU.h"
#include "GGT_Func.h"
#include "GGT_SysType.h"
#include "GGT_Kernel.h"
_pOSTimer pOSTimer = NULL;
_pOSBoxTimer pOSBoxTimer = NULL;
/****************************************************************************************************
** 函数名: OSTimerInit
** 描 述: 初始化定时器空间
** 输 入: 无
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSTimerInit(void)
{
INT32 i;
pOSBoxTimer = (_pOSBoxTimer)OSGetBoxTimer();
BoxInit(pOSBoxTimer, sizeof(_BoxHead) + OSGetSumTimer() * sizeof(_OSTimer), sizeof(_OSTimer));
for(i = 0; i < OSGetSumTimer(); i++)
pOSBoxTimer->Timer[i].ID = i + 1;
}
/****************************************************************************************************
** 函数名: OSTimerSet
** 描 述: 定时器设置函数
** 输 入: TaskID:设置定时器任务的ID
Time:定时器时长
** 输 出: 定时器ID
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
UINT32 OSTimerSet(const OS_ID TaskID, const UINT32 Time)
{
UINT32 R;
_pOSTimer pTimer;
OSIRQLock();
pTimer = BoxAlloc(pOSBoxTimer);
if(pTimer)
{
pTimer->TaskID = TaskID;
pTimer->Time = (Time * OSGetTick()) / 1000;
pTimer->Timeout = pTimer->Time;
R = pTimer->ID;
ListAppend(&pOSTimer, pTimer);
}else
R = 0;
OSIRQUnlock();
return(R);
}
/****************************************************************************************************
** 函数名: OSTimerCheck
** 描 述: 定时器计数
** 输 入: 无
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSTimerCheck(void)
{
_pOSTimer pTimer;
pTimer = pOSTimer;
while(pTimer)
{
(pTimer->Timeout)--;
if(!pTimer->Timeout)
{
pTimer->Timeout = pTimer->Time;
OSTaskMsgPost(pTimer->TaskID, OS_MSG_TIMER, pTimer->ID, 0);
}
pTimer = pTimer->pNext;
}
}
/****************************************************************************************************
** 函数名: OSTimerKill
** 描 述: 定时器摧毁
** 输 入: TimerID:定时器ID
** 输 出: 无
** 创建人: 卢益贵
** 日 期: 2007年12月8日
**------------------修改记录------------------------------------------------------------------------
** 修改人:
** 日 期:
** 说 明:
** 原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSTimerKill(const UINT32 TimerID)
{
_pOSTimer pTimer;
OSIRQLock();
pTimer = &(pOSBoxTimer->Timer[TimerID - 1]);
ListDelete(pOSTimer, pTimer);
BoxFree(pOSBoxTimer, pTimer);
OSIRQUnlock();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -