XFusion API
v1.3.0
载入中...
搜索中...
未找到
xf_main.c
浏览该文件的文档.
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_mutex_t
mutex
= NULL;
36
static
int
shared_resource
= 0;
37
38
/* ==================== [Macros] ============================================ */
39
40
/* ==================== [Global Functions] ================================== */
41
42
void
xf_main
(
void
)
43
{
44
xf_osal_mutex_attr_t
mutex_attr = {
45
.
name
=
"mutex"
,
46
};
47
xf_osal_thread_attr_t
attr1 = {
48
.
name
=
"task1"
,
49
.priority =
XF_OSAL_PRIORITY_NORMOL
,
50
.stack_size = 1024 * 2,
51
};
52
xf_osal_thread_attr_t
attr2 = {
53
.
name
=
"task2"
,
54
.priority =
XF_OSAL_PRIORITY_ABOVE_NORMAL
,
55
.stack_size = 1024 * 2,
56
};
57
58
mutex
=
xf_osal_mutex_create
(&mutex_attr);
59
if
(
mutex
== NULL) {
60
XF_LOGE
(
TAG
,
"xf mutex create error"
);
61
return
;
62
}
63
64
xf_osal_mutex_t
mutex2 =
xf_osal_mutex_create
(&mutex_attr);
65
if
(mutex2 == NULL) {
66
XF_LOGE
(
TAG
,
"xf mutex2 create error"
);
67
return
;
68
}
69
70
xf_err_t
err =
xf_osal_mutex_delete
(mutex2);
71
if
(err !=
XF_OK
) {
72
XF_LOGE
(
TAG
,
"xf mutex2 delete error"
);
73
return
;
74
}
75
76
xf_osal_thread_t
thread1
=
xf_osal_thread_create
(
task1
, NULL, &attr1);
77
if
(
thread1
== NULL) {
78
XF_LOGE
(
TAG
,
"xf thread1 create error"
);
79
return
;
80
}
81
82
xf_osal_thread_t
thread2
=
xf_osal_thread_create
(
task2
, NULL, &attr2);
83
if
(
thread2
== NULL) {
84
XF_LOGE
(
TAG
,
"xf thread2 create error"
);
85
return
;
86
}
87
}
88
89
/* ==================== [Static Functions] ================================== */
90
91
static
void
task1
(
void
*argument)
92
{
93
XF_LOGI
(
TAG
,
"%s:%p"
, __func__,
xf_osal_thread_get_current
());
94
while
(1) {
95
if
(
xf_osal_mutex_acquire
(
mutex
, 100) ==
XF_OK
) {
96
XF_LOGI
(
TAG
,
"Task1: Accessing shared resource..."
);
97
shared_resource
++;
98
XF_LOGI
(
TAG
,
"Task1: Shared resource value: %d\n"
,
shared_resource
);
99
xf_osal_mutex_release
(
mutex
);
100
xf_osal_delay_ms
(800);
101
}
else
{
102
XF_LOGI
(
TAG
,
"Task1: Acquire mutex timeout"
);
103
xf_osal_thread_t
thread
=
xf_osal_mutex_get_owner
(
mutex
);
104
XF_LOGI
(
TAG
,
"Task1: Mutex owner: %p"
,
thread
);
105
}
106
}
107
}
108
109
static
void
task2
(
void
*argument)
110
{
111
XF_LOGI
(
TAG
,
"%s:%p"
, __func__,
xf_osal_thread_get_current
());
112
while
(1) {
113
if
(
xf_osal_mutex_acquire
(
mutex
,
XF_OSAL_WAIT_FOREVER
) ==
XF_OK
) {
114
XF_LOGI
(
TAG
,
"Task2: Accessing shared resource..."
);
115
shared_resource
++;
116
XF_LOGI
(
TAG
,
"Task1: Shared resource value: %d\n"
,
shared_resource
);
117
xf_osal_delay_ms
(1000);
118
xf_osal_mutex_release
(
mutex
);
119
}
120
}
121
}
xf_main
void xf_main(void)
Definition
xf_main.c:28
xf_osal_mutex_t
void * xf_osal_mutex_t
互斥锁句柄。
Definition
xf_osal_mutex.h:93
xf_osal_mutex_release
xf_err_t xf_osal_mutex_release(xf_osal_mutex_t mutex)
释放互斥锁。
xf_osal_mutex_get_owner
xf_osal_thread_t xf_osal_mutex_get_owner(xf_osal_mutex_t mutex)
获取互斥锁持有者线程句柄。
xf_osal_mutex_acquire
xf_err_t xf_osal_mutex_acquire(xf_osal_mutex_t mutex, uint32_t timeout)
获取互斥锁。
xf_osal_mutex_create
xf_osal_mutex_t xf_osal_mutex_create(const xf_osal_mutex_attr_t *attr)
创建并初始化互斥锁。
xf_osal_mutex_delete
xf_err_t xf_osal_mutex_delete(xf_osal_mutex_t mutex)
删除互斥锁。
xf_osal_thread_get_current
xf_osal_thread_t xf_osal_thread_get_current(void)
返回当前正在运行的线程的线程句柄。
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_OSAL_WAIT_FOREVER
#define XF_OSAL_WAIT_FOREVER
Definition
xf_osal_def.h:30
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
shared_resource
static int shared_resource
Definition
xf_main.c:36
mutex
static xf_osal_mutex_t mutex
Definition
xf_main.c:35
thread1
static xf_osal_thread_t thread1
Definition
xf_main.c:35
thread2
static xf_osal_thread_t thread2
Definition
xf_main.c:36
thread
static xf_osal_thread_t thread[2]
Definition
xf_main.c:43
_xf_osal_mutex_attr_t
互斥锁的属性结构。
Definition
xf_osal_mutex.h:98
_xf_osal_mutex_attr_t::name
const char * name
Definition
xf_osal_mutex.h:99
_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
examples
osal
mutex
main
xf_main.c
生成于 2025年 一月 21日 星期二 17:25:09 , 为 XFusion API使用
1.9.8