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

中山网站制作网页网站建设定位分析论文

中山网站制作网页,网站建设定位分析论文,遵义网站建设价格,软件外包公司可以去吗前言 #xff08;1#xff09;在嵌入式程序设计中#xff0c;我们常常会要对各类传感器进行数据存储。大多时候的传感器#xff0c;例如红外光传感器#xff0c;返回的数据要么是0#xff0c;要么是1。因此#xff0c;只需要一bit就能够存储。而很多人却常常使用char型数…前言 1在嵌入式程序设计中我们常常会要对各类传感器进行数据存储。大多时候的传感器例如红外光传感器返回的数据要么是0要么是1。因此只需要一bit就能够存储。而很多人却常常使用char型数组存储这样真正申请到的内存只使用了八分之一。对于MCU这种空间宝贵的微型控制器而言这是对内存的极大浪费。 2因此我在此介绍一个初学C语言时候讲解的技术——位域提高空间的利用率。 3在入门嵌入式开发的时候大多数人都是做一个循迹小车而进行循迹就需要对光电传感器进行偏差量化。根据偏差量化的值进行输出相应的PWM。如果是开环控制进行偏差量化使用联合体无疑是最高效的方式。 优化两种状态变量存储 存储 1例如我这个小项目需要使用上一个12路循迹模块一个红外遥控器一个触摸模块有一种触摸模块你手摸上去就会返回指定电平。 2为了高效存储这些只有两个状态的变量。我们可以按照下面方式进行存储。 /*--- 存储结构设计 ---*/ typedef struct {uint8_t track_bit1 :1;uint8_t track_bit2 :1;uint8_t track_bit3 :1;uint8_t track_bit4 :1;uint8_t track_bit5 :1;uint8_t track_bit6 :1;uint8_t track_bit7 :1;uint8_t track_bit8 :1;uint8_t track_bit9 :1;uint8_t track_bit10 :1;uint8_t track_bit11 :1;uint8_t track_bit12 :1; //上面都是灰度传感器控制位uint8_t IRDS_bit13 :1; //红外遥控器控制位uint8_t Touch_bit14 :1; //触摸模块uint8_t bit15 :1; //下面2bit保留uint8_t bit16 :1; }Bit_field; 访问 1现在我们知道如何存储这个如何访问呢这个其实是C语言位域基础知识但是为了防止有一些大学这部分不教所以我还是讲一下。 Bit_field two_status_sensor; two_status_sensor.track_bit1 readpin(1); //使用你当前的MCU读取引脚电平函数 two_status_sensor.track_bit2 readpin(2); //使用你当前的MCU读取引脚电平函数 two_status_sensor.IRDS_bit13 readpin(13); //使用你当前的MCU读取引脚电平函数 if(two_status_sensor.IRDS_bit13 1) //假设遥控器被按下引脚为高电平 {//... }利用共用体进行偏差量化 利用Excel可视化偏差量化 1现在我们使用位域对这种2值变量有了一个很好的存储了。但是我们都知道想循迹模块需要对数据进行处理。而如何进行偏差量化又是一个问题。在此我推荐使用excl表格这样能够非常直观的对数据处理。 2我们有几路循迹就需要写几格一个16进制数据之后方便编程最后是我们偏差量化值2进制那一格是为了方便转换成16进制而写。 3美化表格 4将表格填充 5然后自己填写自己设定的偏差量化值并且将传感器有反应的地方用蓝色填充这样有利于阅读。 将偏差量化编程出来 大部分人写的垃圾代码 1用Excel将传感器的数值偏差量化出来了但是如何编程了想必很多同学使用下面这种非常低效方法进行偏差量化。 char deviation; //存储偏差量化值 if(two_status_sensor.track_bit1 1) deviation -11; if(two_status_sensor.track_bit1 1 two_status_sensor.track_bit2) deviation -10; if(two_status_sensor.track_bit1 1) deviation -9; //...2这种方法编写起来非常麻烦而且不方便阅读可以说写的相当的垃圾 利用联合体管控标志位 1为了提高代码的观赏性同时方便我们进行调试。我认为我们可以使用联合体的方法优化代码。这样之后我们能够发现对于偏差量化的值就能够进行非常好的管控。 /*--- 利用共用体优化偏差量化 ---*/ typedef union //利用共用体优化偏差量化 {Bit_field sensor_value;uint16_t state; }_two_status_sensor; /*--- 访问变量 ---*/ char deviation; //存储偏差量化值的当前值 _two_status_sensor two_status_sensor; //定义用于记录传感器的值 two_status_sensor.sensor_value.track_bit1 readpin(1); //使用你当前的MCU读取引脚电平函数 //... 省略读取传感器的值过程switch(two_status_sensor.state 0x0FFF)//偏差量化因为是12路循迹所以只要低12位 {case 0x0001:deviation-11;break; //000000000001bcase 0x0003:deviation-10;break; //000000000011b//... 省略其他偏差量化过程default://其它特殊情况单独判断{//...} }利用带参宏进行标志位判断 1但是这个还能不能再次进行优化呢肯定可以我们知道这个2值联合体中有一些是用于循迹有些是用于遥控器有些是用于触摸芯片的。为了提高代码的可阅读性。我们是不是可以用几个带参宏来进行定义呢 /*--- 利用带参宏进行标志位判断 ---*/ #define track_state(x) x 0x0FFF #define IRDS_state(x) x 0x1000 #define Touch_state(x) x 0x2000利用?:和条件编译对提高代码对硬件的适配程度 1我们有没有发现一个问题上面循迹代码检测到黑线是1。那么肯定有人会说了假如我硬件上检测到黑线是低电平怎么办呢 2为了提高代码对硬件的适配能力于是我认为可以使用条件编译。 3因为不同的MCU读取电平返回的不一定是0和1有可能读取到低电平是0读取到高电平是一个其他的非0值例如5。所以为了防止1bit存储不下导致溢出问题。我们可以使用?:来处理。 /*--- 提高代码对硬件的适配能力 ---*/ #define track_active_level 1 //高电平有效写1低电平有效写0 #if track_active_level two_status_sensor.sensor_value.track_bit1 readpin(1)!0?0x01:0x00; //... 其他11个同理 #else two_status_sensor.sensor_value.track_bit1 readpin(1)0?0x01:0x00; //... 其他11个同理 #endif进行错误判断保护硬件提高硬件的容错率 1看到上面的代码肯定有骚年觉得已经很好了。但是我们想想如果循迹最终的结果返回的数据不是预期数据怎么办例如小车跑出去了。 2为了防止这种异常情况保护硬件我们可以加一个标志位worse存储错误次数。如果次数超标就强制停车。 3因为小车循迹可能只是刚好偏离路线一点点或者是硬件突然有点小问题所以我们还可以建立一个标志位deviation_backup存储偏差量化值的以往值。让小车保持上一次的状态运行提高硬件容错率。 /*--- 提高代码对硬件的适配能力 ---*/ #define track_active_level 1 //高电平有效写1低电平有效写0 #if track_active_level two_status_sensor.sensor_value.track_bit1 readpin(1)!0?0x01:0x00; //... 其他11个同理 #else two_status_sensor.sensor_value.track_bit1 readpin(1)0?0x01:0x00; //... 其他11个同理 #endif /*--- 利用带参宏进行标志位判断 ---*/ #define track_state(x) x 0x0FFF #define IRDS_state(x) x 0x1000 #define Touch_state(x) x 0x2000 /*--- 利用共用体优化偏差量化 ---*/ typedef union //利用共用体优化偏差量化 {Bit_field sensor_value;uint16_t state; }_two_status_sensor; /*--- 访问变量 ---*/ char deviation; //存储偏差量化值的当前值 char deviation_backup,worse;//存储偏差量化值的以往值循迹错误次数 _two_status_sensor two_status_sensor; //定义用于记录传感器的值 two_status_sensor.sensor_value.track_bit1 readpin(1); //使用你当前的MCU读取引脚电平函数 //... 省略读取传感器的值过程switch(track_state(two_status_sensor.state))//偏差量化因为是12路循迹所以只要低12位 {case 0x0001:deviation-11;worse/2;break; //000000000001bcase 0x0003:deviation-10;worse/2;break; //000000000011b//... 省略其他偏差量化过程default://其它特殊情况单独判断{deviationdeviation_backup;//如果是异常情况就保持上一个状态worse;} } if(worse 10) //如果多次循迹错误说明出现问题了为了保护硬件强制停车 {//停车 }
http://www.huolong8.cn/news/46799/

