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

网站需要人员互联网营销怎么赚钱

网站需要人员,互联网营销怎么赚钱,衡阳的网站建设,专业seo培训学校数据包 把属于同一批的数据进行打包和分割#xff0c;方便接收方进行识别 HEX数据包 思路#xff1a;一个数据规定四个字节#xff0c;以0xFF为包头#xff0c;0xFE为包尾#xff0c;当检测到0xFF时#xff0c;接下来四个数据就是数据#xff0c;接收到0xFE时#x…数据包 把属于同一批的数据进行打包和分割方便接收方进行识别 HEX数据包 思路一个数据规定四个字节以0xFF为包头0xFE为包尾当检测到0xFF时接下来四个数据就是数据接收到0xFE时置一个接收完毕标志位。 这样存在几个问题需要解决 问题1包头包尾和数据载荷重复的问题 解决方法 一、限制载荷数据的范围不超过包头包尾 二、严格限制数据包的长度 三、增加包头包尾的数量且组合方式为载荷数据不会出现的情况 问题2包头包尾并不是全都需要的可以只要包头不要包尾只能用于固定包长的情况 问题3各种数据转换为字节流的问题这里的数据包都是一个个字节组成的如果想发送16位的整形数据32位的整形数据floatdouble甚至是结构体其实都没问题因为他们内部也都是由一个个字节组成的只需要用uint8_t的指针指向它把它们当做一个字节数组发送就行了 文本数据包 两者优缺点  HEX数据包传输最直接解析数据非常简单比较适合一些模块发送原始的数据比如一些使用串口通信的陀螺仪、温湿度传感器缺点是灵活性不足、载荷容易和包头包尾重复 文本数据包数据直观易理解非常灵活比较适合一些输入指令进行人机交互的场合比如蓝牙模块常用的AT指令CNC和3D打印机常用的G代码缺点是解析效率低 数据包的发送 HEX数据包的发送定义一个数组填充数据然后用Send函数一发即可 文本数据包的发送定义一个字符串....... 数据包的接收 如何接收固定包长的HEX数据包 在之前的代码中串口每接收到一个数据程序都会进入一个中断在中断中获取到这一个字节在这之后会退出中断所以每拿到一个数据都是一个独立的过程对于数据包来说很明显它具有前后关联性——包头之后是数据数据之后是包尾对应包头数据和包尾这三种状态我们都需要有不同的处理逻辑在程序中我们需要设计一个能记住不同状态的机制在不同状态执行不同的操作同时还要进行状态的合理转移这种程序思维被称为“状态机”。 如图是状态转移图我们设定三种状态——1、等待包头2、接收数据3、等待包尾 等待包头状态下S0直到接收到0xFF时把S置1然后进入接收数据状态再然后直到收集满4个数据并把数据存储到数组中后把S置2然后进入等待包尾状态直到接收到包尾0xFE后把S置0进入等待包头状态。 不固定包长的文本数据包接收 代码实操  串口收发HEX数据包 发 //发送数据包 void Serial_SendPacket(void) {Serial_SendByte(0xFF);Serial_SendArray(Serial_TXPacket, 4);Serial_SendByte(0xFE); } #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Serial.huint16_t Data;int main(void) {OLED_Init();Serial_Init();Serial_TXPacket[0]0x01;Serial_TXPacket[1]0x02;Serial_TXPacket[2]0x03;Serial_TXPacket[3]0x04;Serial_SendPacket();while(1){} } 收 uint8_t Serial_RXFlag; uint16_t Serial_TXPacket[4]; uint16_t Serial_RXPacket[4];//用于获取自建的标志位 uint8_t Serial_GetRXFlag(void) {if (Serial_RXFlag 1){//检测标志位位1后立马清零//以便下次获取串口接收值Serial_RXFlag 0;return 1;}return 0; }//中断函数 void USART1_IRQHandler(void) {static uint8_t RXState 0;static uint8_t pRXPacket 0;if (USART_GetITStatus(USART1, USART_IT_RXNE) SET){uint8_t RXData USART_ReceiveData(USART1);if (RXState 0){if (RXData 0xFF){RXState 1;//给接收数据的数组下标清零//在这清零能保证每次接收数据时下标正确pRXPacket 0;}}else if (RXState 1){//把接收到的数据存入数组中Serial_RXPacket[pRXPacket] RXData;pRXPacket ;if (pRXPacket 4){RXState 2;}}else if (RXState 2){if (RXData 0xFE){RXState 0;Serial_RXFlag 1;}}USART_ClearITPendingBit(USART1, USART_IT_RXNE);} }两个数组还要在.h文件中加上extern以便在主函数中直接修改或者调用其值 即使载荷数据和包头包尾重复都没有影响 隐藏的问题 RXPacket是一个同时被写入又同时被读出的数组在中断函数中我们会依次写入它在主函数中我们又依次读出它这会造成数据包之间的数据混在一起比如读出的过程太慢了可能会造成前面两个数据是新的后面两个数据是之前的数据即我们读出的数据可能一部分属于上一个数据包解决办法在接收部分加入判断在每个数据包读取处理完毕后再接收下一个数据包线程安全但其实这个问题也是相对实际情况而言的可以不处理也可能必须要处理。 再添加一个功能——按下按键TXPacket中的数据都1用于检测发出数据包程序是否正确运行 在主函数中修改即可顺便优化代码 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Serial.h #include Key.huint16_t Data;int main(void) {OLED_Init();Key_Init();Serial_Init();OLED_ShowString(1, 1, TXPacket);OLED_ShowString(3, 1, RXPacket); Serial_TXPacket[0]0x01;Serial_TXPacket[1]0x02;Serial_TXPacket[2]0x03;Serial_TXPacket[3]0x04;Serial_SendPacket();while(1){if (Key_GetNum()1){Serial_TXPacket[0];Serial_TXPacket[1];Serial_TXPacket[2];Serial_TXPacket[3];Serial_SendPacket();OLED_ShowHexNum(2, 1, Serial_TXPacket[0], 2);OLED_ShowHexNum(2, 4, Serial_TXPacket[1], 2);OLED_ShowHexNum(2, 7, Serial_TXPacket[2], 2);OLED_ShowHexNum(2, 10, Serial_TXPacket[3], 2);}if (Serial_GetRXFlag() 1){OLED_ShowHexNum(4, 1, Serial_RXPacket[0], 2);OLED_ShowHexNum(4, 4, Serial_RXPacket[1], 2);OLED_ShowHexNum(4, 7, Serial_RXPacket[2], 2);OLED_ShowHexNum(4, 10, Serial_RXPacket[3], 2);}} }就可以实现按一下按钮串口就输出一组数据包且这组数据包每个数据逐渐递增 然后在发送区发送的数据在OLED中显示 串口收发文本数据包 接收数据包直接使用SendString即可所以可以把TXPacket相关函数删去 然后修改一下中断函数的判断条件 //以下皆用于接收数据包 uint8_t Serial_RXFlag; char Serial_RXPacket[100]; //用于获取自建的标志位 uint8_t Serial_GetRXFlag(void) {if (Serial_RXFlag 1){//检测标志位位1后立马清零//以便下次获取串口接收值Serial_RXFlag 0;return 1;}return 0; }//中断函数 void USART1_IRQHandler(void) {static uint8_t RXState 0;static uint8_t pRXPacket 0;if (USART_GetITStatus(USART1, USART_IT_RXNE) SET){char RXData USART_ReceiveData(USART1);if (RXState 0){if (RXData ){RXState 1;//给接收数据的数组下标清零//在这清零能保证每次接收数据时下标正确pRXPacket 0;}}else if (RXState 1){if (RXData \r){RXState 2;}else{//把接收到的数据存入数组中Serial_RXPacket[pRXPacket] RXData;pRXPacket ;}}else if (RXState 2){if (RXData \n){RXState 0;//标志位\0标志着字符串的结束Serial_RXPacket[pRXPacket] \0;Serial_RXFlag 1;}}USART_ClearITPendingBit(USART1, USART_IT_RXNE);} }主函数中实验一下 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Serial.h #include LED.h #include string.hint main(void) {OLED_Init();LED_Init();Serial_Init();OLED_ShowString(1, 1, TXPacket);OLED_ShowString(3, 1, RXPacket); while(1){if (Serial_GetRXFlag() 1){OLED_ShowString(4, 1, );OLED_ShowString(4, 1, Serial_RXPacket);}} }接下来就应该实现通过串口输入文本来控制LED的亮灭并通过OLED上有所反映 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Serial.h #include LED.h #include string.hint main(void) {OLED_Init();LED_Init();Serial_Init();OLED_ShowString(1, 1, TXPacket);OLED_ShowString(3, 1, RXPacket); while(1){if (Serial_GetRXFlag() 1){OLED_ShowString(4, 1, );OLED_ShowString(4, 1, Serial_RXPacket);if(strcmp(Serial_RXPacket, LED_ON) 0){LED_On();OLED_ShowString(2, 1, );OLED_ShowString(2, 1, LED_ON_OK);Serial_SendString(LED_ON_OK\r\n);}else if (strcmp(Serial_RXPacket, LED_OFF) 0){LED_Off();OLED_ShowString(2, 1, );OLED_ShowString(2, 1, LED_OFF_OK);Serial_SendString(LED_OFF_OK\r\n);}else{OLED_ShowString(2, 1, );OLED_ShowString(2, 1, Error);Serial_SendString(Error\r\n);}}} }这样就可以实现目标了 但是还会有个问题如果连续发送数据包程序处理不及时可能会导致数据包错位这时候我们就需要添加一个程序使其在上一个数据包未处理完成就不接受新的数据包的功能。 只需把Serial_GetRXFlag(void)函数删去在中断函数的第一个判断语句中修改为 if (RXData Serial_RXFlag 0){RXState 1;//给接收数据的数组下标清零//在这清零能保证每次接收数据时下标正确pRXPacket 0;} 然后再在主函数if条件修改为 if (Serial_RXFlag 1) 然后再在其最后添加 Serial_RXFlag 0; 即可 或者可以再定义一个指令缓存区把接收好的字符串放在这个指令缓存区里排队这样处理起来更有条理
http://www.huolong8.cn/news/160891/

