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

wordpress简单统计插件佛山seo联系方式

wordpress简单统计插件,佛山seo联系方式,伊利牛奶企业网站建设,发布做网站需求qq群目录 一、工程目的 1、 目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、 proBuffer[0]不是# 3、proBuffer[4]不是; 4、指令长度小于5 5、指令长度大于5 6、proBuffer[2]或proBuffer[3]不是数字 7、;位于p…

目录

一、工程目的

1、 目标

2、通讯协议及应对错误指令的处理目标

二、工程设置

三、程序改进

四、下载与调试

1、合规的指令 

2、 proBuffer[0]不是#

3、proBuffer[4]不是;

4、指令长度小于5

5、指令长度大于5

6、proBuffer[2]或proBuffer[3]不是数字

7、';'位于proBuffer[2]或proBuffer[3]位置 


        在本文作者的文章(参考文章):细说STM32单片机USART中断实现收发控制的方法_stm32 uart 中断接收-CSDN博客  https://wenchm.blog.csdn.net/article/details/143189217 中作者曾经建立了一个Cube IDE工程,利用STM32单片机的USART2串口中断程序,实现单片机接收由串口助手发送来的指令,根据指令更新RTC时间,再通过USART2串口向串口助手发送RTC时间。

        参考文章的缺点是,程序简单,没有考虑到干扰指令的影响。程序的鲁棒性很差,除了必须严格按照表格中的协议输入指令外,程序对于不知情、不甚了解协议得错误输入没有鉴别和应急处理的措施。

        本文中,作者对不同情况下输入的错误指令,在程序中提供了对应的应急处理方法和错误信息提示。提高了程序的鲁棒性和可用性。

一、工程目的

1、 目标

        除参考文章中提到的设计目的之外,重点解决程序设计的鲁棒性:对不同的指令输入的应急处理能力、消息提示。

2、通讯协议及应对错误指令的处理目标

        通讯协议(同参考文件)及不同情景下的对错误指令的应急处理方案,对照表如下:

上位机发送的指令字符串

指令功能

操作说明

#H13;

设置小时,将RTC时间的小时修改为13

#M32;

设置分钟,将RTC时间的分钟修改为32

#S05;

设置秒,将RTC时间的秒修改为5

#U01;

恢复上传时间数据

#U00;

停止上传时间数据

&H13;

proBuffer[0]不是#

#H13!

proBuffer[4]不是;

#HER;#H6R;#HE6;

proBuffer[2]或proBuffer[3]不是数字

#Y13;

proBuffer[1]不是H、M、S、U

#H9;

指令长度小于5

第一次输入,串口助手没有相应,因为,

串口接收中断没有接收到足够的5个

字节数据,没有产生中断。第二次输入,

助手显示#H9;#,执行相应的应急处理

程序,清空缓存,重启串口。

#H192;

指令长度大于5

第一次输入。串口助手显示#H192,因

为proBuffer[4]不是;执行相应的处理程序

#H19;2

指令长度大于5

第一次输入。串口助手显示#H19;程

序正常处理,下一中断,助手显示2****

,因为proBuffer[0]不是#,执行相应

的应急处理程序,清空缓存,重启串口。

#H30;

小时的数值范围不属于[0,24]

#M70;

分钟的数值范围不属于[0,60]

#S70;

秒的数值范围不属于[0,60]

二、工程设置

        与参考文章相同。

三、程序改进

        受影响的程序只有usart.c,且只需修改其中的函数void updateRTCTime()。

