内核对象

内核对象包括信号量、互斥信号量、消息队列和事件标志组

UCOSIII中允许任务同时等待多个信号量和多个消息队列

主结构体

typedef struct os_pend_data OS_PEND_DATA;
struct os_pend_data {
OS_PEND_DATA *PrevPtr;
OS_PEND_DATA *NextPtr;
OS_TCB *TCBPtr;
OS_PEND_OBJ *PendObjPtr;
OS_PEND_OBJ *RdyObjPtr;
void *RdyMsgPtr;
OS_MSG_SIZE RdyMsgSize;
CPU_TS RdyTS;
};

API函数

OS_OBJ_QTY OSPendMulti (OS_PEND_DATA *p_pend_data_tbl,
OS_OBJ_QTY tbl_size,
OS_TICK timeout,
OS_OPT opt,
OS_ERR *p_err);

应用举例

#define CORE_OBJ_NUM    3   //内核对象个数,一共3个:2个信号量和一个消息队列
OS_SEM Test_Sem1; //信号量1
OS_SEM Test_Sem2; //信号量2
OS_Q Test_Q; //消息队列 void task1(void *p_arg)
{
while(1)
{
OSSemPost(&Test_Sem1,OS_OPT_POST_1,&err);//发送信号量1
printf("task1 OSSemPost Test_Sem1 here\r\n"); OSSemPost(&Test_Sem2,OS_OPT_POST_1,&err);//发送信号量2
printf("task1 OSSemPost Test_Sem2 here\r\n"); msg_num++;
sprintf((char*)pbuf,"ALIENTEK %d",msg_num);
//发送消息
OSQPost((OS_Q* )&Test_Q,
(void* )pbuf,
(OS_MSG_SIZE)10,
(OS_OPT )OS_OPT_POST_FIFO,
(OS_ERR* )&err);
printf("task1 OSSemPost Test_Q here\r\n"); OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);
}
} void task2(void *p_arg)
{
OS_OBJ_QTY index;
OS_PEND_DATA pend_multi_tbl[CORE_OBJ_NUM]; pend_multi_tbl[0].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem1;
pend_multi_tbl[1].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem2;
pend_multi_tbl[2].PendObjPtr=(OS_PEND_OBJ*)&Test_Q; while(1)
{
index=OSPendMulti((OS_PEND_DATA* )pend_multi_tbl,
(OS_OBJ_QTY )CORE_OBJ_NUM, //内核数量
(OS_TICK )0,
(OS_OPT )OS_OPT_PEND_BLOCKING,
(OS_ERR* )&err);
printf("task2 OSPendMulti index %d\r\n", index); OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s
}
}

实验现象

UCOSIII等待多个内核对象的更多相关文章

  1. 18.1-uC/OS-III等待多个内核对象

    等待的多个内核对象是指多值信号量和消息队列的任意组合 . 如果想要使用“等待多个内核对象”,就必须事先使能“等待多个内核对象”.“等待多个内核对象” 的使能位于“os_cfg.h”. 1.OSPend ...

  2. μC/OS-III---I笔记9---任务等待多个内核对象和任务内建信号量与消息队列

    在一个任务等待多个内核对象在之前,信号量和消息队列的发布过程中都有等待多个内核对象判断的函数,所谓任务等待多个内核对象顾名思义就是一任务同时等待多个内核对象而被挂起,在USOC-III中一个任务等待多 ...

  3. 第9章 用内核对象进行线程同步(2)_可等待计时器(WaitableTimer)

    9.4 可等待的计时器内核对象——某个指定的时间或每隔一段时间触发一次 (1)创建可等待计时器:CreateWaitableTimer(使用时应把常量_WIN32_WINNT定义为0x0400) 参数 ...

  4. windows核心编程---第八章 使用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...

  5. 第9章 用内核对象进行线程同步(4)_死锁(DeadLock)及其他

    9.7 线程同步对象速查表 对象 何时处于未触发状态 何时处于触发状态 成功等待的副作用 进程 进程仍在运行的时候 进程终止的时(ExitProcess.TerminateProcess) 没有 线程 ...

  6. 第9章 用内核对象进行线程同步(1)_事件对象(Event)

    9.1 等待函数 (1)WaitForSingleObject(hObject,dwMilliseonds); ①dwMilliseconds为INFINITE时表示无限等待 ②dwMilliseco ...

  7. Windows核心编程学习九:利用内核对象进行线程同步

    注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...

  8. 18.0-uC/OS-III挂起内核对象

    任务等待多个对象.然而, uC/OS-III只允许同时等待多个信号量和消息队列.换句话说,不能同时等待多个事件标志组或mutex. 1.任务可以同时等待多个信号量和消息队列. 任务接收到一个信号量或消 ...

  9. Windows核心编程:第9章 用内核对象进行线程同步

    Github https://github.com/gongluck/Windows-Core-Program.git //第9章 用内核对象进行线程同步.cpp: 定义应用程序的入口点. // #i ...

随机推荐

  1. OpenTK学习笔记(1)-源码、官网地址

    OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...

  2. Python script to package the information of tracking benchmarks like LaSOT and GOT-10k into json files for Siamese network based trackers

    ############################################################################################ #### Fo ...

  3. A3C 算法资料收集

    A3C 算法资料收集 2019-07-26 21:37:55 Paper: https://arxiv.org/pdf/1602.01783.pdf Code: 1. 超级马里奥:https://gi ...

  4. git 项目最常用命令总结

    本文为博主原创,未经允许不得转载: 1.查看git基础配置信息 1.查看用户名和邮箱地址 git config user.name   git config user.email 2.修改用户名和邮箱 ...

  5. ISO/IEC 9899:2011 摘要

    本国际标准指定了C编程语言的形式并建立了对用它所表达的程序的解释.其目的在于促进在多种计算机系统上的C语言程序的可移植性.可靠性.可维护性以及高效的执行. 为了详细地说明C语言本身以及C语言执行库,包 ...

  6. k8s记录-ubuntu安装docker

    sudo apt-get purge docker-ce sudo rm -rf /var/lib/dockerdocker-ce:https://download.docker.com/linux/ ...

  7. [AWS] Cloud Server

    一元课程:AWS云计算——AWS操作指南系列课程 AWS 入门指南 1.1 Create one account 1.2 Create IAM Users Create 'group' firstly ...

  8. 基于EasyDarwin开源流媒体服务器框架实现EasyNVR H5无插件直播流媒体服务器方案

    背景分析 在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服 ...

  9. Docker 安装 redis 并实现配置文件启动,数据文件本地持久化

    1,笔者使用的是 Linux 的 Centos7 版本  2,安装 Docker,不会安装可以移步 Docker 在 Linux 平台的安装 以及一些常见命令 3,下载 docker 镜像 3.1,首 ...

  10. Exsi6.6主机网络不通解决办法

    Exsi虚拟机网络偶尔不通,防火墙性能不足 解决办法,断开网络连接再重连