⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ggt_timer.c

📁 ARM下的多任务操作系统源码:GogotoOS
💻 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 + -