代码拉取完成,页面将自动刷新
#include <event.h>
#include <memory.h>
#include <schedule.h>
#include <task.h>
static LIST EVENT_LIST; // 等待时间链表
/******************************************************************************
* 函数名称: void EventInit(void)
* 功能说明: 初始化事件
* 输入参数: 无
* 输出参数: 无
* 函数返回: 无
* 其它说明:
******************************************************************************/
void EventInit(void)
{
ListInit(&EVENT_LIST);
}
/******************************************************************************
* 函数名称: EVENT* SYS_EventCreat(void)
* 功能说明: 创建事件
* 输入参数: 无
* 输出参数: 无
* 函数返回: EVENT* --事件
* 其它说明:
******************************************************************************/
EVENT* SYS_EventCreat(void)
{
EVENT* event = (EVENT *)Malloc(sizeof(EVENT));
if(NULL == event)
return NULL;
event->event = 0; // 事件未生产状态
ListAddHead(&EVENT_LIST, (LIST_NODE *)event); // 头插
QueueInit(&event->wait); // 初始化事件中的等待队列
return event;
}
/******************************************************************************
* 函数名称: static BOOL CheckEvent(EVENT* event)
* 功能说明: 检查事件是否合法有效
* 输入参数: EVENT* event --事件
* 输出参数: 无
* 函数返回: 0:无效; 1:有效
* 其它说明: 无
******************************************************************************/
static BOOL CheckEvent(EVENT* event)
{
LIST_NODE* pListNode = NULL;
EVENT* nodeTmp = NULL;
LIST_FOR_EACH(&EVENT_LIST, pListNode)
{
nodeTmp = (EVENT *)LIST_NODE(pListNode, EVENT, node);
if(event == nodeTmp)
return 1;
}
return 0;
}
/******************************************************************************
* 函数名称: E_RET SYS_WaitEvent(EVENT* event)
* 功能说明: 事件
* 输入参数: EVENT* event --事件
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_WaitEvent(EVENT* event)
{
// 检查参数合法性
if(NULL == event || !CheckEvent(event))
return E_ERR;
// 将当前任务节点从任务就绪队列中转移到等待时间的等待队列中
if(0 == event->event)
EventSuspend(event);
return E_OK;
}
/******************************************************************************
* 函数名称: E_RET SYS_SetEvent(EVENT* event)
* 功能说明: 设置事件
* 输入参数: EVENT* event --事件
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_SetEvent(EVENT* event)
{
// 检查参数合法性
if(NULL == event || !CheckEvent(event))
return E_ERR;
// 将事件的状态设置为 1,表明事件发生
event->event = 1;
// 将事件 event 中的等待队列中的任务转移到任务就绪队列中
EventResume(event);
return E_OK;
}
/******************************************************************************
* 函数名称: E_RET SYS_ClearEvent(EVENT* event)
* 功能说明: 清除事件
* 输入参数: EVENT* event --事件
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_ClearEvent(EVENT* event)
{
// 检查参数合法性
if(NULL == event || !CheckEvent(event))
return E_ERR;
// 将事件的状态设置为 0,表明事件已被处理
event->event = 0;
return E_OK;
}
/******************************************************************************
* 函数名称: E_RET SYS_EventDestory(EVENT* event)
* 功能说明: 销毁事件
* 输入参数: EVENT* event --事件
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_EventDestory(EVENT* event)
{
// 检查参数合法性
if(NULL == event || !CheckEvent(event))
return E_ERR;
// 删除链表节点并释放内存
ListDelNode(&event->node);
Free(event);
return E_OK;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。