📄 ggt_sem.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 + -