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

📄 ggt_sem.c

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

/****************************************************************************************************
**  函数名: OSSemInit
**  描  述: 旗帜初始化
**  输 入: pSem:旗帜指针
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2008年1月5日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 
**  日 期:
**  说  明:
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSSemInit(_pSem pSem)
{
	OSIRQLock();

	pSem->Flag = 0;
	pSem->pTask = NULL;

	OSIRQUnlock();
}

/****************************************************************************************************
**  函数名: OSSemSend
**  描  述: 旗帜发送函数
**  输 入: pSem:互斥变量指针
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2008年1月5日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 
**  日 期:
**  说  明:
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSSemSend(_pSem pSem)
{
	_pOSTask pTask;

	OSIRQLock();	

	if(NULL == pSem->pTask)
	{
		while(pSem->pTask)
		{
			pTask = pSem->pTask;
			pSem->pTask = ((_pOSTask)(pSem->pTask))->pNext;
			OSTaskPushReady(pTask);
		}
	}else
		pSem->Flag = 1;

	OSIRQUnlock();
}

/****************************************************************************************************
**  函数名: OSSemWait
**  描  述: 旗帜等待函数
**  输 入: pSem:旗帜指针
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2008年1月5日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 
**  日 期:
**  说  明:
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/
void OSSemWait(_pSem pSem)
{
	OSIRQLock();

	if(!pSem->Flag)
	{		
		pOSTskNow->State = OS_STATE_TSK_WAIT_SEM;
		ListInsert(&(pSem->pTask), pOSTskNow, OSTaskOrderByPrio);
		OSTaskIsNULLLoadDef();
		OSTaskSW();
	}else
		pSem->Flag = 0;

	OSIRQUnlock();
}
 
 

⌨️ 快捷键说明

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