文章目录

  • 1 用邮箱实现多事件的单向同步

1 用邮箱实现多事件的单向同步

问题需求如下:

  • 某一任务等待多个事件中的任意事件发生。

解决方案:

  • 事件发生时,向邮箱中投递事件消息,任务在邮箱上等待消息然后处理。


代码如下:

/*** @brief tOS应用示例* @details* @author 01课堂 李述铜 http://01ketang.cc* @date 2017-06-01* @version 1.0* @copyright 版权所有,禁止用于商业用途*/
#include "tinyOS.h"
#include "app.h"
#include "hal.h"static tTask task1;                     // 任务1结构
static tTask task2;                     // 任务2结构
static tTask task3;                     // 任务3结构
static tTask task4;                     // 任务4结构static tTaskStack task1Env[TASK1_ENV_SIZE];     // 任务1的堆栈空间
static tTaskStack task2Env[TASK2_ENV_SIZE];     // 任务2的堆栈空间
static tTaskStack task3Env[TASK3_ENV_SIZE];     // 任务3的堆栈空间
static tTaskStack task4Env[TASK4_ENV_SIZE];     // 任务4的堆栈空间int task1Flag;           // 用于指示任务运行状态的标志变量
int task2Flag;           // 用于指示任务运行状态的标志变量
int task3Flag;           // 用于指示任务运行状态的标志变量
int task4Flag;           // 用于指示任务运行状态的标志变量tMbox syncMbox;
void * mboxBuffer[20];/*** 任务的运行代码* @param param 任务初始运行参数*/
void task1Entry (void *param) {for (;;) {task1Flag = 1;tTaskDelay(1);task1Flag = 0;tTaskDelay(1);tMboxNotify(&syncMbox, (void *)1, tMBOXSendNormal);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task2Entry (void *param) {for (;;) {task2Flag = 1;tTaskDelay(1);task2Flag = 0;tTaskDelay(1);tMboxNotify(&syncMbox, (void *)2, tMBOXSendNormal);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task3Entry (void *param) {for (;;) {task3Flag = 1;tTaskDelay(1);task3Flag = 0;tTaskDelay(1);tMboxNotify(&syncMbox, (void *)3, tMBOXSendNormal);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task4Entry (void *param) {for (;;) {void * msg = 0;tMboxWait(&syncMbox, &msg, 0);if (msg != 0) {xprintf("Hello task %d\n", (uint32_t)msg);}}
}/*** App的初始化*/
void tInitApp (void) {halInit();tMboxInit(&syncMbox, mboxBuffer, 20);tTaskInit(&task1, task1Entry, (void *) 0x0, TASK1_PRIO, task1Env, sizeof(task1Env));tTaskInit(&task2, task2Entry, (void *) 0x0, TASK2_PRIO, task2Env, sizeof(task2Env));tTaskInit(&task3, task3Entry, (void *) 0x0, TASK3_PRIO, task3Env, sizeof(task3Env));tTaskInit(&task4, task4Entry, (void *) 0x0, TASK4_PRIO, task4Env, sizeof(task4Env));
}

典型案例


参考资料:

  1. 手把手教你学用嵌入式操作系统

用邮箱实现多事件的单向同步相关推荐

  1. 用事件标志组实现多事件的单向同步

    文章目录 1 用事件标志组实现多事件的单向同步 1 用事件标志组实现多事件的单向同步 问题需求: 某一任务等待事件中一个或多个事件同时发生. 解决方案: 事件发生时,设置指定事件标志位,任务4等待所有 ...

  2. qq邮箱日历同步服务器,科技教程:qq邮箱客户端怎么使用exchange服务同步日历?...

    如今越来越多的小伙伴对于qq邮箱客户端怎么使用exchange服务同步日历?这方面的问题开始感兴趣,看似平静的每一天,在每个人身上都在发生着各种各样的故事,因为大家现在都是想要了解到此类的信息,那么既 ...

  3. Otter-入门篇4(单向同步实践)

    2019独角兽企业重金招聘Python工程师标准>>> Otter-入门篇4(单向同步实践)# 前言## 在前几节我们已经做好了关于otter的准备工作,配置好了zookeeper, ...

  4. 用信号量实现任务间单向同步

    文章目录 1 用信号量实现任务间单向同步 1.1 问题需求 1.2 解决方案 1.3 其它方案 1.4 典型案例 1 用信号量实现任务间单向同步 1.1 问题需求 某一任务必须等待另一任务允许后才能继 ...

  5. oracle 11gogg,【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 单向同步配置 上

    Oracle GoldenGate 11g (二) GoldenGate 11g 单向同步配置 上 Item Source System Target System Platform RHEL6.4 ...

  6. centos mysql单向同步,虚拟机下实现Centos5.6下Mysql双向同步配置

    环境 注意虚拟机环境下的NAT模式,务必把IP设置成固定的 Master操作系统:Centos 5.6 Ip:192.168.214.138 Slave操作系统:Centos 5.6 Ip:192.1 ...

  7. goldengate for mysql_GoldenGate for mysql to mysql:单向同步

    GoldenGate for mysql to mysql:单向同步 GoldenGate用于在各种企业系统间以亚秒级速度复制和集成事务数据,是同类最佳的.易于部署的产品.GoldenGate 可以灵 ...

  8. 邮箱android版,网易邮箱Android版手机通讯录将同步

    不仅仅是将邮箱PC应用简单移植到移动终端上,而是根据移动端特性进行再创新.网易邮箱客户端产品经理楼君芳近日在接受媒体专访时称,网易邮箱Android客户端进行多种创新,可以满足用户个性化需求,并在安全 ...

  9. DMHS DM7 单向同步

    1.1 情况介绍 DMHS版本:dmhs_V4.2.11_dm7_rev104232_rh6_64_veri_20211213 前提:SCOTT模式和PERSON模式都属于SCOTT用户 SCOTT和 ...

最新文章

  1. 解决Can't connect to MySQL server on 'localhost' (10048)
  2. [置顶] 程序员编程生产力相差10倍意味着什么?
  3. Response.Redirect 编码的问题
  4. 解决:Caused by: redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key
  5. Python基础教程(020)--集成开发环境IDE简介--Pycharm
  6. 理解OpenCL数据类型
  7. XHTML的特征(规范)
  8. word排版教程(标题设置,自动生成目录)
  9. matlab直方图均衡化函数
  10. 掌控你的信息流:在自己的VPS上部署RSSHub
  11. WIN7系统旗舰版安装
  12. DirectX12(D3D12)基础教程(八)——多显卡渲染基础、共享纹理、多GPU同步
  13. 亚麻种子的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 【有效】vscode中markdown导出pdf报错解决: ERROR: Navigation Timeout Exceeded: 30000 ms exceeded
  15. 微信上网卡WeSim悄然发布
  16. 【ArcGIS教程】(1)带有经纬度的EXCEL数据如何转换为shp矢量数据?
  17. access里的多步oledb错误_(ADO) 的 ConnectionString 属性 - SQL Server | Microsoft Docs
  18. 基于TCAM的路由查找及表项管理
  19. K-Means集群算法
  20. STM32F103C6T6使用FLYMCU ISP下载程序注意事项

热门文章

  1. c语言课设报告河海大学,2020河海大学计算机学硕838经验贴
  2. 1.6 课程资源-深度学习-Stanford吴恩达教授
  3. 3.7 感知器-机器学习笔记-斯坦福吴恩达教授
  4. leetcode11盛最多水的容器
  5. 【转】贴片电阻的工作寿命
  6. PIC单片机 IIC通信及实现
  7. 基于 Module 的 Laravel API 架构
  8. pxe+kickstart部署多个版本的Linux操作系统(上)---原理篇
  9. 九个月搞定三轮融资,做 AI 导购的「智能一点」如何在巨头中突围?
  10. Django环境的搭建以及最简示例