XFusion API
v1.3.0
载入中...
搜索中...
未找到
examples/osal/semaphore/main/xf_main.c
xf_osal 信号量示例。
1
17
/* ==================== [Includes] ========================================== */
18
19
#include "xf_hal.h"
20
#include "xf_osal.h"
21
22
/* ==================== [Defines] =========================================== */
23
24
#define TAG "main"
25
26
/* ==================== [Typedefs] ========================================== */
27
28
/* ==================== [Static Prototypes] ================================= */
29
30
static
void
task1
(
void
*argument);
31
static
void
task2
(
void
*argument);
32
33
/* ==================== [Static Variables] ================================== */
34
35
static
xf_osal_semaphore_t
sem
= NULL;
36
37
/* ==================== [Macros] ============================================ */
38
39
/* ==================== [Global Functions] ================================== */
40
41
void
xf_main
(
void
)
42
{
43
xf_osal_semaphore_attr_t
sem_attr = {
44
.
name
=
"sem"
,
45
};
46
xf_osal_thread_attr_t
attr1 = {
47
.
name
=
"task1"
,
48
.priority =
XF_OSAL_PRIORITY_NORMOL
,
49
.stack_size = 1024 * 2,
50
};
51
xf_osal_thread_attr_t
attr2 = {
52
.
name
=
"task2"
,
53
.priority =
XF_OSAL_PRIORITY_ABOVE_NORMAL
,
54
.stack_size = 1024 * 2,
55
};
56
57
sem
=
xf_osal_semaphore_create
(1, 0, &sem_attr);
58
if
(
sem
== NULL) {
59
XF_LOGE
(
TAG
,
"xf sem create error"
);
60
return
;
61
}
62
63
xf_osal_semaphore_t
sem2 =
xf_osal_semaphore_create
(1, 0, &sem_attr);
64
if
(sem2 == NULL) {
65
XF_LOGE
(
TAG
,
"xf sem2 create error"
);
66
return
;
67
}
68
69
xf_err_t
err =
xf_osal_semaphore_delete
(sem2);
70
if
(err !=
XF_OK
) {
71
XF_LOGE
(
TAG
,
"xf sem2 delete error"
);
72
return
;
73
}
74
75
xf_osal_thread_t
thread1
=
xf_osal_thread_create
(
task1
, NULL, &attr1);
76
if
(
thread1
== NULL) {
77
XF_LOGE
(
TAG
,
"xf thread1 create error"
);
78
return
;
79
}
80
81
xf_osal_thread_t
thread2
=
xf_osal_thread_create
(
task2
, NULL, &attr2);
82
if
(
thread2
== NULL) {
83
XF_LOGE
(
TAG
,
"xf thread2 create error"
);
84
return
;
85
}
86
uint32_t count =
xf_osal_semaphore_get_count
(
sem
);
87
XF_LOGI
(
TAG
,
"count: %d"
, count);
88
}
89
90
/* ==================== [Static Functions] ================================== */
91
92
static
void
task1
(
void
*argument)
93
{
94
while
(1) {
95
XF_LOGI
(
TAG
,
"task1 running"
);
96
xf_osal_semaphore_release
(
sem
);
97
xf_osal_delay_ms
(1000);
98
}
99
}
100
101
static
void
task2
(
void
*argument)
102
{
103
while
(1) {
104
if
(
xf_osal_semaphore_acquire
(
sem
, 1000) ==
XF_OK
) {
105
XF_LOGI
(
TAG
,
"task2 running"
);
106
xf_osal_delay_ms
(1000);
107
}
else
{
108
XF_LOGI
(
TAG
,
"task2 timeout"
);
109
}
110
}
111
}
xf_main
void xf_main(void)
Definition
xf_main.c:28
xf_osal_semaphore_create
xf_osal_semaphore_t xf_osal_semaphore_create(uint32_t max_count, uint32_t initial_count, const xf_osal_semaphore_attr_t *attr)
创建并初始化信号量对象。
xf_osal_semaphore_release
xf_err_t xf_osal_semaphore_release(xf_osal_semaphore_t semaphore)
释放信号量令牌直至初始最大计数。
xf_osal_semaphore_delete
xf_err_t xf_osal_semaphore_delete(xf_osal_semaphore_t semaphore)
删除信号量对象。
xf_osal_semaphore_get_count
uint32_t xf_osal_semaphore_get_count(xf_osal_semaphore_t semaphore)
获取当前信号量令牌计数。
xf_osal_semaphore_acquire
xf_err_t xf_osal_semaphore_acquire(xf_osal_semaphore_t semaphore, uint32_t timeout)
获取信号量令牌,如果没有可用令牌则超时。
xf_osal_semaphore_t
void * xf_osal_semaphore_t
信号量句柄。
Definition
xf_osal_semaphore.h:41
xf_osal_thread_create
xf_osal_thread_t xf_osal_thread_create(xf_osal_thread_func_t func, void *argument, const xf_osal_thread_attr_t *attr)
创建一个线程并将其添加到活动线程中。
xf_osal_thread_t
void * xf_osal_thread_t
线程句柄。
Definition
xf_osal_thread.h:159
xf_osal_delay_ms
xf_err_t xf_osal_delay_ms(uint32_t ms)
(睡眠)等待超时,以 ms 为单位。
XF_OSAL_PRIORITY_NORMOL
@ XF_OSAL_PRIORITY_NORMOL
Definition
xf_osal_thread.h:95
XF_OSAL_PRIORITY_ABOVE_NORMAL
@ XF_OSAL_PRIORITY_ABOVE_NORMAL
Definition
xf_osal_thread.h:103
xf_err_t
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition
xf_err.h:69
XF_OK
@ XF_OK
Definition
xf_err.h:43
task2
static void task2(void *argument)
Definition
xf_main.c:104
TAG
#define TAG
Definition
xf_main.c:24
thread1
static xf_osal_thread_t thread1
Definition
xf_main.c:35
thread2
static xf_osal_thread_t thread2
Definition
xf_main.c:36
sem
static xf_osal_semaphore_t sem
Definition
xf_main.c:35
_xf_osal_semaphore_attr_t
信号量的属性结构。
Definition
xf_osal_semaphore.h:46
_xf_osal_semaphore_attr_t::name
const char * name
Definition
xf_osal_semaphore.h:47
_xf_osal_thread_attr_t
线程的属性结构。
Definition
xf_osal_thread.h:135
_xf_osal_thread_attr_t::name
const char * name
Definition
xf_osal_thread.h:136
task1
static xf_task_t * task1
Definition
xf_main.c:34
XF_LOGI
#define XF_LOGI(tag, format,...)
Definition
xf_log_uitls.h:44
XF_LOGE
#define XF_LOGE(tag, format,...)
Definition
xf_log_uitls.h:32
生成于 2025年 一月 21日 星期二 17:25:08 , 为 XFusion API使用
1.9.8