当前位置: 首页 > news >正文

金华市建设监理协会网站aso优化平台有哪些

金华市建设监理协会网站,aso优化平台有哪些,宁波网站建设信任蓉胜网络好,wordpress邮件验证码目录 一、模块化编程思维 二、安防监控项目主框架搭建 一、模块化编程思维 其实我们以前学习32使用keil的时候就是再用模块化的思维。每个硬件都单独有一个实现功能的C文件和声明函数#xff0c;进行宏定义以及引用需要使用头文件的h文件。 比如简单的加减乘除取余操作我们…目录 一、模块化编程思维 二、安防监控项目主框架搭建 一、模块化编程思维 其实我们以前学习32使用keil的时候就是再用模块化的思维。每个硬件都单独有一个实现功能的C文件和声明函数进行宏定义以及引用需要使用头文件的h文件。 比如简单的加减乘除取余操作我们把他们每个都封装一个文件 但是他们每个文件里功能很少所以可以共用一个h文件common  二、安防监控项目主框架搭建 这是我们的整个架构的代码 buzzer和led都是板子上的外设 transfer是进行数据转换的 sqlite就是数据库之前学过的 refresh是刷新我们上传的数据需要刷新到网页上 client request是客户端请求从上往下发来的命令都由我们主机上的服务器处理 sms就是GPRS线程的程序可以打电话和发短信 #include stdio.h #include pthread.h #include errno.h #include signal.h #include unistd.h #include sys/shm.h #include sys/sem.h #include sys/ipc.h #include data_global.hvoid release_pthread_resource(int signo);extern pthread_mutex_t mutex_client_request,mutex_refresh,mutex_sqlite,mutex_transfer,mutex_sms,mutex_buzzer,mutex_led;extern pthread_cond_t cond_client_request,cond_refresh,cond_sqlite,cond_transfer,cond_transfer,cond_sms,cond_buzzer,cond_led;extern int msgid; extern int shmid; extern int semid;pthread_t id_client_request,id_refresh,id_sqlite,id_transfer,id_sms,id_buzzer,id_led; int main(int argc, const char *argv[]) {//pthread_mutex_init(mutex_client_request,NULL);pthread_mutex_init(mutex_refresh,NULL);pthread_mutex_init(mutex_sqlite,NULL);pthread_mutex_init(mutex_transfer,NULL);pthread_mutex_init(mutex_sms,NULL);pthread_mutex_init(mutex_buzzer,NULL);pthread_mutex_init(mutex_led,NULL);signal (SIGINT, release_pthread_resource);pthread_cond_init(cond_client_request,NULL);pthread_cond_init(cond_refresh,NULL);pthread_cond_init(cond_sqlite,NULL);pthread_cond_init(cond_transfer,NULL);pthread_cond_init(cond_sms,NULL);pthread_cond_init(cond_buzzer,NULL);pthread_cond_init(cond_led,NULL);pthread_create(id_client_request, NULL,pthread_client_request,NULL); pthread_create(id_refresh, NULL,pthread_refresh,NULL); pthread_create(id_sqlite, NULL,pthread_sqlite,NULL); pthread_create(id_transfer, NULL,pthread_transfer,NULL); pthread_create(id_sms, NULL,pthread_sms,NULL); pthread_create(id_buzzer, NULL,pthread_buzzer,NULL); pthread_create(id_led, NULL,pthread_led,NULL); //pthread_join(id_client_request,NULL); printf (pthread1\n);pthread_join(id_refresh,NULL); printf (pthread2\n);pthread_join(id_sqlite,NULL); printf (pthread3\n);pthread_join(id_transfer,NULL); printf (pthread4\n);pthread_join(id_sms,NULL); printf (pthread5\n);pthread_join(id_buzzer,NULL); printf (pthread6\n);pthread_join(id_led,NULL); printf (pthread7\n);return 0; }void release_pthread_resource(int signo) {pthread_mutex_destroy (mutex_client_request); pthread_mutex_destroy (mutex_refresh); pthread_mutex_destroy (mutex_sqlite); pthread_mutex_destroy (mutex_transfer); pthread_mutex_destroy (mutex_sms); pthread_mutex_destroy (mutex_buzzer); pthread_mutex_destroy (mutex_led); pthread_cond_destroy (cond_client_request);pthread_cond_destroy (cond_refresh);pthread_cond_destroy (cond_sqlite);pthread_cond_destroy (cond_transfer);pthread_cond_destroy (cond_sms);pthread_cond_destroy (cond_buzzer);pthread_cond_destroy (cond_led);pthread_detach(id_client_request);pthread_detach(id_refresh);pthread_detach(id_sqlite);pthread_detach(id_transfer);pthread_detach(id_sms);pthread_detach(id_buzzer);pthread_detach(id_led);printf(all pthread is detached\n);msgctl (msgid, IPC_RMID, NULL);shmctl (shmid, IPC_RMID, NULL);semctl (semid, 1, IPC_RMID, NULL);exit(0); }这是主函数主函数其实就是一个进程它创建了一堆线程来实现这些功能。 #include data_global.h//½ԊԚigBeeµŊɼ¯µÁ9ƽ̨µĴ«¸ц뽾void *pthread_transfer(void *arg) {printf(pthread_analysis\n);}transfer里面就是打印了一句话具体的功能还都没有实现。 #include data_global.h//:A9LED模块线程. void *pthread_led(void *arg) {printf(pthread_led\n); #if 05. open(dev_led, )6. pthread_cond_wait (cond_led, );7. 获取dev_led_mask控制标志8. 通过ioctl控制led #endif }#include data_global.h//:A9·儹Ƿ¿ٖǏ߳ʮ void *pthread_buzzer(void *arg) {printf(pthread_buzzer\n);#if 0 1. open(dev_buzzer, )2. pthread_cond_wait (cond_buzzer, );3. »ev_buzzer_mask(¿ٖƱ떾)4. ͨ¹£¨£©¿ٖŢuzzer #endif }#include data_global.hextern int msgid; extern key_t key;extern pthread_mutex_t mutex_client_request,mutex_refresh,mutex_sqlite,mutex_transfer,mutex_analysis,mutex_sms,mutex_buzzer,mutex_led,mutex_camera;extern pthread_cond_t cond_client_request,cond_refresh,cond_sqlite,cond_transfer,cond_analysis,cond_sms,cond_buzzer,cond_led,cond_camera;extern char recive_phone[12] ; extern char center_phone[12] ;struct msg msgbuf;//:处理消息队列里请求的线程. void *pthread_client_request(void *arg) {if((key ftok(/tmp,g)) 0){perror(ftok failed .\n);exit(-1);}msgid msgget(key,IPC_CREAT|IPC_EXCL|0666);if(msgid -1) {if(errno EEXIST){msgid msgget(key,0777);}else{perror(fail to msgget);exit(1);}}printf(pthread_client_request\n);while(1){bzero(msgbuf,sizeof(msgbuf));printf(wait form client request...\n);msgrcv (msgid, msgbuf, sizeof (msgbuf) - sizeof (long), 1L, 0);printf (Get %ldL msg\n, msgbuf.msgtype);printf (text[0] %#x\n, msgbuf.text[0]);switch(msgbuf.msgtype){case 1L:printf(hello led\n);break;case 2L:printf(hello beep\n);break;case 3L:printf(hello seg\n);break;case 4L:printf(hello fan\n);break;case 5L:printf(set env data\n);printf(temMAX: %d\n,*((int *)msgbuf.text[1]));printf(temMIN: %d\n,*((int *)msgbuf.text[5]));printf(humMAX: %d\n,*((int *)msgbuf.text[9]));printf(humMAX: %d\n,*((int *)msgbuf.text[13]));printf(illMAX: %d\n,*((int *)msgbuf.text[17]));printf(illMAX: %d\n,*((int *)msgbuf.text[21]));break;case 6L:case 7L:case 8L:case 9L:printf(ţ¿ʒԽ«֢ЩطΪ)չ4ѧϰ£¬¼ԓˮ\n);break;case 10L:{int i 0 , j 0 ;for(i 0 ; i 11; i){recive_phone[i] msgbuf.text[i]; }recive_phone[i] \0;printf(recive:%s\n,recive_phone);for(j 0 ;msgbuf.text[i] ! \0 j 12; i, j){center_phone[j] msgbuf.text[i];}center_phone[j] \0;printf(center:%s\n,center_phone);#if 0pthread_mutex_lock (mutex_slinklist);sqlite_InsertLinknode (ENV_UPDATE, all_info_RT, sto_no, 0);//0,0分别是仓库号和货物种类号pthread_mutex_unlock (mutex_slinklist);pthread_cond_signal (cond_sqlite);#endif }break;default:break;}}}#if 0long msgtype;//¾ࠌ嶄лϢэлϢэµķׅ䣺1L: LED¿ٖ 2L: ·儹Ƿ¿ٖ 3L: ̄·LEDµDŽ£ŢµŊ4L: ·芈5L: ςʪ¶ɗʨ׃6L-7L-8L-9L,ԃԚ¸ŀ©չ10L: 3Gͨхģ¿笇PRS switch(msgbuf.msgtype){case 1L: ... break;....default .... break;} #endif 这些线程都还没有具体实现功能这就是一个框架 两种意识1、分层意识2、数据流***************************************************** 分层分析 ################## web网页端显示部分 环境信息 实时刷新环境数据摄像头采集图像 采集监控信息硬件控制 下发要去控制的命令 A9数据处理部分创建进程、线程每条线程做自己的事情涉及到进程间通信数据处理分发上行数据 or 下行数据 A9-ZigBee数据采集部分A9采集部分ZigBee采集部分(STM32平台可以自己扩展) ***************************************************** 数据流分析 ##################数据上传数据下发制定通信的协议结构体数据要怎么上传上传的目的是为了什么数据要怎么下发下发的目的又是为了什么数据的上传 共享内存上传数据 显示并交给用户查看环境信息数据的下发用于控制硬件 消息队列下发数据 控制硬件改变环境**************************************************************************分层分析 web网页端显示部分 环境信息 adc电压数据mpu6050的六轴数据温度湿度摄像头采集图像硬件控制 风扇LED灯蜂鸣器GPRS 发短信或打电话A9数据处理部分数据流向分析1、ZigBee(采集终端)--A9处理平台2、A9处理平台--网页显示平台3、网页显示平台--A9处理平台4、A9处理平台---ZigBee(采集终端)A9-ZigBee采集部分外设驱动 --------在应用层去获取外设的状态或数据 A9--------- 蜂鸣器 ------------------蜂鸣器报警LED灯 ------------------卧室-厕所-楼道-公共照明 --------LED2-LED3-LED4-LED5按键 ------------------按键触发中断---控制卧室和厕所灯-----LED2-LED3 ADC -----------------获取ADC的采样数据mpu6050 ------------------获取MPU6050的六轴数据zigbee------adc ------主---协调器风扇 ------从---终端节点 下发命令控制风扇温湿度 ------从---终端节点 上传温湿度数据(光敏)小结 | | | || ZigBee | A9 | web || | | || adc | 蜂鸣器 | 环境信息-----------------adc电压数据| 风扇 | LED灯 | 摄像头采集:-----usb摄像头 mpu6050的六轴数据| 温湿度 | 按键 | 硬件控制 |------风扇 温度| 光敏 | ADC | | LED灯 湿度mpu6050 蜂鸣器四路led灯模拟数码管 GPRS四路led灯模拟数码管 数据流分析数据上传 ZigBee | 温湿度数据 |A9 |ADC采集 |-----------上传这些数据加速计数据 |陀螺仪数据 |摄像头 |视频流图像 |数据下发 ZigBee |风扇 |A9 |蜂鸣器 |-----打开设备节点控制硬件LED灯 |四路LED灯模拟的数码管 |GPRS |3G通信模块 |#define GPRS_DEV /dev/ttyUSB0#define ZIGBEE_DEV /dev/ttyUSB1#define BEEPER_DEV /dev/fsbeeper0#define LED_DEV /dev/fsled0制定通信的结构体数据的上传 数据类型定义 typedef uint8_t unsigned char; 参考typedef uint16_t unsigned short;typedef uint32_t unsigned int;//考虑到内存对齐的问题struct makeru_zigbee_info{uint8_t head[3]; //标识位: m s m makeru-security-monitor uint8_t type; //数据类型 z---zigbee a---a9-------------crc ...加密算法 --------------float temperature; //温度float humidity; //湿度float tempMIN;//温度下限float tempMAX;//温度上限 float humidityMIN; //湿度下限float humidityMAX; //湿度上限uint32_t reserved[2]; //保留扩展位默认填充0//void *data; 内核预留的扩展接口 参考版};struct makeru_a9_info{uint8_t head[3]; //标识位: m s m makeru-security-monitor uint8_t type; //数据类型 z---zigbee a---a9uint32_t adcshort gyrox; //陀螺仪数据short gyroy;short gyroz;short aacx; //加速计数据short aacy;short aacz;uint32_t reserved[2]; //保留扩展位默认填充0//void *data; 内核预留的扩展接口 参考版};struct makeru_env_data{struct makeru_a9_info a9_info; struct makeru_zigbee_info zigbee_info;};//所有监控区域的信息结构体struct env_info_client_addr{struct makeru_env_data monitor_no[MONITOR_NUM]; //数组 老家---新家};数据的下发采用消息队列的方式下发数据到下位机上 数据的下发用于控制硬件 man msgsnd #include sys/types.h#include sys/ipc.h#include sys/msg.hint msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);消息队列用于通信的结构体 包括数据类型和数据将消息队列封装成函数直接通过参数传递的方式来发送信息 int send_msg_queue(long type,unsigned char text){struct msg msgbuf;msgbuf.type 1L;msgbuf.msgtype type; //具体的消息类型msgbuf.text[0] text; //控制命令字 if(msgsnd(msgid,msgbuf,sizeof(msgbuf) - sizeof(long),0) -1){perror(fail to msgsnd type2);exit(1);}return 0;}struct msgbuf {long mtype; /* message type, must be 0 */char mtext[1]; /* message data */};//消息队列结构体#define QUEUE_MSG_LEN 32 struct msg{long type; //从消息队列接收消息时用于判断的消息类型 暂时不用 1Lhome1 2Lhome2 ... long msgtype;//具体的消息类型 指代控制的设备是什么类型的设备unsigned char text[QUEUE_MSG_LEN];//消息正文 CMD 控制指定的设备};long msgtype;//具体的消息类型消息类型的分配1L: LED控制2L: 蜂鸣器控制3L: 四路LED灯模拟的数码管4L: 风扇5L: 温湿度最值设置6L-7L-8L-9L,用于个人的扩展10L: 3G通信模块-GPRS switch(msgbuf.msgtype){case 1L: ... break;....default .... break;}控制命令的制定消息队列接收消息msgrcv (msgid, msgbuf, sizeof (msgbuf) - sizeof (long), 1L, 0);解析buf中的数据printf (Get %ldL msg\n, msgbuf.msgtype);printf (text[0] %#x\n, msgbuf.text[0]);A9-ZIGBEE通用指令命令格式一个字节unsigned char 对应消息队列中正文的类型 unsigned int 8位----------------------------------------7 6 | 5 4 | 3 2 1 0平台编号| 设备编号 | 操作设备----------------------------------------0 00 1 1 01 1平台编号 0x00 0号-ZigBee平台 0x40 1号-A9/A53平台0x80 2号-STM32平台可以自己扩展0xc0 3号-avr arduino....保留(如果平台继续增多的话可以采用2个字节或多个字节来对设备进行唯一的编号比如A9类下的1号平台2号平台先分类然后再具体标识设备)---------------------------------------- 设备编号 操作掩码 0x00 LED 0x00 全部关闭0x01 全部打开0x02 打开LED20x03 打开LED30X04 打开LED40x05 打开LED50X10 打开流水灯----------------------------------------0x10 蜂鸣器 0x00 关闭0x01 打开0x02 自动报警关闭0x03 自动报警打开----------------------------------------0x20 风扇 0x00 关闭风扇0x01 打开风扇---------------------------------------- 0x30 数码管 0x0~0xF 显示0~F数字(四盏灯对应0000-表示0,0001-表示1....1110-表示14)0x0f 关闭数码管 led2-3-4-5----------------------------------------控制命令 平台编号 设备编号 操作掩码 命令 (命令的封装)例如0x00 0x20 0x01 0x21 风扇打开0x40 0x10 0x01 0x51 蜂鸣器打开0x40 0x30 0x08 0x78 数码管显示80x40 0x30 0x0f 0x7f 关闭数码管a 高位数据b代表低位数据short cunsigned char a ,b;c a | b;c a b;上行封装的结构体共享内存和信号量 交给CGIC语言和HTML语言之间的转化接口交给HTML下行封装的命令字消息队列 msgbuf msgsnd控制命令字封装在msgsnd的msgbuf中 A9端解析向下控制硬件 这是之前定义好的结构体id和key值一定要严格按照定好的来不然就会造成无法通信的后果再团队合作中有想法要在做前提这样可以提前修改。 现在线程都启动成功了 CROSS_COMPILEarm-linux- CC$(CROSS_COMPILE)gcc CFLAGS -c -g #LDFLAGS -lpthread -L ./lib -lsqlite3 LDFLAGS -lpthread OBJSmain.o data_global.o pthread_transfer.o \      pthread_client_request.o pthread_buzzer.o pthread_led.o\      pthread_sqlite.o \      pthread_refresh.o pthread_sms.o monitor_obj :$(OBJS)     $(CC) -o $ $^ $(LDFLAGS)     mv *o ./obj $(OBJS):%.o:%.c     $(CC) $(CFLAGS) $ -o $ install:     sudo cp monitor_obj ~/nfs_rootfs/  .PHONY:clean clean:     rm *.o monitor_obj -rf  上面是makefile的内容
http://www.ho-use.cn/article/10814138.html