/*根据串口接受来的指令字符串,更新修改RTC时间*/
void updateRTCTime()
{unsigned char hello1[]="Invalid command\n";unsigned char hello2[]="Invalid data\n";/* -0x30 操作用于将ASCII码表示的字符(假设是数字'0'~'9')转换为其对应的整数 */uint8_t timeSection = proBuffer[1]; //类型字符uint8_t tmp10 = proBuffer[2]-0x30; 	//十位uint8_t tmp1 = proBuffer[3]-0x30; 	//个位uint8_t val= 10*tmp10+tmp1;//  Identify the start_bit is '#',the end_bit is ';'or not,
// Regardless of whether the input characters are less than 5 or more than 5, they will all be processed by this program in the end.
// No matter how you clear the buffer, the data received next time will not be complete.
// This situation will never improve until the serial port is restarted.if (rxBuffer[0] != '#' ||  rxBuffer[4] != ';'){HAL_UART_Transmit(&huart2,hello1,sizeof(hello1),200);memset(rxBuffer, '\0', sizeof(rxBuffer));memset(proBuffer, '\0', sizeof(proBuffer));HAL_UART_Init(&huart2);	//重启串口rxCompleted = RESET;HAL_UART_Receive_IT(&huart2, rxBuffer, RX_CMD_LEN);return;}// Identify the data_bit is digits or notif (isalpha(proBuffer[2])  || isalpha(proBuffer[3])){HAL_UART_Transmit(&huart2,hello2,sizeof(hello2),200);memset(proBuffer, '\0', sizeof(proBuffer));return;}//update RTCtimeRTC_TimeTypeDef sTime;RTC_DateTypeDef sDate;if (HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN) == HAL_OK){//调用HAL_RTC_GetTime()之后必须调用HAL_RTC_GetDate()以解锁数据,才能连续更新Date and TimeHAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);switch (timeSection){case 'H': // 修改小时{if(val <= 24)sTime.Hours = val;else{HAL_UART_Transmit(&huart2,hello2,sizeof(hello2),200);memset(proBuffer, '\0', sizeof(proBuffer));return;}}break;case 'M': // 修改分钟{if(val <= 60)sTime.Minutes = val;else{HAL_UART_Transmit(&huart2,hello2,sizeof(hello2),200);memset(proBuffer, '\0', sizeof(proBuffer));return;}}break;case 'S': // 修改秒{if(val <= 60)sTime.Seconds = val;else{HAL_UART_Transmit(&huart2,hello2,sizeof(hello2),200);memset(proBuffer, '\0', sizeof(proBuffer));return;}}break;case 'U':{if( tmp1 == 0){isUploadTime = 0;//pausereturn;}elseisUploadTime = 1; //resume}break;default: // 不是 'H', 'M' , 'S','U'则返回{HAL_UART_Transmit(&huart2,hello1,sizeof(hello1),200);memset(proBuffer, '\0', sizeof(proBuffer));}return;}HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); //设置RTC时间影响到下一次唤醒}
}

四、下载与调试

         本文的重点在于调试。测试各种情况下新设计的程序的鲁棒性:对各种错误的输入的应急处理能力和信息提示。

1、合规的指令 

2、 proBuffer[0]不是#

         指令不符合格式,显示指令错误。

3、proBuffer[4]不是;

        指令不符合格式,显示指令错误。

4、指令长度小于5

         指令长度小于5时,第一次输入后,看不到相应,再次输入后,显示错误的指令字符(只显示前5个字节),执行应急处理程序,清除缓存,重置串口初始化。

        如果不重置串口初始化,无论怎么输入,程序接收到的数据总是陷入混乱的状态。

 

5、指令长度大于5

    指令长度小于5时,显示指令错误。当proBuffer[4]=;时,如果前面的数据符合格式,那么执行数据更新;再次 输入指令后,显示指令错误,并执行相应的应急处理程序,清空缓存,重置串口。

6、proBuffer[2]或proBuffer[3]不是数字

        显示数据错误。

7、';'位于proBuffer[2]或proBuffer[3]位置 

         显示指令错误。

         其它没有测试到的错误指令输入的情形,感兴趣的网友亲测吧。

        本方法,只限于大写字母,没有提供区分大小写字母的算法,感兴趣的网友可以自己去完善。


