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

📄 ggt_mut.c

📁 ARM下的多任务操作系统源码:GogotoOS
💻 C
字号:
/****************************************************************************************************
**                                        Gogoto OS
**                                   The Real-Time Kernel
**                           (c) Copyright 2007-2008, luyigui(卢益贵)
**                                     All Rights Reserved
**                                         V1.00.0
**
**	                           狗狗兔嵌入式多任务系统(基于消息机制)    
**    					 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
**						    		 	QQ:48092788
**
**------------------文件信息------------------------------------------------------------------------
**  文件名: GGT_Mut.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"

/****************************************************************************************************
**  函数名: OSMutInit
**  描  述: 互斥变量初始化
**  输 入: pMut:互斥变量指针
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2007年12月8日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 卢益贵
**  日 期: 2008年1月7日
**  说  明:
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSMutInit(_pMut pMut)
{
	OSIRQLock();

	pMut->IsBusy = FALSE;
	pMut->pTask = NULL;
	pMut->Count = 0;
	pMut->Owner = 0;

	OSIRQUnlock();
}

/****************************************************************************************************
**  函数名: OSMutRelease
**  描  述: 互斥量释放
**  输 入: pMut:互斥变量指针
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2007年12月8日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 卢益贵
**  日 期: 2008年1月7日
**  说  明:
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSMutRelease(_pMut pMut)
{
	_pOSTask pTask;

	OSIRQLock();

	pMut->Count--;

	if(0 >= pMut->Count)
	{	
		if(pMut->pTask)
		{
			pMut->IsBusy = TRUE;
			pMut->Owner = pTask->ID;
			pMut->Count = 0;
			pTask = pMut->pTask;
			((_pOSTask)(pMut->pTask)) = ((_pOSTask)(pMut->pTask))->pNext;
			OSTaskPushReady(pTask);
			OSTaskSW();
		}else
			pMut->IsBusy = FALSE;
	}

	OSIRQUnlock();
}

/****************************************************************************************************
**  函数名: OSMutWait
**  描  述: 互斥量等待。
**  输 入: pMut:互斥变量指针
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2007年12月8日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 卢益贵
**  日 期: 2008年1月7日
**  说  明:
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSMutWait(_pMut pMut)
{
	OSIRQLock();
	
	if(pMut->IsBusy)
	{
		if(pMut->Owner != pOSTskNow->ID)			
		{
			pOSTskNow->State = OS_STATE_TSK_WAIT_MUT;
			//按权限排序,权限高的在前面。
			ListInsert(&(pMut->pTask), pOSTskNow, OSTaskOrderByPrio);
			OSTaskIsNULLLoadDef();
			OSTaskSW();
		}else
			pMut->Count++;
	}else
	{
		pMut->Count = 0;
		pMut->Owner = pOSTskNow->ID;
		pMut->IsBusy = TRUE;
	}

	OSIRQUnlock();
}
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -