




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
物联网仓储系统 项目组员 董亚军郝贤森赵星达姜兆勇张超刘继琛张立东汇报人 董亚军 项目分工 主线程 董亚军郝贤森系统移植 赵星达M0 张立东姜兆勇Web CGI 刘继琛张超 物联网介绍 物联网是新一代信息技术的重要组成部分 其英文名称是 TheInternetofthings 由此 顾名思义 物联网就是物物相连的互联网 这有两层意思 第一 物联网的核心和基础仍然是互联网 是在互联网基础上的延伸和扩展的网络 第二 其用户端延伸和扩展到了任何物品与物品之间 进行信息交换和通信 物联网就是 物物相连的互联网 物联网通过智能感知 识别技术与普适计算 泛在网络的融合应用 被称为继计算机 互联网之后世界信息产业发展的第三次浪潮 物联网是互联网的应用拓展 与其说物联网是网络 不如说物联网是业务和应用 因此 应用创新是物联网发展的核心 以用户体验为核心的创新2 0是物联网发展的灵魂 物联网定义 最初在1999年提出 即通过射频识别 RFID 红外感应器 全球定位系统 激光扫描器 气体感应器等信息传感设备 按约定的协议 把任何物品与互联网连接起来 进行信息交换和通讯 以实现智能化识别 定位 跟踪 监控和管理的一种网络 简而言之 物联网就是 物物相连的互联网 物联网定义 中国物联网校企联盟将物联网的定义为当下几乎所有技术与计算机 互联网技术的结合 实现物体与物体之间 环境以及状态信息实时的实时共享以及智能化的收集 传递 处理 执行 广义上说 当下涉及到信息技术的应用 都可以纳入物联网的范畴 项目总流程 项目简介 通过web端远程访问服务器 达到对数据的采集 查看实时的仓库信息 发生异常时进行报警 做出相应的处理 通过web端远程控制 当货物的进出仓库时进行记录 这个方案主要用到了下面的技术 物联网仓储系统设计的技术 Linux设备驱动 Zigbee无线技术与RFID技术 传感器技术 温度 光线 湿度 重力感应等 Cortex M0ARM微控制器技术 I2C SPI 中断 单总线 A D PWM UART等多种接口技术 监控及视频流处理技术 GPRS远程报警技术 未完成 嵌入式Web服务器技术 处理客户请求 CGI 技术 数据库技术 sqlite3 wifi技术 sqlite3 未完成 html页面显示技术 全局结构体定义 仓库货物信息structstorage goods info unsignedchargoods type 货物类型 用数字表示unsignedintgoods count 货物数量 全局结构体定义 某个仓库的全部信息structstorage info unsignedcharstorage status unsignedcharled status unsignedcharbuzzer status unsignedcharfan status unsignedcharseg status signedcharx signedchary signedcharz floattemperature floattemperatureMIN 全局结构体定义 floattemperatureMAX floathumidity floathumidityMIN floathumidityMAX floatillumination floatilluminationMIN floatilluminationMAX floatbattery floatadc structstorage goods infogoods info GOODS NUM 全局结构体定义 所有仓库的信息结构体structenv info clien addr structstorage infostorage no STORAGE NUM 消息队列结构体structmsg longtype 从消息队列接收消息时用于判断的消息类型longmsgtype 具体的消息类型unsignedchartext QUEUE MSG LEN 消息正文 用到的线程 其中用到的线程如下 pthread client request 处理消息队列里请求的线程 pthread refresh 更新共享内存里的实时数据 pthread sqlite 数据库线程 pthread transfer 接收M0数据线程 pthread analysis M0数据分析线程 pthread sms 短信模块控制线程 未使用 pthread buzzer A9蜂鸣器控制线程 pthread led A9LED模块线程 pthread camera 摄像头模块控制线程 线程和进程的区别 线程 是一种轻量级进程 线程存在于进程中 线程和进程一样都会被操作系统调度 时间片 通常线程指的是共享相同地址空间的多个任务 线程优势 线程运行时 相互切换效率高 线程之间共享数据很方便 进程拥有独立的运行空间 一个进程崩溃后 在保护模式下并不会影响其他的进程 一个进程中可以包含有多个线程 而一个线程只能包含在进程中 一个线程拥有自己独有的局部变量栈 但是没有独立的空间 一个进程中多个线程共同共享一块资源 因此当一个线程崩溃后此进程也会崩溃 因此多进程要比多线程健壮性要好 但是 多进程效率比较低 当需要并行操作和共享某些变量最好使用多线程的模式 线程 创建 创建一个线程intpthread create pthread t thread constpthread attr t attr void routine void void arg 参数 thread 线程的标识符 类似于进程的pid号 attr 用于指定创建的线程的属性 通常为NULL 不需要设置 routine 函数指针 该函数就是线程主体arg 就是传递给函数的参数 返回值 成功返回0 失败返回非负的错误号 线程 intpthread exit void value ptr 功能 只会导致当前线程的退出函数参数 就是传递的退出状态 指针 通常使用 pthread exit 0 返回值 成功返回0 失败返回非负的错误号进程对已经退出的线程必须要做回收线程资源的操作 否则会产生僵尸线程 intpthread join pthread tthread void value ptr 功能 阻塞等待回收退出的线程的资源参数 thread 就是指定要回收的线程资源value ptr 就是接收到线程的退出状态 返回值 成功返回0 失败返回非负的错误号 线程的控制 控制线程 互斥锁 主要用来保护临界资源 可是变量 后者是代码段 任何时刻最多只能有一个线程能访问该资源相关函数接口 intpthread mutex init pthread mutex t mutex pthread mutexattr t attr 功能 锁的初始化函数 即生成一把锁参数 mutex 是锁的标识符attr 设置锁的属性 通常为NULL 返回值 返回值 成功返回0 失败返回非负的错误号 线程控制 intpthread mutex lock pthread mutex t mutex 功能 阻塞等待直到这把锁申请成功为止 对临界资源进行上锁操作参数 mutex 就是指定的一把锁返回值 成功返回0 失败返回非负的错误号intpthread mutex unlock pthread mutex t mutex 功能 对临界资源进行解锁操作参数 mutex 就是指定要解开的锁返回值 成功返回0 失败返回非负的错误号intpthread mutex destroy pthread mutex t mutex 功能 销毁一把指定的锁参数 mutex 就是指定要销毁的锁返回值 成功返回0 失败返回非负的错误号注意 为了避免死锁 在申请多把锁时 所有的线程都按照同样的顺序去申请 线程之间的通信 条件变量 intpthread cond init pthread cond t restrictcond constpthread condattr t restrictattr 功能 初始化一个条件变量参数 cond 就是条件变量的标识符attr 通常为NULL即可返回值 成功返回0 失败返回非负的错误号intpthread cond wait pthread cond t restrictcond pthread mutex t restrictmutex 功能 条件睡眠 直到被指定的条件唤醒为止参数 cond 就是指定睡眠条件 将来被唤醒时也必须满足该条件mutex 该函数睡眠时必须提前加上一把锁注意 该睡眠函数调用之前必须先加上一把锁 然后进入睡眠 然后该函数内部将锁解开 当该函数被唤醒时 需要重新加上这把锁 如果发现这把锁被其他线程占用 那么该函数的唤醒操作就失败了 继续睡眠 返回值 成功返回0 失败返回非负的错误号 线程之间的通信 条件变量 intpthread cond signal pthread cond t cond 功能 就是唤醒睡眠在cond条件上的线程 但是只能唤醒一个线程参数 cond 就是指定要唤醒的条件返回值 成功返回0 失败返回非负的错误号intpthread cond broadcast pthread cond t cond 功能 唤醒所有睡眠这个条件上的线程intpthread cond destroy pthread cond t cond 功能 就是销毁条件变量 处理消息队列请求线程 消息对列 创建 打开消息队列对象intmsgget key tkey intflag 参数 key ftok 函数的返回值 用于确保多个进程操作同一个消息队列flag IPC CREATIPC EXCL和共享内存一样返回值 成功返回消息队列的标识符 失败 1比如 msgget key IPC CREAT IPC EXCL 0666 消息对列 intmsgsnd intmsqid constvoid msgp size tmsgsz intmsgflg 参数 msgid msgget的返回值msgp 要发送的数据的指针 有指定的数据格式 structmsgbuf longmtype messagetype mustbe 0 数据类型 可以自定义 messagedata inta charb floatf msgsz 发送的消息的正文的长度 sizeof structmsgbuf sizeof long msgflg IPC NOWAIT以非阻塞方式发送消息 如果发送不成功 那么不会阻塞 立刻返回 0 常用 以阻塞方式发送消息 如果发送不成功 那么阻塞等待 直到发送成功为止 返回值 成功0 失败 1 消息队列 ssize tmsgrcv intmsqid void msgp size tmsgsz longmsgtyp intmsgflg 参数 msqid msgget的返回值msgp 用于接收读取到的消息 固定格式 必须和发送的类型保持一致 msgsz 仍然要接收的消息的正文长度msgtyp 0 表示读取第一条消息 0 表示读取指定类型消息 最常用 0 接收消息队列中类型值不小于msgtyp的绝对值且类型值又最小的消息msgflg IPC NOWAIT以非阻塞方式接收消息 如果接收不成功 那么不会阻塞 立刻返回 0 常用 以阻塞方式接收消息 如果接收不成功 那么阻塞等待 直到接收成功为止 返回值 实际接收到的消息的正文的字节个数 失败 1 消息对列 消息队列的控制函数intmsgctl intmsgqid intcmd structmsqid ds buf 参数 msgqid 就是控制的消息队列cmd IPC STAT 获取对象属性 属性保存在第三个参数上IPC SET 设置对象属性 第三个参数保存的是要修改的属性IPC RMID 删除对象 此时第三个参数为NULL即可返回值 返回值和cmd有关系 失败 1 共享内存 共享内存 共享内存 是一种最为高效的进程间通信方式 进程可以直接读写内存 而不需要任何数据的拷贝注意 由于多个进程共享一段内存 因此也需要依靠某种同步机制来控制对它的写操作 如互斥锁和信号量等 includekey tftok constchar pathname intproj id 功能 就是生成key值 参数 pathname 任意一个存在的路径都可以proj id 只要低8位 二进制 不全为0的数都可以返回值 成功key值 失败 1 比如 key ftok a 共享内存 创建 打开共享内存 创建于当前系统上 保存到系统关闭为止 intshmget key tkey intsize intshmflg 参数 key 用于唯一的标识一块共享内存 将来其他进程需要使用一样的key值 IPC PRIVATE 表示该物理空间只能自己用 无法和其他进程共享 ftok 函数的返回值size 要申请的共享内存物理空间 usr inclue linux shm h中包含限制shmflg IPC CREATIPC EXCLIPC CREAT如果共享内存不存在 则创建一个共享内存 否则打开操作 IPC EXCL只有在共享内存不存在的时候 新的共享内存才建立 否则就产生错误 返回值 就是共享内存的标识符 大于0 失败 1 比如 key ftok a intshmid shmid shmget key 512 IPC CREAT IPC EXCL 0666 共享内存 映射共享内存 即把指定的共享内存映射到进程的地址空间用于访问void shmat intshmid constvoid shmaddr intshmflg 参数 shmid 就是shmget的返回值shmaddr 用于指定共享内存映射到当前进程的那个起始地址上如果为NULL 那么系统帮助进程分配 最常用 如果非NULL 那么就是自己指定 必须保证这块空间没有被使用 shmflg 指定进程对该内存区域的读写权限如果为SHM RDONLY 那么当前进程只读如果为0 那么当前进程可读可写 最常用 返回值 返回当前进程和共享内存映射后的起始地址失败返回的为 void 1 共享内存 撤销共享内存映射intshmdt constvoid shmaddr 参数 shmaddr 就是shmat的返回值返回值 成功0 失败 1操作共享内存对象intshmctl intshmid intcmd structshmid ds buf 获取共享内存的状态 并把相关的属性赋值给buf功能 控制共享内存对象参数 shmid shmget的返回值cmd IPC STAT 获取对象属性 属性保存在第三个参数上IPC SET 设置对象属性 第三个参数保存的是要修改的属性IPC RMID 删除对象 此时第三个参数为NULL即可返回值 返回值和cmd有关系 失败 1 比如 shmctl shmid IPC RMID NULL 访问共享内存 创建 打开信号量集合intsemget key tkey intnsems intsemflg 参数 key ftok 返回值nsems 指定的信号量集合中的信号量个数semflg IPC CREATIPC EXCLIPC CREAT如果共享内存不存在 则创建一个共享内存 否则打开操作 IPC EXCL只有在共享内存不存在的时候 新的共享内存才建立 否则就产生错误 返回值 返回该集合的标识符 失败 1 intsemctl intsemid intsemnum intcmd 功能 信号量集合的控制参数 semid 指定要操作的集合semnum 要操作的信号量的编号 编号从0开始cmd GETVAL 获取信号灯的值 返回值是获得值 比如 value semctl semid 0 GETVAL SETVAL 设置信号灯的值 需要用到第四个参数 因此在设置信号灯的值时应该及时的设置共用体semun的值第四个参数类型如下 unionsemun intval ValueforSETVAL structsemid ds buf BufferforIPC STAT IPC SET unsignedshort array ArrayforGETALL SETALL structseminfo buf BufferforIPC INFO Linux specific intsemop intsemid structsembuf opsptr unsignednops 功能 就是对信号量集合中的信号量进行PV操作参数 semid 指定要操作的集合opsptr structsembuf unsignedshortsem num semaphorenumber shortsem op semaphoreoperation shortsem flg operationflags 成员分析 sem num表示要操作的信号量的编号sem op 表示进行P或者V操作 比如 sem op 10 10 sem op 10 10 sem op 0 那么semop函数会等到该信号量的值变为0为止 sem flg 0 最常用的 表示semop函数的操作是阻塞的 直到成功为止 IPC NOWAIT 表示semop函数的操作是非阻塞的 如果操作没有成功 立刻返回 SEM UNDO 不常用 设置只对当前进程有效 不会保存到系统的信号量集合中 nops 调用一次semop要操作的信号量的个数返回值 成功0 失败 1 linux管道 消息队列 共享内存的对比 管道的优点是不需要加锁 缺点是默认缓冲区太小 只有4K 同时只适合父子进程间通信 而且一个管道只适合单向通信 如果要双向通信需要建立两个 而且不适合多个子进程 因为消息会乱 它的发送接收机制是用read write这种适用流的 缺点是数据本身没有边界 需要应用程序自己解释 而一般消息大多是一个固定长的消息头 和一个变长的消息体 一个子进程从管道read到消息头后 消息体可能被别的子进程接收到 linux管道 消息队列 共享内存的对比 消息队列也不要加锁 默认缓冲区和单消息上限都要大一些 在我的suse10上是64K 它并不局限于父子进程间通信 只要一个相同的key 就可以让不同的进程定位到同一个消息队列上 它也可以用来给双向通信 不过稍微加个标识 可以通过消息中的type进行区分 比如一个任务分派进程 创建了若干个执行子进程 不管是父进程发送分派任务的消息 还是子进程发送任务执行的消息 都将type设置为目标进程的pid 因为msgrcv可以指定只接收消息类型为type的消息 这样就实现了子进程只接收自己的任务 父进程只接收任务结果 linux管道 消息队列 共享内存的对比 共享内存的几乎可以认为没有上限 它也是不局限与父子进程 采用跟消息队列类似的定位方式 因为内存是共享的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国信息安全行业发展趋势预测及投资战略咨询报告
- 二零二五年度班组消防安全管理服务协议范本
- 二零二五年度公共租赁住房置换安置房买卖协议书
- 二零二五年度管道安装劳务分包服务协议
- 2025版电影剧本创作者保密及分成协议
- 二零二五版产权式商铺租赁与物业管理综合服务协议
- 2025版新能源汽车充电站建设与运营合作协议范本
- 二零二五年度文化旅游项目抵押担保协议
- 二零二五版C型钢环保节能产品购销合作协议
- 二零二五年度婚姻关系巩固不离婚协议书正文
- 转让律所合伙人份额协议书范文
- 《骆驼祥子》名著阅读课件
- 2023医疗质量安全核心制度要点释义(第二版)对比版
- 商品房预售资金监管实施方案
- 居间服务合同范本复制版
- 游戏开发外包合同
- 2024-2030年中国公路养护行业市场深度调研及投资策略与投资前景研究报告
- 虚拟货币行业市场深度分析报告
- 施工现场的防汛应急预案
- 《学科教学与德育及心理健康教育有机融合的研究》课题结题报告
- 四年级数学下册计算题(每日一练33份)
评论
0/150
提交评论