Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_46254178
rt-thread
提交
ef132f3c
R
rt-thread
项目概览
weixin_46254178
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ef132f3c
编写于
6月 26, 2018
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Kernel] clean code for indentation.
上级
a1a56ce1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
79 addition
and
30 deletion
+79
-30
components/drivers/include/ipc/waitqueue.h
components/drivers/include/ipc/waitqueue.h
+29
-5
components/drivers/src/waitqueue.c
components/drivers/src/waitqueue.c
+47
-22
include/rtdef.h
include/rtdef.h
+2
-2
src/device.c
src/device.c
+1
-1
未找到文件。
components/drivers/include/ipc/waitqueue.h
浏览文件 @
ef132f3c
/*
* File : waitqueue.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2018/06/26 Bernard Fix the wait queue issue when wakeup a soon
* to blocked thread.
*/
#ifndef WAITQUEUE_H__
#define WAITQUEUE_H__
...
...
@@ -11,11 +36,11 @@ typedef int (*rt_wqueue_func_t)(struct rt_wqueue_node *wait, void *key);
struct
rt_wqueue_node
{
rt_thread_t
polling_thread
;
rt_list_t
list
;
rt_thread_t
polling_thread
;
rt_list_t
list
;
rt_wqueue_func_t
wakeup
;
rt_uint32_t
key
;
rt_wqueue_func_t
wakeup
;
rt_uint32_t
key
;
};
typedef
struct
rt_wqueue_node
rt_wqueue_node_t
;
...
...
@@ -46,4 +71,3 @@ void rt_wqueue_wakeup(rt_wqueue_t *queue, void *key);
#define DEFINE_WAIT(name) DEFINE_WAIT_FUNC(name, __wqueue_default_wake)
#endif
components/drivers/src/waitqueue.c
浏览文件 @
ef132f3c
/*
* File : waitqueue.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2018/06/26 Bernard Fix the wait queue issue when wakeup a soon
* to blocked thread.
*/
#include <stdint.h>
#include <rthw.h>
...
...
@@ -32,30 +57,30 @@ void rt_wqueue_wakeup(rt_wqueue_t *queue, void *key)
rt_base_t
level
;
register
int
need_schedule
=
0
;
rt_list_t
*
queue_list
;
rt_list_t
*
queue_list
;
struct
rt_list_node
*
node
;
struct
rt_wqueue_node
*
entry
;
queue_list
=
&
(
queue
->
waiting_list
);
queue_list
=
&
(
queue
->
waiting_list
);
level
=
rt_hw_interrupt_disable
();
/* set wakeup flag in the queue */
queue
->
flag
=
RT_WQ_FLAG_WAKEUP
;
/* set wakeup flag in the queue */
queue
->
flag
=
RT_WQ_FLAG_WAKEUP
;
if
(
!
(
rt_list_isempty
(
queue_list
)))
{
for
(
node
=
queue_list
->
next
;
node
!=
queue_list
;
node
=
node
->
next
)
{
entry
=
rt_list_entry
(
node
,
struct
rt_wqueue_node
,
list
);
if
(
entry
->
wakeup
(
entry
,
key
)
==
0
)
{
rt_thread_resume
(
entry
->
polling_thread
);
need_schedule
=
1
;
rt_wqueue_remove
(
entry
);
break
;
}
}
for
(
node
=
queue_list
->
next
;
node
!=
queue_list
;
node
=
node
->
next
)
{
entry
=
rt_list_entry
(
node
,
struct
rt_wqueue_node
,
list
);
if
(
entry
->
wakeup
(
entry
,
key
)
==
0
)
{
rt_thread_resume
(
entry
->
polling_thread
);
need_schedule
=
1
;
rt_wqueue_remove
(
entry
);
break
;
}
}
}
rt_hw_interrupt_enable
(
level
);
...
...
@@ -85,11 +110,11 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec)
rt_list_init
(
&
__wait
.
list
);
level
=
rt_hw_interrupt_disable
();
if
(
queue
->
flag
==
RT_WQ_FLAG_WAKEUP
)
{
/* already wakeup */
goto
__exit_wakeup
;
}
if
(
queue
->
flag
==
RT_WQ_FLAG_WAKEUP
)
{
/* already wakeup */
goto
__exit_wakeup
;
}
rt_wqueue_add
(
queue
,
&
__wait
);
rt_thread_suspend
(
tid
);
...
...
@@ -110,7 +135,7 @@ int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec)
level
=
rt_hw_interrupt_disable
();
__exit_wakeup:
queue
->
flag
=
0
;
queue
->
flag
=
0
;
rt_hw_interrupt_enable
(
level
);
rt_wqueue_remove
(
&
__wait
);
...
...
include/rtdef.h
浏览文件 @
ef132f3c
...
...
@@ -868,8 +868,8 @@ struct rt_device_ops
*/
struct
rt_wqueue
{
rt_uint32_t
flag
;
rt_list_t
waiting_list
;
rt_uint32_t
flag
;
rt_list_t
waiting_list
;
};
typedef
struct
rt_wqueue
rt_wqueue_t
;
#endif
...
...
src/device.c
浏览文件 @
ef132f3c
...
...
@@ -77,7 +77,7 @@ rt_err_t rt_device_register(rt_device_t dev,
#if defined(RT_USING_POSIX)
dev
->
fops
=
RT_NULL
;
rt_wqueue_init
(
&
(
dev
->
wait_queue
));
rt_wqueue_init
(
&
(
dev
->
wait_queue
));
#endif
return
RT_EOK
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录