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
30static void task1(void *argument);
31static void task2(void *argument);
32
33/* ==================== [Static Variables] ================================== */
34
36
37/* ==================== [Macros] ============================================ */
38
39/* ==================== [Global Functions] ================================== */
40
41void 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",
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
70 if (err != XF_OK) {
71 XF_LOGE(TAG, "xf sem2 delete error");
72 return;
73 }
74
76 if (thread1 == NULL) {
77 XF_LOGE(TAG, "xf thread1 create error");
78 return;
79 }
80
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
92static void task1(void *argument)
93{
94 while (1) {
95 XF_LOGI(TAG, "task1 running");
97 xf_osal_delay_ms(1000);
98 }
99}
100
101static 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}
void xf_main(void)
Definition xf_main.c:28
xf_osal_semaphore_t xf_osal_semaphore_create(uint32_t max_count, uint32_t initial_count, const xf_osal_semaphore_attr_t *attr)
创建并初始化信号量对象。
xf_err_t xf_osal_semaphore_release(xf_osal_semaphore_t semaphore)
释放信号量令牌直至初始最大计数。
xf_err_t xf_osal_semaphore_delete(xf_osal_semaphore_t semaphore)
删除信号量对象。
uint32_t xf_osal_semaphore_get_count(xf_osal_semaphore_t semaphore)
获取当前信号量令牌计数。
xf_err_t xf_osal_semaphore_acquire(xf_osal_semaphore_t semaphore, uint32_t timeout)
获取信号量令牌,如果没有可用令牌则超时。
void * xf_osal_semaphore_t
信号量句柄。
xf_osal_thread_t xf_osal_thread_create(xf_osal_thread_func_t func, void *argument, const xf_osal_thread_attr_t *attr)
创建一个线程并将其添加到活动线程中。
void * xf_osal_thread_t
线程句柄。
xf_err_t xf_osal_delay_ms(uint32_t ms)
(睡眠)等待超时,以 ms 为单位。
@ XF_OSAL_PRIORITY_NORMOL
@ XF_OSAL_PRIORITY_ABOVE_NORMAL
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
@ XF_OK
Definition xf_err.h:43
static void task2(void *argument)
Definition xf_main.c:104
#define TAG
Definition xf_main.c:24
static xf_osal_thread_t thread1
Definition xf_main.c:35
static xf_osal_thread_t thread2
Definition xf_main.c:36
static xf_osal_semaphore_t sem
Definition xf_main.c:35
信号量的属性结构。
线程的属性结构。
static xf_task_t * task1
Definition xf_main.c:34
#define XF_LOGI(tag, format,...)
#define XF_LOGE(tag, format,...)