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:
daishengdong
2020-04-16 15:50:00 +08:00
parent 788c2389b7
commit c603a605fe
8 changed files with 927 additions and 24 deletions

View File

@@ -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"