Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_46254178
rt-thread
提交
e9c16503
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,发现更多精彩内容 >>
提交
e9c16503
编写于
7月 12, 2018
作者:
armink_ztl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[kernel][idle] Add idle hook list.
上级
60435316
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
86 addition
and
6 deletion
+86
-6
include/rtthread.h
include/rtthread.h
+2
-1
src/Kconfig
src/Kconfig
+9
-0
src/idle.c
src/idle.c
+75
-5
未找到文件。
include/rtthread.h
浏览文件 @
e9c16503
...
...
@@ -173,7 +173,8 @@ void rt_thread_inited_sethook (void (*hook)(rt_thread_t thread));
*/
void
rt_thread_idle_init
(
void
);
#if defined(RT_USING_HOOK) || defined(RT_USING_IDLE_HOOK)
void
rt_thread_idle_sethook
(
void
(
*
hook
)(
void
));
rt_err_t
rt_thread_idle_sethook
(
void
(
*
hook
)(
void
));
rt_err_t
rt_thread_idle_delhook
(
void
(
*
hook
)(
void
));
#endif
void
rt_thread_idle_excute
(
void
);
rt_thread_t
rt_thread_idle_gethandler
(
void
);
...
...
src/Kconfig
浏览文件 @
e9c16503
...
...
@@ -75,6 +75,15 @@ config RT_USING_HOOK
Enable the hook function when system running, such as idle thread hook,
thread context switch etc.
if RT_USING_HOOK
config RT_IDEL_HOOK_LIST_SIZE
int "The max size of idel hook list"
default 4
range 1 16
help
The system has a hook list. This is the hook list size.
endif
config IDLE_THREAD_STACK_SIZE
int "The stack size of idle thread"
default 256
...
...
src/idle.c
浏览文件 @
e9c16503
...
...
@@ -52,7 +52,12 @@ static rt_uint8_t rt_thread_stack[IDLE_THREAD_STACK_SIZE];
extern
rt_list_t
rt_thread_defunct
;
#ifdef RT_USING_IDLE_HOOK
static
void
(
*
rt_thread_idle_hook
)();
#ifndef RT_IDEL_HOOK_LIST_SIZE
#define RT_IDEL_HOOK_LIST_SIZE 4
#endif
static
void
(
*
idle_hook_list
[
RT_IDEL_HOOK_LIST_SIZE
])();
/**
* @ingroup Hook
...
...
@@ -61,12 +66,69 @@ static void (*rt_thread_idle_hook)();
*
* @param hook the specified hook function
*
* @return RT_EOK: set OK
* -RT_EFULL: hook list is full
*
* @note the hook function must be simple and never be blocked or suspend.
*/
void
rt_thread_idle_sethook
(
void
(
*
hook
)(
void
))
rt_err_t
rt_thread_idle_sethook
(
void
(
*
hook
)(
void
))
{
rt_thread_idle_hook
=
hook
;
rt_size_t
i
;
rt_base_t
level
;
/* disable interrupt */
level
=
rt_hw_interrupt_disable
();
for
(
i
=
0
;
i
<
RT_IDEL_HOOK_LIST_SIZE
;
i
++
)
{
if
(
idle_hook_list
[
i
]
==
RT_NULL
)
{
idle_hook_list
[
i
]
=
hook
;
/* enable interrupt */
rt_hw_interrupt_enable
(
level
);
return
RT_EOK
;
}
}
/* enable interrupt */
rt_hw_interrupt_enable
(
level
);
return
-
RT_EFULL
;
}
/**
* delete the idle hook on hook list
*
* @param hook the specified hook function
*
* @return RT_EOK: delete OK
* -RT_ENOSYS: hook was not found
*/
rt_err_t
rt_thread_idle_delhook
(
void
(
*
hook
)(
void
))
{
rt_size_t
i
;
rt_base_t
level
;
/* disable interrupt */
level
=
rt_hw_interrupt_disable
();
for
(
i
=
0
;
i
<
RT_IDEL_HOOK_LIST_SIZE
;
i
++
)
{
if
(
idle_hook_list
[
i
]
==
hook
)
{
idle_hook_list
[
i
]
=
RT_NULL
;
/* enable interrupt */
rt_hw_interrupt_enable
(
level
);
return
RT_EOK
;
}
}
/* enable interrupt */
rt_hw_interrupt_enable
(
level
);
return
-
RT_ENOSYS
;
}
#endif
/* Return whether there is defunctional thread to be deleted. */
...
...
@@ -174,12 +236,20 @@ void rt_thread_idle_excute(void)
static
void
rt_thread_idle_entry
(
void
*
parameter
)
{
#ifdef RT_USING_IDLE_HOOK
rt_size_t
i
;
#endif
while
(
1
)
{
#ifdef RT_USING_IDLE_HOOK
if
(
rt_thread_idle_hook
!=
RT_NULL
)
for
(
i
=
0
;
i
<
RT_IDEL_HOOK_LIST_SIZE
;
i
++
)
{
rt_thread_idle_hook
();
if
(
idle_hook_list
[
i
]
!=
RT_NULL
)
{
idle_hook_list
[
i
]();
}
}
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录