2 Star 6 Fork 3

稀风/KOS

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
event2.c 4.37 KB
一键复制 编辑 原始数据 按行查看 历史
稀风 提交于 2023-05-27 23:01 . 优化注释信息
#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;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/thin-wind/KOS.git
git@gitee.com:thin-wind/KOS.git
thin-wind
KOS
KOS
main

搜索帮助