相关文章:

  • 久久建筑网是个什么样的网站即将发布的手机
  • 中英企业网站管理系统上海民营企业500强
  • 三亚网站开发哪家好什么是电子商务运营
  • 外贸网站商城建设潍坊网站制作多少钱
  • 购物网站模块是什么意思电商购物网站模板下载
  • 全国分类信息网站排名新闻发布会直播在哪里看
  • 网站突然打不开是什么原因wordpress版本
  • 做网站年入多少先有域名才可以做网站吗
  • 上海万户信息技术有限公司成都网站优化
  • 城乡建设网官方网站装修高端网站建设
  • vs2010做网站做美食原创视频网站
  • 动态海报网站网站建设 官网
  • 网站制作框架汽车报价软件排行榜
  • 常德建设网站制作网站设计咨询电话
  • 哪个网站可以卖自己的设计建筑人才网一砖一瓦
  • 想做棋牌网站怎么做专业做网站的企业
  • 网站开发应该先写前端还是后端活码二维码生成器
  • 不用下载就能看的网站的浏览器三只松鼠网站怎样做
  • 免费自助建站怎么样建设工程消防设计备案凭证查询网站
  • 建设医院网站的重点与难点在于海口seo关键词优化
  • 哪里有免费的网站网址网站安全建设思考
  • 物流网站建设规划书房地产网络营销方案
  • 网页制作app手机版企业网站优化是什么
  • 天津做网站最权威的公司微信公众号买卖平台
  • php网站怎么做自适应下沙做网站的
  • 淘宝客网站WordPress兰州高端网站
  • 免费网站制作开发公司凡科网站源码下载
  • 怎样在各大网站做推广杭州网红
  • 营销网站建设专业服务公司php网站怎么做伪静态
  • 有做的小说网站做膜的网站有哪些