From f38824afcdbff4a6c76bec0d8a2cd7f3e594fca1 Mon Sep 17 00:00:00 2001 From: chenyingchun0312 Date: Sun, 15 Aug 2021 20:40:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E5=A2=9E=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E3=80=91device-ipc=20completion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device-ipc/completion/completion.md | 255 ++++++++++++++++++ .../figures/rt_complete_wait_flow_chart.png | Bin 0 -> 40848 bytes .../figures/rt_completion_done_flow_chart.png | Bin 0 -> 32440 bytes .../device-ipc/completion/figures/usage.png | Bin 0 -> 27573 bytes 4 files changed, 255 insertions(+) create mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md create mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/rt_complete_wait_flow_chart.png create mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/rt_completion_done_flow_chart.png create mode 100644 rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/usage.png diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md b/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md new file mode 100644 index 0000000..13995e6 --- /dev/null +++ b/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md @@ -0,0 +1,255 @@ +# completion + +## 简介 + +`completion` 可以称之为**完成量**,是一种轻量级的线程间(`IPC`)同步机制,举一个生活中的例子来理解下,公交车上的售票员是一个线程1,公交车司机是一个线程2,只有当公交车司机停车后,售票员才能把车门打开。即售票员(线程1)等待司机(线程2)停车(完成了某件事)后,当售票员(线程1)才能开门(做某件事)。 + + + +## 完成量和信号量对比 + +- 信号量是一种非常灵活的同步方式,可以运用在多种场合中。形成锁、同步、资源计数等关系,也能方便的用于线程与线程、中断与线程间的同步中 +- 完成量,是一种更加轻型的线程间同步的一种实现,可以理解为轻量级的二值信号量,可以用于线程和线程间同步,也可以用于线程和中断之间的同步 +- 完成量不支持在某个线程中调用`rt_completion_wait`,还未唤醒退出时,在另一个线程中调用该函数 +> 注意:当完成量应用于线程和中断之间的同步时,中断函数中只能调用rt_completion_done接口,而不能调用rt_completion_wait接口,因为wait接口是阻塞型接口,不可以在中断函数中调用 + + + +## 完成量控制块介绍 + +在RT-Thread中,完成量控制块是操作系统用于管理完成量的一个数据结构,由结构体 `struct rt_completion`表示,完成量控制块的详细定义如下: + +```C +struct rt_completion +{ + rt_uint32_t flag; + + /* suspended list */ + rt_list_t suspended_list; +}; +``` + +其中 flag,表征当前完成量对象的状态,用下面的两个宏表示,即当flag值为`RT_COMPLETED`时,表征当前完成量对象已完成了某一个工作,可以继续下一个工作; 当flag值为`RT_UNCOMPLETED`时,表征当前需要等待某一个工作结束才能继续下一个工作 + +``` +#define RT_COMPLETED 1 +#define RT_UNCOMPLETED 0 +``` + + + +## 完成量 API 接口介绍 + +rt-thread中,完成量是一个轻量级的线程同步机制的实现,因此完成量的API接口,也很少,很简洁,下面详细介绍,说明 + +### 初始化完成量 + +#### 接口定义 + +```C +void rt_completion_init(struct rt_completion *completion) +``` + + + +#### 接口参数说明 + +下表描述了该函数的输入参数与返回值: + +| 参数 | 描述 | +| ---------- | -------------- | +| completion | 完成量对象指针 | +| **返回** | —— | +| 无 | | + + + +#### 接口理解 + +1. 完成量的创建只支持静态对象初始化,不支持动态生成对象,在调用初始化接口时,需要传递一个静态的完成量对象的指针 + +2. 在完成量初始化接口中,只完成两件事,设置flag为`RT_UNCOMPLETED`,然后初始化完成量对象的suspend线程链表 + + + +### 等待完成 + +等待完成接口,用于等待某一个动作完成,根据timeout不同参数,做超时退出,或者永久等待的处理 + +#### 接口定义 + +```C +rt_err_t rt_completion_wait(struct rt_completion *completion, + rt_int32_t timeout) +``` + + + +#### 接口参数说明 +下表描述了该函数的输入参数与返回值: + +| 参数 | 描述 | +| ---------- | ------------------------------------------------------------ | +| completion | 完成量对象指针 | +| timeout | 指示等待超时退出时间
说明:
1. 该timeout的单位是tick
2. 当timeout为0时,直接返回 `RT_ETIMEOUT`
3.当timeout为`RT_WAITING_FOREVER`时,该接口会一直阻塞,知道等待到完成量对象完成了工作 | +| **返回** | —— | +| rt_err_t | 执行正确时,返回`RT_EOK` ,执行错误时,返回错误码 | + +#### 接口实现 + +![image-20210815163621342](figures/rt_complete_wait_flow_chart.png) + + + +在等待完成接口中会做如下一些事: + +1. 调用`rt_thread_self`获取当前线程对象,为后续挂起当前线程做准备 +2. 调用`rt_hw_interrupt_disable`和`rt_hw_interrupt_enable`完成接下来的原子操作 +3. 如果调用该接口前,已经调用`rt_completion_done`指示完成了某个工作,那么直接设置flag为`RT_UNCOMPLETED`,为下一次等待做准备,函数退出 +4. 如果调用该接口时,还未完成某个工作,判断当前完成量对象的等待线程链(`suspended_list`)是否已经有线程在等待该完成量了,如果已经有,则程序直接异常挂起,如果没有正在等待的线程,那么流程继续 +5. 执行挂起当前线程的动作(因为挂起的时当前线程,因此需要后续执行`rt_schedule`才会真正执行挂起) +6. 将当前线程挂在了完成量对象的`suspended_list`链表中 +7. 执行`RT_DEBUG_NOT_IN_INTERRUPT`,确保当前函数不是在中断函数中执行 +8. 启动定时器,设置超时唤醒当前线程的逻辑 +9. 执行`rt_schedule();` ,真正挂起当前线程 + + + + + +### 指示完成 + +指示完成接口,用于指示某一个动作已经完成,指示完成后,其他的线程可以获取到该完成状态,并继续运行 + +#### 接口定义 + +```c +void rt_completion_done(struct rt_completion *completion) +``` + + + +#### 接口参数说明 + +- completion 完成量对象指针 + + + +#### 接口实现 + +![image-20210815181250503](figures/rt_completion_done_flow_chart.png) + +在指示完成接口中,会做如下一些事: + +1. 如果当前flag已经是完成状态,接口直接返回 +2. 当当前flag为未完成状态,设置接下来的原子操作保护 +3. 获取当前完成量挂起线程链表,并唤醒该线程 + + + +## 完成量的使用 + +![image-20210815195235507](figures/usage.png) + + + + + +- 在等待线程中,或者其他线程中调用`rt_completion_init`初始化完成量对象 + +- 在等待线程中,处理完一定逻辑后,需要等待某个工作完成时,调用`rt_completion_wait`接口,等待信号量完成后,程序阻塞等待 + +- 子指示完成的线程中,执行`rt_completion_done`接口,通知等待线程,可以继续执行工作 + +- 可能需要往复循环 + + + +## 示例代码 + +```c +/* + * 程序清单:完成量例程 + * + * 程序会初始化2个线程及初始化一个完成量对象 + * 一个线程等待另一个线程发送完成量 +*/ +#include +#include + +#define THREAD_PRIORITY 9 +#define THREAD_TIMESLICE 5 + +/* 完成量控制块 */ +static struct rt_completion completion; + +ALIGN(RT_ALIGN_SIZE) +static char thread1_stack[1024]; +static struct rt_thread thread1; + +/* 线程1入口函数 */ +static void thread1_completion_wait(void *param) +{ + /* 等待完成 */ + rt_kprintf("thread1: completion is waitting\n"); + rt_completion_wait(&completion, RT_WAITING_FOREVER); + rt_kprintf("thread1: completion waitting done\n"); + rt_kprintf("thread1 leave.\n"); +} + +ALIGN(RT_ALIGN_SIZE) +static char thread2_stack[1024]; +static struct rt_thread thread2; + +/* 线程2入口 */ +static void thread2_completion_done(void *param) +{ + rt_kprintf("thread2: completion done\n"); + rt_completion_done(&completion); + rt_kprintf("thread2 leave.\n"); +} + +int completion_sample(void) +{ + /* 初始化完成量对象 */ + rt_completion_init(&completion); + + rt_thread_init(&thread1, + "thread1", + thread1_completion_wait, + RT_NULL, + &thread1_stack[0], + sizeof(thread1_stack), + THREAD_PRIORITY - 1, THREAD_TIMESLICE); + rt_thread_startup(&thread1); + + rt_thread_init(&thread2, + "thread2", + thread2_completion_done, + RT_NULL, + &thread2_stack[0], + sizeof(thread2_stack), + THREAD_PRIORITY, THREAD_TIMESLICE); + rt_thread_startup(&thread2); + + return 0; +} + +/* 导出到 msh 命令列表中 */ +MSH_CMD_EXPORT(completion_sample, completion sample); +``` + + + +仿真运行结果如下: + +``` +completion_sample +msh />completion_sample +thread1: completion is waitting +thread2: completion done +thread1: completion waitting done +thread1 leave. +thread2 leave. +``` + diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/rt_complete_wait_flow_chart.png b/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/rt_complete_wait_flow_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0f0ca04fdfdb2ab9e99dbe6d733566c952a2da GIT binary patch literal 40848 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%0D(5o#no5m$}4*RV^W z>x2M17T!ml^$u{bBb7{Y+PhLH*S|-g*yc&e(Y>y!>@TRLTFG9T{9I^zOi7X0UARcLcRh*Z*W-nQzjd8_G~l!TkZH;=$1e<>4t@lfZJuGFj8NhxYFu? zt?FQa#?rEw%=@QyD)XqrN=n&L2_~ z^*7$E>@2s6i;ab<*AplZwzGcidl;i}Lcs`EwATNLN3FmI2RyEToBn zDgm;Bf5v#8(Y_|9w)a|xh?-iEmO-&rJ#pqRMN)M%crac}G(B!|=py%1-3zBatbcw1 zfvV|)&s^pIa?nzO0nnBYw19~Kqk(A-gQZMx{j(!pURyws;4S(>f2p%A@q~Yn$Vqz? zoI7pP;I+7Ao^SH~#clv)h4uiOKu?@Y#l?W$ZwFK{lAJ*34uMD{y8>973el5%wTH=|9^*j-4EbGd!J+#&zI@4PfUWIGBEFc~7} z2XH-b=Y1#iWe@=39pTdkXOGLpc|)wXy&Y;c>C<4r2O)@#1E&`GSbN%cVo!Kx8Za=jk2sm zgqsyx?fL&yot;8;dnU*D0Q(4fUA8=gXc-4g%*|+~10D4FW8C`U;Hmli&|lMSf3j!W zo@cicmQ7Mx+A!d2kHt}m1ALtO5gv2-6H30!{(lf^WU3XuJKbYJLVOyAjEc1Q^&yh9 zMqoEZ9qSe&Jij!rgs3Z?U8T;@)i*M==<=f7qba`q+{|Hm5k{|m+buVcx-cHdYy|2rrD f-~I!}cP6j1qZ?b)vt{r^dWz0YL#+Z$+tB|3$^Hd9 literal 0 HcmV?d00001 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/usage.png b/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/figures/usage.png new file mode 100644 index 0000000000000000000000000000000000000000..a4dd415d729eb02f5fe57ef110a0c2006d4c6553 GIT binary patch literal 27573 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 Date: Mon, 16 Aug 2021 12:42:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E3=80=91=E4=BF=AE=E6=94=B9completion.md=20=E9=94=99?= =?UTF-8?q?=E5=88=AB=E5=AD=97=20=EF=BC=88=E7=9F=A5=E9=81=93->=E7=9B=B4?= =?UTF-8?q?=E5=88=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programming-manual/device-ipc/completion/completion.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md b/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md index 13995e6..4436c9d 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device-ipc/completion/completion.md @@ -91,7 +91,7 @@ rt_err_t rt_completion_wait(struct rt_completion *completion, | 参数 | 描述 | | ---------- | ------------------------------------------------------------ | | completion | 完成量对象指针 | -| timeout | 指示等待超时退出时间
说明:
1. 该timeout的单位是tick
2. 当timeout为0时,直接返回 `RT_ETIMEOUT`
3.当timeout为`RT_WAITING_FOREVER`时,该接口会一直阻塞,知道等待到完成量对象完成了工作 | +| timeout | 指示等待超时退出时间
说明:
1. 该timeout的单位是tick
2. 当timeout为0时,直接返回 `RT_ETIMEOUT`
3.当timeout为`RT_WAITING_FOREVER`时,该接口会一直阻塞,直到等待到完成量对象完成了工作 | | **返回** | —— | | rt_err_t | 执行正确时,返回`RT_EOK` ,执行错误时,返回错误码 | -- Gitee