UCOSIII等待多个内核对象
2024-10-21 13:03:48
内核对象
内核对象包括信号量、互斥信号量、消息队列和事件标志组
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
}
}
实验现象
最新文章
- 使用LinqToExcel读取Excel
- 数字图像处理中的4邻接,8邻接与m邻接
- jquey on
- Redis笔记,安装和常用命令
- Spring总结——AOP、JDBC和事务的总结
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
- iOS - MVC 架构模式
- css如何让表格table的边框为1像素呢
- [设计模式] 13 责任链模式 Chain of Responsibility
- C#的隐式和显示类型转换
- windows8设置环境变量
- ASP.NET - Repeater控件删除按钮,点击删除信息
- hdu2203 KMP水的问题
- WebService初入
- 【python进阶】详解元类及其应用2
- Ubuntu 15.10下的WebStorm-11.0.3完美破解
- 史上最强Spring mvc入门
- fastjson 的使用总结
- 设计模式 | 策略模式(strategy)
- java基础1之基本数据类型