相关文章:

  • 进口网站建设十大外贸论坛
  • 有帮人做网站的人吗德阳建设局官方网站
  • 做便宜网站全球营销策划公司排名
  • 如何申请网站备案号有哪些可以做外链的网站
  • 吉安网站公司线上推广员
  • 网站的数据库做备份做网站可以用电脑当服务器吗
  • 网站怎么做qq的授权登陆福清做网站
  • 如何查看网站的更新频率上海建行网点
  • 泰州高端网站建设北京外贸网站建设公司
  • 建立企业网站价格自建app免费制作平台
  • 网站客户端怎么做的建网站的每年有费用
  • 学习网站建设要报班吗嘉兴做网站多少钱
  • 那些网站做的非常好看的服务器做jsp网站教程
  • 中山市网站建设焦作做网站哪家好
  • wordpress注册邮箱验证收不到邮件电脑系统优化软件排行榜
  • 原创网站设计费用如何做网站源码
  • 无锡新吴区住房建设和交通局网站深圳市光明区实验学校
  • 微企点做网站视频聊城手机网站建设服务
  • 大冶市建设部门网站域名注册商怎么查
  • 如何给自己开发的网站加域名南宁做网站优化的公司
  • 如何用word做简单的网站中国建设银行太原招聘信息网站
  • 南昌建设厅网站南宁网站制作专业
  • 湛江做网站电话做一个网站需要多大的空间
  • 思乐网站建设小型企业网站开发
  • 网站定制化台州外包加工网
  • 伦教网站设计传奇类型的网游
  • 赣榆哪里有做网站的印象笔记 wordpress
  • 怎样做网站导购教程wordpress模板仿遮天小说站
  • 哪个网站做恒生指数最安全揭阳建网站
  • wordpress网站搭建教程做网站建设的怎么赢利