refresh sdk manual and development manul
1. add barrier/bitmap/stopwatch/rwlock API to sdk manual 2. add barrier develop sample to develop manual
This commit is contained in:
@@ -850,11 +850,7 @@ int main(void)
|
||||
|
||||
##### 编程实例
|
||||
|
||||
1、在tos_config.h中,配置队列组件开关TOS_CFG_COUNTDOWNLATCH_EN:
|
||||
|
||||
`#define TOS_CFG_COUNTDOWNLATCH_EN 1u`
|
||||
|
||||
2、编写main.c示例代码:
|
||||
1、编写main.c示例代码:
|
||||
|
||||
```c
|
||||
/*
|
||||
@@ -933,7 +929,97 @@ int main(void)
|
||||
|
||||
[实例代码](./code/2.3.5 countdownlatch/main.c)
|
||||
|
||||
#### 2.3.6 消息队列
|
||||
#### 2.3.6 栅栏
|
||||
|
||||
##### 概述
|
||||
|
||||
栅栏提供了一种设置任务阻塞屏障的机制,栅栏创建的时候会指定一个计数值,每当有任务执行tos_barrier_pend时,该计数锁的计数值减一,直到计数锁的计数值为零时,所有阻塞在tos_barrier_pend点上的任务才可以往下运行。
|
||||
|
||||
##### API讲解
|
||||
|
||||
##### 编程实例
|
||||
|
||||
1、编写main.c示例代码:
|
||||
|
||||
```c
|
||||
/*
|
||||
假设有这样的业务场景,共有三个勇士,此三个勇士分头去寻找三个武器的碎片,任意勇士找到自己的那块武器碎片时,都在原地等待,直到所有的小伙伴都找到了自己的武器碎片后,才各自采取下一步行动。用代码看具体如何使用栅栏来完成这个模型。
|
||||
*/
|
||||
|
||||
#include "tos_k.h"
|
||||
#include "mcu_init.h"
|
||||
|
||||
#define STK_SIZE_TASK_WIZARD 512
|
||||
#define STK_SIZE_TASK_WARRIOR 512
|
||||
|
||||
k_stack_t stack_task_warrior_0[STK_SIZE_TASK_WARRIOR];
|
||||
k_stack_t stack_task_warrior_1[STK_SIZE_TASK_WARRIOR];
|
||||
k_stack_t stack_task_warrior_2[STK_SIZE_TASK_WARRIOR];
|
||||
|
||||
k_task_t task_warrior_0;
|
||||
k_task_t task_warrior_1;
|
||||
k_task_t task_warrior_2;
|
||||
|
||||
k_barrier_t barrier;
|
||||
|
||||
void entry_task_warrior_0(void *arg)
|
||||
{
|
||||
printf("warrior 0: I'm searching the fragment\n");
|
||||
tos_task_delay(1000);
|
||||
printf("warrior 0: I have done my job, waitting other buddies done their job\n");
|
||||
tos_barrier_pend(&barrier);
|
||||
printf("warrior 0: all buddies find their fragment, do my next job\n");
|
||||
}
|
||||
|
||||
void entry_task_warrior_1(void *arg)
|
||||
{
|
||||
printf("warrior 1: I'm searching the fragment\n");
|
||||
tos_task_delay(1500);
|
||||
printf("warrior 1: I have done my job, waitting other buddies done their job\n");
|
||||
tos_barrier_pend(&barrier);
|
||||
printf("warrior 1: all buddies find their fragment, do my next job\n");
|
||||
}
|
||||
|
||||
void entry_task_warrior_2(void *arg)
|
||||
{
|
||||
printf("warrior 2: I'm searching the fragment\n");
|
||||
tos_task_delay(2000);
|
||||
printf("warrior 2: I have done my job, waitting other buddies done their job\n");
|
||||
tos_barrier_pend(&barrier);
|
||||
printf("warrior 2: all buddies find their fragment, do my next job\n");
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
board_init();
|
||||
tos_knl_init();
|
||||
tos_barrier_create(&barrier, 3);
|
||||
|
||||
(void)tos_task_create(&task_warrior_0, "warrior_0", entry_task_warrior_0, NULL,
|
||||
4, stack_task_warrior_0, STK_SIZE_TASK_WIZARD, 0);
|
||||
(void)tos_task_create(&task_warrior_1, "warrior_1", entry_task_warrior_1, NULL,
|
||||
4, stack_task_warrior_1, STK_SIZE_TASK_WIZARD, 0);
|
||||
(void)tos_task_create(&task_warrior_2, "warrior_2", entry_task_warrior_2, NULL,
|
||||
4, stack_task_warrior_2, STK_SIZE_TASK_WIZARD, 0);
|
||||
tos_knl_start();
|
||||
}
|
||||
```
|
||||
|
||||
##### 运行效果
|
||||
|
||||
> warrior 0: I'm searching the fragment
|
||||
> warrior 1: I'm searching the fragment
|
||||
> warrior 2: I'm searching the fragment
|
||||
> warrior 0: I have done my job, waitting other buddies done their job
|
||||
> warrior 1: I have done my job, waitting other buddies done their job
|
||||
> warrior 2: I have done my job, waitting other buddies done their job
|
||||
> warrior 2: all buddies find their fragment, do my next job
|
||||
> warrior 0: all buddies find their fragment, do my next job
|
||||
> warrior 1: all buddies find their fragment, do my next job
|
||||
|
||||
[实例代码](./code/2.3.6 barrier/main.c)
|
||||
|
||||
#### 2.3.7 消息队列
|
||||
|
||||
##### 概述
|
||||
|
||||
@@ -1065,9 +1151,9 @@ int main(void)
|
||||
> higher: msg incoming[message for all receivers]
|
||||
> lower: msg incoming[message for all receivers]
|
||||
|
||||
[实例代码](./code/2.3.6 message queue/main.c)
|
||||
[实例代码](./code/2.3.7 message queue/main.c)
|
||||
|
||||
#### 2.3.7 邮箱队列
|
||||
#### 2.3.8 邮箱队列
|
||||
|
||||
##### 概述
|
||||
|
||||
@@ -1214,9 +1300,9 @@ int main(void)
|
||||
> higher: msg incoming[4th time post], payload[4]
|
||||
> lower: msg incoming[4th time post], payload[4]
|
||||
|
||||
[实例代码](./code/2.3.7 mail queue/main.c)
|
||||
[实例代码](./code/2.3.8 mail queue/main.c)
|
||||
|
||||
#### 2.3.8 优先级消息队列
|
||||
#### 2.3.9 优先级消息队列
|
||||
|
||||
##### 概述
|
||||
|
||||
@@ -1305,9 +1391,9 @@ int main(void)
|
||||
> receiver: msg incoming[msg with priority 1]
|
||||
> receiver: msg incoming[msg with priority 2]
|
||||
|
||||
[实例代码](./code/2.3.8 priority message queue/main.c)
|
||||
[实例代码](./code/2.3.9 priority message queue/main.c)
|
||||
|
||||
#### 2.3.9 优先级邮箱队列
|
||||
#### 2.3.10 优先级邮箱队列
|
||||
|
||||
##### 概述
|
||||
|
||||
@@ -1410,7 +1496,7 @@ int main(void)
|
||||
> receiver: msg incoming[priority 1], payload[1]
|
||||
> receiver: msg incoming[priority 2], payload[2]
|
||||
|
||||
[实例代码](./code/2.3.9 priority mail queue/main.c)
|
||||
[实例代码](./code/2.3.10 priority mail queue/main.c)
|
||||
|
||||
### 2.4 内存管理
|
||||
|
||||
@@ -1551,11 +1637,7 @@ k_err_t tos_mmblk_pool_create(k_mmblk_pool_t *mbp, void *pool_start, size_t blk_
|
||||
|
||||
##### 编程实例
|
||||
|
||||
1、在tos_config.h中,配置静态内存组件开关TOS_CFG_MMBLK_EN:
|
||||
|
||||
`#define TOS_CFG_MMBLK_EN 1u`
|
||||
|
||||
2、编写main.c示例代码:
|
||||
1、编写main.c示例代码:
|
||||
|
||||
```c
|
||||
#include "tos_k.h"
|
||||
|
Reference in New Issue
Block a user