版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目组员:项目组员: 董亚军董亚军 郝贤森郝贤森 赵星达赵星达 姜兆勇姜兆勇 张超张超 刘继琛刘继琛 张立东张立东 汇报人:汇报人: 董亚军董亚军 项目分工:项目分工: n主线程:董亚军郝贤森 n系统移植:赵星达 nM0:张立东 姜兆勇 nWeb、CGI:刘继琛 张超 物联网介绍物联网介绍 n物联网是新一代信息技术的重要组成部分。其英文名称是“The Internet of things”。由此,顾名思义,“物联网就是物物相连 的互联网”。这有两层意思:第一,物联网的核心和基础仍然 是互联网,是在互联网基础上的延伸和扩展的网络;第二,其 用户端延伸和扩展到了任何物品与物品之间,进行信息交换和
2、通信。物联网就是“物物相连的互联网”。物联网通过智能感 知、识别技术与普适计算、泛在网络的融合应用,被称为继计 算机、互联网之后世界信息产业发展的第三次浪潮。物联网是 互联网的应用拓展,与其说物联网是网络,不如说物联网是业 务和应用。因此,应用创新是物联网发展的核心,以用户体验 为核心的创新2.0是物联网发展的灵魂。 物联网定义物联网定义 n最初在1999年提出:即通过射频识别(RFID)、红外感应器、 全球定位系统、激光扫描器、气体感应器等信息传感设备,按 约定的协议,把任何物品与互联网连接起来,进行信息交换和 通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网 络。简而言之,物联网就是
3、“物物相连的互联网”。 物联网定义物联网定义 n 中国物联网校企联盟将物联网的定义为当下几乎所有技术与计 算机、互联网技术的结合,实现物体与物体之间:环境以及状 态信息实时的实时共享以及智能化的收集、传递、处理、执行。 广义上说,当下涉及到信息技术的应用,都可以纳入物联网的 范畴。 项目总流程项目总流程 项目简介项目简介 n 通过web端远程访问服务器,达到对数据的采集,查看实时 的仓库信息。发生异常时进行报警、做出相应的处理。 n 通过web端远程控制,当货物的进出仓库时进行记录。 n n 这个方案主要用到了下面的技术: 物联网仓储系统设计的技术物联网仓储系统设计的技术 Linux设备驱动
4、Zigbee无线技术与RFID技术 传感器技术(温度、光线、湿度、重力感应等) Cortex-M0 ARM 微控制器技术 I2C、SPI、中断、单总线、A/D、PWM、UART等多种接口技术 监控及视频流处理技术 GPRS远程报警技术(未完成) 嵌入式Web服务器技术 处理客户请求(CGI)技术 数据库技术(sqlite3) wifi技术(sqlite3)(未完成) html页面显示技术 全局结构体定义全局结构体定义 n/仓库货物信息 nstruct storage_goods_info n nunsigned char goods_type;/货物类型,用数字表示 nunsigned int
5、 goods_count;/货物数量 n; 全局结构体定义全局结构体定义 n/某个仓库的全部信息 nstruct storage_info n nunsigned char storage_status; nunsigned char led_status; nunsigned char buzzer_status; nunsigned char fan_status; nunsigned char seg_status; nsigned char x; nsigned char y; nsigned char z; nfloat temperature; nfloat temperature
6、MIN; 全局结构体定义全局结构体定义 nfloat temperatureMAX; nfloat humidity; nfloat humidityMIN; nfloat humidityMAX; nfloat illumination; nfloat illuminationMIN; nfloat illuminationMAX; nfloat battery; nfloat adc; nstruct storage_goods_info goods_infoGOODS_NUM; n; 全局结构体定义全局结构体定义 n/所有仓库的信息结构体 nstruct env_info_clien_a
7、ddr n nstruct storage_info storage_noSTORAGE_NUM; n; n/消息队列结构体 nstruct msg n nlong type;/从消息队列接收消息时用于判断的消息类型 nlong msgtype;/具体的消息类型 nunsigned char textQUEUE_MSG_LEN;/消息正文 n; 用到的线程用到的线程 n其中用到的线程如下: npthread_client_request():处理消息队列里请求的线程. npthread_refresh():更新共享内存里的实时数据. npthread_sqlite():数据库线程. npthr
8、ead_transfer():接收M0数据线程. npthread_analysis():M0数据分析线程. npthread_sms():短信模块控制线程.(未使用) npthread_buzzer():A9蜂鸣器控制线程. npthread_led():A9LED模块线程. npthread_camera():摄像头模块控制线程. 线程和进程的区别:线程和进程的区别: n线程:是一种轻量级进程,线程存在于进程中。 n 线程和进程一样都会被操作系统调度(时间片) n 通常线程指的是共享相同地址空间的多个任务。 n线程优势:线程运行时,相互切换效率高;线程之间共享数据很方便。 n进程拥有独立的
9、运行空间,一个进程崩溃后,在保护模式下并不会影响其他的进程。一 个进程中可以包含有多个线程,而一个线程只能包含在进程中。一个线程拥有自己独有 的局部变量栈,但是没有独立的空间,一个进程中多个线程共同共享一块资源,因此当 一个线程崩溃后此进程也会崩溃。因此多进程要比多线程健壮性要好,但是,多进程效 率比较低。当需要并行操作和共享某些变量最好使用多线程的模式。 线程线程 n创建:创建一个线程 nint pthread_create(pthread_t *thread, const pthread_attr_t n *attr, void * (* routine)(void *), void *a
10、rg) n参数:thread, 线程的标识符(类似于进程的pid号) n attr, 用于指定创建的线程的属性, 通常为NULL(不需要设置) n routine, 函数指针,该函数就是线程主体 n arg, 就是传递给函数的参数。 n返回值:成功返回0, 失败返回非负的错误号 线程线程 n int pthread_exit(void *value_ptr) n 功能:只会导致当前线程的退出函数 n 参数:就是传递的退出状态(指针) n 通常使用: pthread_exit(0); n返回值:成功返回0, 失败返回非负的错误号 n进程对已经退出的线程必须要做回收线程资源的操作(否则会产生僵尸线
11、程) nint pthread_join(pthread_t thread, void *value_ptr) n功能:阻塞等待回收退出的线程的资源 n参数: thread, 就是指定要回收的线程资源 n value_ptr, 就是接收到线程的退出状态。 n返回值:成功返回0, 失败返回非负的错误号 线程的控制线程的控制 n控制线程: n互斥锁 :主要用来保护临界资源(可是变量,后者是代码段) n 任何时刻最多只能有一个线程能访问该资源 n相关函数接口: nint pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *a
12、ttr) n功能:锁的初始化函数,即生成一把锁 n参数: mutex, 是锁的标识符 n attr, 设置锁的属性, 通常为NULL。 n返回值: 返回值:成功返回0, 失败返回非负的错误号 线程控制线程控制 nint pthread_mutex_lock(pthread_mutex_t *mutex) p功能:阻塞等待直到这把锁申请成功为止,对临界资源进行上锁操作 p参数: mutex, 就是指定的一把锁 p返回值:成功返回0, 失败返回非负的错误号 nint pthread_mutex_unlock(pthread_mutex_t *mutex) p功能:对临界资源进行解锁操作 p参数:
13、mutex, 就是指定要解开的锁 p返回值:成功返回0, 失败返回非负的错误号 nint pthread_mutex_destroy(pthread_mutex_t *mutex); p功能:销毁一把指定的锁 p参数: mutex, 就是指定要销毁的锁 p返回值:成功返回0, 失败返回非负的错误号 注意: 为了避免死锁:在申请多把锁时,所有的线程都按照同样的顺序去申请。 线程之间的通信线程之间的通信-条件变量条件变量 int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict at
14、tr); n 功能:初始化一个条件变量 n 参数:cond, 就是条件变量的标识符 n attr, 通常为NULL即可 n 返回值:成功返回0, 失败返回非负的错误号 nint pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex); n功能:条件睡眠,直到被指定的条件唤醒为止 n参数: cond, 就是指定睡眠 条件,将来被唤醒时也必须满足该条件 n mutex, 该函数睡眠时必须提前加上一把锁 n 注意:该睡眠函数调用之前必须先加上一把锁,然后进入睡眠,然后该函数内部 n 将锁解开;
15、当该函数被唤醒时,需要重新加上这把锁,如果发现这把锁被其他线程 n 占用,那么该函数的唤醒操作就失败了,继续睡眠。 n返回值:成功返回0, 失败返回非负的错误号 线程之间的通信线程之间的通信-条件变量条件变量 nint pthread_cond_signal(pthread_cond_t *cond); n功能:就是唤醒睡眠在cond条件上的线程,但是只能唤醒一个线程 n参数: cond, 就是指定要唤醒的条件 n返回值:成功返回0, 失败返回非负的错误号 nint pthread_cond_broadcast(pthread_cond_t *cond); n功能:唤醒所有睡眠这个条件上的线程
16、 nint pthread_cond_destroy(pthread_cond_t *cond); n功能:就是销毁条件变量 处理消息队列请求线程处理消息队列请求线程 消息对列消息对列 n创建/打开消息队列对象 nint msgget(key_t key, int flag); n参数:key, ftok()函数的返回值,用于确保多个进程操 作同一个消息队列 n flag, IPC_CREAT IPC_EXCL 和共享内存一样 n返回值:成功返回消息队列的标识符, 失败-1 n比如:msgget(key, IPC_CREAT|IPC_EXCL|0666); 消息对列消息对列 nint msgs
17、nd(int msqid, const void *msgp, size_t msgsz, int msgflg); n参数:msgid, msgget的返回值 n msgp, 要发送的数据的指针,有指定的数据格式。 n struct msgbuf n long mtype; /* message type, must be 0 */ n 数据类型,可以自定义; /* message data */ n int a; char b; float f; n ; n msgsz, 发送的消息的正文的长度 = sizeof(struct msgbuf) - sizeof(long) n msgflg
18、,IPC_NOWAIT 以非阻塞方式发送消息,如果发送不成功,那么不会阻塞,立刻 返回。 n 0(常用), 以阻塞方式发送消息,如果发送不成功,那么阻塞等待,直到发送成 功为止。 n返回值:成功0, 失败-1 消息队列消息队列 nssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); n参数:msqid, msgget的返回值 n msgp, 用于接收读取到的消息,固定格式,必须和发送的类型保持一致。 n msgsz, 仍然要接收的消息的正文长度 n msgtyp, n 0, 表示读取第一条消息
19、 n 0, 表示读取指定类型消息(最常用) n 0, 接收消息队列中类型值不小于msgtyp的绝对值且类型值又最小的消息 n msgflg, n IPC_NOWAIT 以非阻塞方式接收消息,如果接收不成功,那么不会阻塞,立刻返 回。 n 0(常用), 以阻塞方式接收消息,如果接收不成功,那么阻塞等待,直到接收成 功为止。 n返回值:实际接收到的消息的正文的字节个数 , 失败-1. 消息对列消息对列 n消息队列的控制函数 nint msgctl ( int msgqid, int cmd, struct msqid_ds *buf ); n参数: n msgqid, 就是控制的消息队列 n cm
20、d : n IPC_STAT (获取对象属性), 属性保存在第三个参数上 n IPC_SET (设置对象属性),第三个参数保存的是要修改的属性 n IPC_RMID (删除对象), 此时第三个参数为NULL即可 n返回值:返回值和cmd有关系, 失败-1. 共享内存共享内存 共享内存共享内存 n共享内存:是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何 数据的拷贝 n注意:由于多个进程共享一段内存,因此也需要依靠某种同步机制来控制对它的写操作, 如互斥锁和信号量等 n#include nkey_t ftok(const char *pathname, int proj_id)
21、; n功能:就是生成key值。 n参数:pathname, 任意一个存在的路径都可以 n proj_id, 只要低8位(二进制)不全为0的数都可以 n返回值:成功key值, 失败-1. n比如:key = ftok(., a); 共享内存共享内存 n创建/打开共享内存:创建于当前系统上,保存到系统关闭为止。 nint shmget(key_t key, int size, int shmflg); n参数:key, 用于唯一的标识一块共享内存,将来其他进程需要使用一样的key值。 n IPC_PRIVATE,表示该物理空间只能自己用,无法和其他进程共享。 n ftok()函数的返回值 n si
22、ze, 要申请的共享内存物理空间, /usr/inclue/linux/shm.h中包含限制 n shmflg, IPC_CREAT IPC_EXCL nIPC_CREAT 如果共享内存不存在,则创建一个共享内存,否则打开操作。 n IPC_EXCL 只有在共享内存不存在的时候,新的共享内存才建立,否则就产生错误。 n返回值:就是共享内存的标识符(大于0),失败-1. n比如:key = ftok(., a); nint shmid; nshmid = shmget(key, 512, IPC_CREAT|IPC_EXCL|0666); 共享内存共享内存 n映射共享内存,即把指定的共享内存映射
23、到进程的地址空间用于访问 nvoid *shmat(int shmid, const void *shmaddr, int shmflg); n参数:shmid, 就是shmget的返回值 n shmaddr, 用于指定共享内存映射到当前进程的那个起始地址上 n 如果为NULL, 那么系统帮助进程分配(最常用) n 如果非NULL, 那么就是自己指定(必须保证这块空间没有被使用) n shmflg, 指定进程对该内存区域的读写权限 n 如果为SHM_RDONLY ,那么当前进程只读 n 如果为0, 那么当前进程可读可写(最常用) n返回值:返回当前进程和共享内存映射后的起始地址 n 失败返回的
24、为(void*)(-1) 共享内存共享内存 n撤销共享内存映射 nint shmdt(const void *shmaddr); p参数:shmaddr, 就是shmat的返回值 p返回值:成功0, 失败-1 p操作共享内存对象 nint shmctl(int shmid, int cmd, struct shmid_ds *buf); / 获取共享内存的状态,并把相关的 属性赋值给buf p功能:控制共享内存对象 p参数: shmid, shmget的返回值 n cmd : IPC_STAT (获取对象属性), 属性保存在第三个参数上 n IPC_SET (设置对象属性),第三个参数保存的是
25、要修改的属性 n IPC_RMID (删除对象), 此时第三个参数为NULL即可 p返回值:返回值和cmd有关系, 失败-1. n比如:shmctl(shmid, IPC_RMID, NULL); 访问共享内存访问共享内存 n创建/打开信号量集合 nint semget(key_t key, int nsems, int semflg); n参数: n key, ftok()返回值 n nsems, 指定的信号量集合中的信号量个数 n semflg, n IPC_CREAT n IPC_EXCL nIPC_CREAT 如果共享内存不存在,则创建一个共享内存,否则打开操作。 n IPC_EXCL
26、 只有在共享内存不存在的时候,新的共享内存才建立,否则就产生错误。 n返回值:返回该集合的标识符,失败-1. nint semctl(int semid, int semnum, int cmd, .); p功能:信号量集合的控制 p参数:semid, 指定要操作的集合 n semnum, 要操作的信号量的编号,编号从0开始 n cmd,GETVAL:获取信号灯的值, 返回值是获得值。 n 比如:value = semctl(semid, 0, GETVAL); n SETVAL:设置信号灯的值,需要用到第四个参数。因此在设置信号灯的值时应该 及时的设置共用体semun的值 n 第四个参数类型
27、如下: n union semun n int val; /* Value for SETVAL */ n struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ n unsigned short *array; /* Array for GETALL, SETALL */ n struct seminfo *_buf; /* Buffer for IPC_INFO n (Linux-specific) */ n ; nint semop ( int semid, struct sembuf *opsptr, unsigned nops
28、); n功能:就是对信号量集合中的信号量进行PV操作 n参数: semid, 指定要操作的集合 n opsptr, n struct sembuf n unsigned short sem_num; /* semaphore number */ n short sem_op; /* semaphore operation */ n short sem_flg; /* operation flags */ n ; n 成员分析: n sem_num 表示要操作的信号量的编号 n sem_op, 表示进行P或者V操作, 比如:sem_op = 10(+10) n sem_op = -10(-10)
29、 n sem_op = 0, 那么semop函数会等到该信号量的值变为0为止。 n sem_flg, 0(最常用的),表示semop函数的操作是阻塞的,直到成功为止。 n IPC_NOWAIT,表示semop函数的操作是非阻塞的,如果操作没有成功,立刻返回。 n SEM_UNDO(不常用),设置只对当前进程有效,不会保存到系统的信号量集合中。 n nops, 调用一次semop要操作的信号量的个数 n返回值:成功0, 失败-1 linux 管道、消息队列、共享内存的对比管道、消息队列、共享内存的对比 n管道的优点是不需要加锁,缺点是默认缓冲区太小,只 有4K,同时只适合父子进程间通信,而且一个
30、管道只适 合单向通信,如果要双向通信需要建立两个。而且不适 合多个子进程,因为消息会乱,它的发送接收机制是用 read/write这种适用流的,缺点是数据本身没有边界,需 要应用程序自己解释,而一般消息大多是一个固定长的 消息头,和一个变长的消息体,一个子进程从管道read 到消息头后,消息体可能被别的子进程接收到 linux 管道、消息队列、共享内存的对比管道、消息队列、共享内存的对比 n消息队列也不要加锁,默认缓冲区和单消息上限都要大 一些,在我的suse10上是64K,它并不局限于父子进程 间通信,只要一个相同的key,就可以让不同的进程定 位到同一个消息队列上,它也可以用来给双向通信,不 过稍微加个标识,可以通过消息中的type进行区分,比 如一个任务分派进程,创建了若干个执行子进程,不管 是父进程发送分派任务的消息,还是子进程发送任务执 行的消息,都将type设置为目标进程的pid,因为msgrcv 可以指定只接收消息类型为type的消息,这样就实现了 子进程只接收自己的任务,父进程只接收任务结果 linux 管道、消息队列、共享内存的对比管道、消息队列、共享内存的对比 n共
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广灵辅警招聘真题及答案
- 国家知识产权局专利局专利审查协作湖北中心2026年度专利审查员公开招聘40人备考题库含答案详解
- 厦门大学附属第一医院漳州招商局开发区分院2025年第四批公开招聘编外工作人员备考题库附答案详解
- 咸安区2026年面向教育部直属师范大学公费师范毕业生专项招聘备考题库完整参考答案详解
- 2025年西安市雁塔区第一小学教师招聘考试备考题库及答案解析
- 2025年12月云南玉溪市易门县华亿投资有限责任公司(第二次)招聘8人备考核心题库及答案解析
- 2025年卫生健康局招聘备考题库及1套参考答案详解
- 2025年第十师北屯市公安局面向社会公开招聘警务辅助人员备考题库及1套完整答案详解
- 构建区域教育评价改革模型:人工智能评价结果应用与效果评估教学研究课题报告
- 国家知识产权局专利局专利审查协作四川中心2026年度专利审查员公开招聘备考题库有答案详解
- 火灾自动报警系统故障应急预案
- 人货电梯施工方案
- 南大版一年级心理健康第7课《情绪小世界》课件
- 光大金瓯资产管理有限公司笔试
- 算力产业园项目计划书
- 塔式起重机安全管理培训课件
- 老年髋部骨折快速康复治疗
- 【初中地理】跨学科主题学习探 索外来食料作物的传播史课件-2024-2025学年七年级上学期(人教版2024)
- 四川省南充市2024-2025学年高一地理上学期期末考试试题含解析
- 化学品管理控制程序
- 探索·鄱阳湖智慧树知到期末考试答案2024年
评论
0/150
提交评论