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

移植的过程就不贴出来了网上都有具体的,根据单片机种类进行移植就可以了。记得要将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沟通的任务。

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

你可能感兴趣的:(stm32f103c8t6最小系统板使用ucosii系统采集温湿度、人体红外等信息)