相关文章:

  • 浙江网站建设 seowordpress4.1.12 漏洞
  • 网站建设大作业厦门微信网站建
  • 郑州网站seo多少钱seo培训中心
  • linux做网站网络课堂网站建设京icp备
  • 做国外网站青岛外贸网站运营哪家好
  • 用文件传输协议登录网站中小型网站建设怎么样
  • 国外做设备网站wordpress 做的官网
  • 如何在vps上建设网站vs建设网站
  • o2o苗木网站建设百度网址入口
  • 高职图书馆网站建设大赛买虚机送网站建设
  • 网站建设百度搜不到网站建设代理
  • 南京网站排名公司梧州吧
  • 苏州电信网站备案工程与建设
  • 企业网站建设案例有哪些公司深圳物流
  • 关键词排名怎么做上首页建设网站的步骤seo
  • 免费查企业电话网站那些开店的网站是自己做的吗
  • 建设营销型网站公司做国外的众筹网站有哪些
  • 网站建设销售工作怎么样网站上面的内容里面放照片怎么做的
  • ppt做视频模板下载网站有哪些内容中国工信部网站备案
  • 家庭网络组网方案网站优化建设工作总结范文
  • 怎么看网站是用什么系统做的公司核名在哪个网站
  • 佛山优化网站公司汉服网页设计素材
  • 建设厅网站的无法打印宜宾网站建设北斗网络
  • 三明住房和城乡建设部网站帮客户做网站 没签合同咋办
  • 长沙网站建设多少钱如何选择深圳网站建设
  • 自己做网站要会什么常德网
  • 网站更换服务器 备案网站支付端口
  • 企业 网站备案wordpress文字黑提
  • 建设网站网站设计企业信息平台
  • 网站的性质和主办者陵水县建设局网站