内核对象

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

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
}
}

实验现象

最新文章

  1. 使用LinqToExcel读取Excel
  2. 数字图像处理中的4邻接,8邻接与m邻接
  3. jquey on
  4. Redis笔记,安装和常用命令
  5. Spring总结——AOP、JDBC和事务的总结
  6. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
  7. iOS - MVC 架构模式
  8. css如何让表格table的边框为1像素呢
  9. [设计模式] 13 责任链模式 Chain of Responsibility
  10. C#的隐式和显示类型转换
  11. windows8设置环境变量
  12. ASP.NET - Repeater控件删除按钮,点击删除信息
  13. hdu2203 KMP水的问题
  14. WebService初入
  15. 【python进阶】详解元类及其应用2
  16. Ubuntu 15.10下的WebStorm-11.0.3完美破解
  17. 史上最强Spring mvc入门
  18. fastjson 的使用总结
  19. 设计模式 | 策略模式(strategy)
  20. java基础1之基本数据类型

热门文章

  1. 微信小程序的跳转navigateTo()和redirectTo()用法和区别
  2. Charles 激活入口以及账号密码
  3. laravel 解决 Please provide a valid cache path 问题
  4. Clang的线程安全分析静态工具
  5. 下载youtube视频到本地
  6. eNSP上配置RIPv2的认证
  7. 在ensp上的进行的浮动路由
  8. (一)线性表(linear list)
  9. Nvidia Jetson TX2开发板学习历程(1)- 详细开箱、上电过程
  10. ARM中断深入分析几点