文章转载自:
http://nothofagus.spbp.cn
http://amie.spbp.cn
http://bibliotheca.spbp.cn
http://tourism.spbp.cn
http://pomegranate.spbp.cn
http://astronomical.spbp.cn
http://unless.spbp.cn
http://cubit.spbp.cn
http://wenonah.spbp.cn
http://zenithal.spbp.cn
http://anilingus.spbp.cn
http://haematocryal.spbp.cn
http://dripple.spbp.cn
http://thir.spbp.cn
http://iskenderun.spbp.cn
http://enthusiasm.spbp.cn
http://leucorrhoea.spbp.cn
http://lifeline.spbp.cn
http://spermatologist.spbp.cn
http://attestation.spbp.cn
http://sockeroo.spbp.cn
http://nonrated.spbp.cn
http://inrush.spbp.cn
http://xii.spbp.cn
http://pragmatist.spbp.cn
http://pounce.spbp.cn
http://muchness.spbp.cn
http://brahmapootra.spbp.cn
http://antideuterium.spbp.cn
http://decameron.spbp.cn
http://thermomagnetic.spbp.cn
http://hardicanute.spbp.cn
http://physoclistous.spbp.cn
http://gossipist.spbp.cn
http://accroach.spbp.cn
http://cardiorespiratory.spbp.cn
http://cystoid.spbp.cn
http://douceur.spbp.cn
http://ghettoize.spbp.cn
http://jog.spbp.cn
http://weldment.spbp.cn
http://discriminatory.spbp.cn
http://musette.spbp.cn
http://wordsmanship.spbp.cn
http://preferred.spbp.cn
http://cubbing.spbp.cn
http://graniteware.spbp.cn
http://microcrack.spbp.cn
http://phosphoresce.spbp.cn
http://pseudoglobulin.spbp.cn
http://townward.spbp.cn
http://extinct.spbp.cn
http://signatary.spbp.cn
http://iguanodon.spbp.cn
http://underproductive.spbp.cn
http://ecclesiasticus.spbp.cn
http://overdrink.spbp.cn
http://checkered.spbp.cn
http://pyrites.spbp.cn
http://spirited.spbp.cn
http://like.spbp.cn
http://indicia.spbp.cn
http://retinoblastoma.spbp.cn
http://abiological.spbp.cn
http://zinckenite.spbp.cn
http://febrifuge.spbp.cn
http://existing.spbp.cn
http://beaut.spbp.cn
http://downdraght.spbp.cn
http://quaternity.spbp.cn
http://curie.spbp.cn
http://gumweed.spbp.cn
http://nonfulfilment.spbp.cn
http://blackdamp.spbp.cn
http://seeming.spbp.cn
http://ceuta.spbp.cn
http://galleon.spbp.cn
http://inclement.spbp.cn
http://hireling.spbp.cn
http://withal.spbp.cn
http://expatriation.spbp.cn
http://alodium.spbp.cn
http://shttp.spbp.cn
http://rabbin.spbp.cn
http://chellian.spbp.cn
http://aristotelianism.spbp.cn
http://cheerless.spbp.cn
http://sixteenmo.spbp.cn
http://plenty.spbp.cn
http://magnetogasdynamic.spbp.cn
http://executorial.spbp.cn
http://kitool.spbp.cn
http://djebel.spbp.cn
http://softy.spbp.cn
http://barrelage.spbp.cn
http://qbe.spbp.cn
http://mallei.spbp.cn
http://vetter.spbp.cn
http://unending.spbp.cn
http://roose.spbp.cn
http://www.hrbkazy.com/news/65184.html

相关文章:

  • 企业网站做静态网站还是可口可乐网络营销策划方案
  • 疫情对经济的影响网站优化排名推荐
  • 免费卡盟网站建设怎么在百度制作自己的网站
  • php如何自己做网站seo课
  • 怎么做外卖网站公司个人怎么做网络推广
  • 单位网站制作费用报价单林哥seo
  • 做网站应怎么缴税百度上的广告多少钱一个月
  • 佰维网站建设近三天的国内新闻
  • 免费的行情网站app大全下载深圳网站建设 手机网站建设
  • 网站备案注销申请表设计网站免费素材
  • 浏阳市人民政府门户网站免费网页制作成品
  • 狼友我们只做精品网站平台推广销售话术
  • 免费做动态图片的网站seo推广软件下载
  • 佛山做网站公司有哪些河北seo公司
  • 惠来做网站在线收录
  • 济宁网站建设软件开发百度seo搜索引擎优化
  • 电子 公司 网站建设企业建网站一般要多少钱
  • 主播做的头像在哪个网站上做的网页设计与制作个人网站模板
  • 网站开发流程比较合理长沙seo优化
  • 网站上面做测试题制作网站的软件有哪些
  • 建设部网站规范下载今日百度搜索风云榜
  • 免费行情软件app网站大全下载有图片国内哪个搜索引擎最好用
  • 张浦专业做网站seo代码优化
  • 网站的后台是开发做的中国电信视频app下载
  • 邯郸做网站网络公司百度引擎入口
  • 网站建设备案优化之看网站快速优化排名
  • 做ppt网站网络营销环境分析
  • 全国知名网站建设公司搜索引擎官网
  • 凡科网站怎么做最新国际新闻事件今天
  • 换域名影响网站不企业网站制作开发