stm32f103c8t6最小系统板使用ucosii系统采集温湿度、人体红外等信息

本文详细介绍了uC/OS-II在单片机上的移植过程,强调了sys.h文件中SYSTEM_SUPPORT_OS定义的重要性。阐述了uC/OS-II中任务间同步机制,包括信号量、邮箱和消息队列的使用。并分享了如何创建多个任务来采集环境信息,如温度、湿度等,以及如何利用信号量集进行任务间通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移植的过程就不贴出来了网上都有具体的,根据单片机种类进行移植就可以了。记得要将sys.h文件里面的SYSTEM_SUPPORT_OS 这个define为1!!!

在ucos-II中,为了实现任务之间的同步,用到的同步机制有:信号量,邮箱和消息队列。

重要的两个函数:INT8U OSMboxPost (OS_EVENT *pevent,void *msg);

任务可以通过调用函数 OSMboxPost 向消息邮箱发送消息。

 void  OSSemPend (OS_EVENT *pevent, INT32U  timeout,INT8U *perr);

这个函数的主要作用就是查看邮箱指针 OSEventPtr 是否为 NULL,如果不是 NULL 就把邮箱中的消息指针返回给调用函数的任务,同时用 OS_NO_ERR 通过函数的参数 err 通知任务获取消息成功;如果邮箱指针OSEventPtr 是 NULL,则使任务进入等待状态,并引发一次任务调度。

void OSSemPend ( OS_EVENT *pevent, INT16U timeout, INT8U *err);
任务通过调用函数 OSSemPend 请求信号量。

INT8U OSSemPost(OS_EVENT *pevent);
任务获得信号量,并在访问共享资源结束以后,必须要释放信号量,释放信号量也叫做发送信号量,发送信号通过 OSSemPost 函数实现 。 OSSemPost 函数在对信号量的计数器操作之前,首先要检查是否还有等待该信号量的任务。如果没有,就把信号量计数器OSEventCnt 加一;如果有,则调用调度器 OS_Sched( )去运行等待任务中优先级别最高的任务。

因为我们需要采集温度、湿度、光线强度以及烟雾量和感知人体红外这五种信息,因此创建6个任务,分别为dht11温湿度采集任务、MQ-2烟雾采集任务、光敏光线感知任务、hc-sr501人体红外感知任务、一个main主任务以及一个发送数据与zigbee沟通的任务。

相互之间的通信则采用信号量集的方式来通信,处理好这些人任务关系,系统的雏形也就出来了,代码后期将会补上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值