Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
okll00
rt-thread
提交
08df0b8e
R
rt-thread
项目概览
okll00
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
08df0b8e
编写于
5月 22, 2019
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
prepare v3.1.3 release
上级
b2ae7d72
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
51 addition
and
46 deletion
+51
-46
include/rtdef.h
include/rtdef.h
+5
-2
src/components.c
src/components.c
+0
-3
src/scheduler.c
src/scheduler.c
+19
-7
src/signal.c
src/signal.c
+27
-34
未找到文件。
include/rtdef.h
浏览文件 @
08df0b8e
...
@@ -54,6 +54,7 @@ extern "C" {
...
@@ -54,6 +54,7 @@ extern "C" {
(RT_SUBVERSION * 100) + RT_REVISION)
(RT_SUBVERSION * 100) + RT_REVISION)
/* RT-Thread basic data type definitions */
/* RT-Thread basic data type definitions */
#ifndef RT_USING_ARCH_DATA_TYPE
typedef
signed
char
rt_int8_t
;
/**< 8bit integer type */
typedef
signed
char
rt_int8_t
;
/**< 8bit integer type */
typedef
signed
short
rt_int16_t
;
/**< 16bit integer type */
typedef
signed
short
rt_int16_t
;
/**< 16bit integer type */
typedef
signed
long
rt_int32_t
;
/**< 32bit integer type */
typedef
signed
long
rt_int32_t
;
/**< 32bit integer type */
...
@@ -62,6 +63,7 @@ typedef unsigned char rt_uint8_t; /**< 8bit unsigned inte
...
@@ -62,6 +63,7 @@ typedef unsigned char rt_uint8_t; /**< 8bit unsigned inte
typedef
unsigned
short
rt_uint16_t
;
/**< 16bit unsigned integer type */
typedef
unsigned
short
rt_uint16_t
;
/**< 16bit unsigned integer type */
typedef
unsigned
long
rt_uint32_t
;
/**< 32bit unsigned integer type */
typedef
unsigned
long
rt_uint32_t
;
/**< 32bit unsigned integer type */
typedef
unsigned
long
long
rt_uint64_t
;
/**< 64bit unsigned integer type */
typedef
unsigned
long
long
rt_uint64_t
;
/**< 64bit unsigned integer type */
#endif
typedef
int
rt_bool_t
;
/**< boolean type */
typedef
int
rt_bool_t
;
/**< boolean type */
/* 32bit CPU */
/* 32bit CPU */
...
@@ -481,9 +483,10 @@ typedef siginfo_t rt_siginfo_t;
...
@@ -481,9 +483,10 @@ typedef siginfo_t rt_siginfo_t;
#define RT_THREAD_CLOSE 0x04
/**< Closed status */
#define RT_THREAD_CLOSE 0x04
/**< Closed status */
#define RT_THREAD_STAT_MASK 0x0f
#define RT_THREAD_STAT_MASK 0x0f
#define RT_THREAD_STAT_SIGNAL 0x10
#define RT_THREAD_STAT_SIGNAL 0x10
/**< task hold signals */
#define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY)
#define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY)
#define RT_THREAD_STAT_SIGNAL_WAIT 0x20
#define RT_THREAD_STAT_SIGNAL_WAIT 0x20
/**< task is waiting for signals */
#define RT_THREAD_STAT_SIGNAL_PENDING 0x40
/**< signals is held and it has not been procressed */
#define RT_THREAD_STAT_SIGNAL_MASK 0xf0
#define RT_THREAD_STAT_SIGNAL_MASK 0xf0
/**
/**
...
...
src/components.c
浏览文件 @
08df0b8e
...
@@ -137,7 +137,6 @@ extern int $Super$$main(void);
...
@@ -137,7 +137,6 @@ extern int $Super$$main(void);
/* re-define main function */
/* re-define main function */
int
$
Sub
$$
main
(
void
)
int
$
Sub
$$
main
(
void
)
{
{
rt_hw_interrupt_disable
();
rtthread_startup
();
rtthread_startup
();
return
0
;
return
0
;
}
}
...
@@ -149,7 +148,6 @@ int __low_level_init(void)
...
@@ -149,7 +148,6 @@ int __low_level_init(void)
{
{
// call IAR table copy function.
// call IAR table copy function.
__iar_data_init3
();
__iar_data_init3
();
rt_hw_interrupt_disable
();
rtthread_startup
();
rtthread_startup
();
return
0
;
return
0
;
}
}
...
@@ -158,7 +156,6 @@ extern int main(void);
...
@@ -158,7 +156,6 @@ extern int main(void);
/* Add -eentry to arm-none-eabi-gcc argument */
/* Add -eentry to arm-none-eabi-gcc argument */
int
entry
(
void
)
int
entry
(
void
)
{
{
rt_hw_interrupt_disable
();
rtthread_startup
();
rtthread_startup
();
return
0
;
return
0
;
}
}
...
...
src/scheduler.c
浏览文件 @
08df0b8e
...
@@ -193,7 +193,7 @@ void rt_schedule(void)
...
@@ -193,7 +193,7 @@ void rt_schedule(void)
struct
rt_thread
*
from_thread
;
struct
rt_thread
*
from_thread
;
/* disable interrupt */
/* disable interrupt */
level
=
rt_hw_interrupt_disable
();
level
=
rt_hw_interrupt_disable
();
/* check the scheduler is enabled or not */
/* check the scheduler is enabled or not */
if
(
rt_scheduler_lock_nest
==
0
)
if
(
rt_scheduler_lock_nest
==
0
)
...
@@ -238,18 +238,30 @@ void rt_schedule(void)
...
@@ -238,18 +238,30 @@ void rt_schedule(void)
if
(
rt_interrupt_nest
==
0
)
if
(
rt_interrupt_nest
==
0
)
{
{
extern
void
rt_thread_handle_sig
(
void
);
rt_hw_context_switch
((
rt_uint32_t
)
&
from_thread
->
sp
,
rt_hw_context_switch
((
rt_uint32_t
)
&
from_thread
->
sp
,
(
rt_uint32_t
)
&
to_thread
->
sp
);
(
rt_uint32_t
)
&
to_thread
->
sp
);
#ifdef RT_USING_SIGNALS
if
(
rt_current_thread
->
stat
&
RT_THREAD_STAT_SIGNAL_PENDING
)
{
extern
void
rt_thread_handle_sig
(
rt_bool_t
clean_state
);
rt_current_thread
->
stat
&=
~
RT_THREAD_STAT_SIGNAL_PENDING
;
rt_hw_interrupt_enable
(
level
);
/* check signal status */
rt_thread_handle_sig
(
RT_TRUE
);
}
else
{
rt_hw_interrupt_enable
(
level
);
}
#else
/* enable interrupt */
/* enable interrupt */
rt_hw_interrupt_enable
(
level
);
rt_hw_interrupt_enable
(
level
);
#ifdef RT_USING_SIGNALS
/* handle signal */
rt_thread_handle_sig
();
#endif
#endif
return
;
return
;
}
}
else
else
...
...
src/signal.c
浏览文件 @
08df0b8e
...
@@ -21,8 +21,8 @@
...
@@ -21,8 +21,8 @@
#define RT_SIG_INFO_MAX 32
#define RT_SIG_INFO_MAX 32
#endif
#endif
#define DBG_
SECTION_NAME
"SIGN"
#define DBG_
TAG
"SIGN"
#define DBG_L
EVEL DBG_INFO
#define DBG_L
VL DBG_WARNING
#include <rtdbg.h>
#include <rtdbg.h>
#define sig_mask(sig_no) (1u << sig_no)
#define sig_mask(sig_no) (1u << sig_no)
...
@@ -36,7 +36,7 @@ struct siginfo_node
...
@@ -36,7 +36,7 @@ struct siginfo_node
static
struct
rt_mempool
*
_rt_siginfo_pool
;
static
struct
rt_mempool
*
_rt_siginfo_pool
;
static
void
_signal_deliver
(
rt_thread_t
tid
);
static
void
_signal_deliver
(
rt_thread_t
tid
);
void
rt_thread_handle_sig
(
void
);
void
rt_thread_handle_sig
(
rt_bool_t
clean_state
);
static
void
_signal_default_handler
(
int
signo
)
static
void
_signal_default_handler
(
int
signo
)
{
{
...
@@ -46,36 +46,19 @@ static void _signal_default_handler(int signo)
...
@@ -46,36 +46,19 @@ static void _signal_default_handler(int signo)
static
void
_signal_entry
(
void
*
parameter
)
static
void
_signal_entry
(
void
*
parameter
)
{
{
register
rt_base_t
level
;
rt_thread_t
tid
=
rt_thread_self
();
rt_thread_t
tid
=
rt_thread_self
();
while
(
1
)
/* handle signal */
{
rt_thread_handle_sig
(
RT_FALSE
);
level
=
rt_hw_interrupt_disable
();
if
(
tid
->
stat
&
RT_THREAD_STAT_SIGNAL
)
{
rt_hw_interrupt_enable
(
level
);
/* handle signal */
rt_thread_handle_sig
();
}
else
{
/*
* Note: interrupt is disabled and no reentrant issue.
*
* no signal status in tid->stat.
*/
break
;
}
}
/*
never come back...
*/
/*
return to thread
*/
tid
->
sp
=
tid
->
sig_ret
;
tid
->
sp
=
tid
->
sig_ret
;
tid
->
sig_ret
=
RT_NULL
;
tid
->
sig_ret
=
RT_NULL
;
LOG_D
(
"switch back to: 0x%08x"
,
tid
->
sp
);
LOG_D
(
"switch back to: 0x%08x
\n
"
,
tid
->
sp
);
rt_hw_context_switch_to
((
rt_uint32_t
)
&
(
tid
->
sp
));
tid
->
stat
&=
~
RT_THREAD_STAT_SIGNAL
;
rt_hw_context_switch_to
((
rt_ubase_t
)
&
(
tid
->
sp
));
}
}
/*
/*
...
@@ -106,7 +89,7 @@ static void _signal_deliver(rt_thread_t tid)
...
@@ -106,7 +89,7 @@ static void _signal_deliver(rt_thread_t tid)
/* resume thread to handle signal */
/* resume thread to handle signal */
rt_thread_resume
(
tid
);
rt_thread_resume
(
tid
);
/* add signal state */
/* add signal state */
tid
->
stat
|=
RT_THREAD_STAT_SIGNAL
;
tid
->
stat
|=
(
RT_THREAD_STAT_SIGNAL
|
RT_THREAD_STAT_SIGNAL_PENDING
)
;
rt_hw_interrupt_enable
(
level
);
rt_hw_interrupt_enable
(
level
);
...
@@ -123,14 +106,18 @@ static void _signal_deliver(rt_thread_t tid)
...
@@ -123,14 +106,18 @@ static void _signal_deliver(rt_thread_t tid)
rt_hw_interrupt_enable
(
level
);
rt_hw_interrupt_enable
(
level
);
/* do signal action in self thread context */
/* do signal action in self thread context */
rt_thread_handle_sig
();
if
(
rt_interrupt_get_nest
()
==
0
)
{
rt_thread_handle_sig
(
RT_TRUE
);
}
}
}
else
if
(
!
((
tid
->
stat
&
RT_THREAD_STAT_SIGNAL_MASK
)
&
RT_THREAD_STAT_SIGNAL
))
else
if
(
!
((
tid
->
stat
&
RT_THREAD_STAT_SIGNAL_MASK
)
&
RT_THREAD_STAT_SIGNAL
))
{
{
/* add signal state */
/* add signal state */
tid
->
stat
|=
RT_THREAD_STAT_SIGNAL
;
tid
->
stat
|=
(
RT_THREAD_STAT_SIGNAL
|
RT_THREAD_STAT_SIGNAL_PENDING
)
;
/* point to the signal handle entry */
/* point to the signal handle entry */
tid
->
stat
&=
~
RT_THREAD_STAT_SIGNAL_PENDING
;
tid
->
sig_ret
=
tid
->
sp
;
tid
->
sig_ret
=
tid
->
sp
;
tid
->
sp
=
rt_hw_stack_init
((
void
*
)
_signal_entry
,
RT_NULL
,
tid
->
sp
=
rt_hw_stack_init
((
void
*
)
_signal_entry
,
RT_NULL
,
(
void
*
)((
char
*
)
tid
->
sig_ret
-
32
),
RT_NULL
);
(
void
*
)((
char
*
)
tid
->
sig_ret
-
32
),
RT_NULL
);
...
@@ -327,7 +314,7 @@ __done_return:
...
@@ -327,7 +314,7 @@ __done_return:
return
ret
;
return
ret
;
}
}
void
rt_thread_handle_sig
(
void
)
void
rt_thread_handle_sig
(
rt_bool_t
clean_state
)
{
{
rt_base_t
level
;
rt_base_t
level
;
...
@@ -335,7 +322,6 @@ void rt_thread_handle_sig(void)
...
@@ -335,7 +322,6 @@ void rt_thread_handle_sig(void)
struct
siginfo_node
*
si_node
;
struct
siginfo_node
*
si_node
;
level
=
rt_hw_interrupt_disable
();
level
=
rt_hw_interrupt_disable
();
if
(
tid
->
sig_pending
&
tid
->
sig_mask
)
if
(
tid
->
sig_pending
&
tid
->
sig_mask
)
{
{
/* if thread is not waiting for signal */
/* if thread is not waiting for signal */
...
@@ -371,8 +357,15 @@ void rt_thread_handle_sig(void)
...
@@ -371,8 +357,15 @@ void rt_thread_handle_sig(void)
tid
->
error
=
error
;
tid
->
error
=
error
;
}
}
/* clean state */
/* whether clean signal status */
tid
->
stat
&=
~
RT_THREAD_STAT_SIGNAL
;
if
(
clean_state
==
RT_TRUE
)
{
tid
->
stat
&=
~
RT_THREAD_STAT_SIGNAL
;
}
else
{
return
;
}
}
}
}
}
rt_hw_interrupt_enable
(
level
);
rt_hw_interrupt_enable
(
level
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录