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

网站常见错误局域网网站怎么做

网站常见错误,局域网网站怎么做,北京高端网站建设宣传,做网站一般做多大的经济学家说过#xff0c;路边是不会有100元的#xff1b;但如果有#xff0c;你还是要捡起来。同理#xff0c;在貌似万物免费的网络时代#xff0c;你是很难找到有针对性的好资料#xff1b;但是如果有#xff0c;希望你能认真学习吸收。比如笔者今天写的这一篇一今天这… 经济学家说过路边是不会有100元的但如果有你还是要捡起来。同理在貌似万物免费的网络时代你是很难找到有针对性的好资料但是如果有希望你能认真学习吸收。比如笔者今天写的这一篇一今天这篇文章要分享两个案例第一个案例关于枚举第二个案例也是关于枚举。照旧例先来几句简单的照本宣科。C语言枚举类型用于针对某一类对象定义一个集合根据该类对象的实际意义将集合中的元素逐一列举出来然后用实际取值为整数(枚举值)的文本式变量描述这些元素。这些枚举值相当于一种助记符可以提供对某一类对象更加贴近实际的描述所以不仅能够增加程序的可读性还能帮助码农们分别并记忆它们。当然在具体的编程活动中枚举类型也会暂时把码农从枯燥的计算机世界解脱出来找回一点人间烟火的感觉。科普完毕大家可能开始纳闷了。既然从数学概念上来理解枚举定义了一个“集合”用整型取值来表示集合中的“元素”逻辑上如此清晰而且简单这还可能出什么问题你想平地里可以起惊雷阴沟里也会翻了船编程写出个bug来难道不是意料之外、情理之中的事情吗只不过我始终搞不清楚编程时到底一帆风顺无惊无喜是幸福的还是遇到问题百转千回更幸福说到幸福我不禁想起范伟的一段经典台词脑袋大脖子粗的范伟端着个大脸盘子无神的眼睛里透露着看破红尘的沧桑慢条斯理地回答“什么是幸福幸福就是我饿了看别人拿个肉包子那他就比我幸福我冷了看别人穿了一件厚棉袄他就比我幸福我想上茅房就一个坑你蹲那了你就比我幸福。”同样是简单的枚举你用时没碰到问题而我碰上了你说咱俩到底谁比谁幸福二道家有一句很玄妙的话天下本无事庸人自扰之坚定地秉持唯物主义的四有青年们对这句话当然是嗤之以鼻孔兼鼻毛的。你见或者不见事儿就在那里不来不去但是按照老庄的思想合着是我们自己没事找事了对此等断语笔者只能微微一笑很倾城接着苦笑很悲情了。因为我遇到的枚举问题就是自己瞎搞出来的。本来同事小周给我的代码里有这么两段代码void SendI2cAck(void){   SetSdaDir(IO_DIR_OUTPUT);   SetSdaLow();   ToogleScl();}void SendI2cNak(void){   SetSdaDir(IO_DIR_OUTPUT);   SetSdaHigh();   ToogleScl();}明眼人一眼就看出来了尽管每段代码都很简单完全没有必要改写但是由于这两段代码的重复度很高它们完全可以改写成一个带参量的函数。尤其对我们这种对代码清理和重构有着偏执型冲动的人来说让我们不重构简直比杀了我们还难受此时不改更待可时于是我三下五除二把代码改成了下面的样子voidi2c_ack(e_I2cAck ack){   SetSdaDir(IO_DIR_OUTPUT);   if(I2C_ACK ack){       SetSdaLow();   }else{       SetSdaHigh();    }   ToogleScl();}在这里笔者定义了一个枚举类型typedefenum{   I2C_ACK 0,   I2C_NAK 1}e_I2cAck;然后因为鬼才知道的原因笔者给出了如下函数声明也在不经意间埋下了一颗炸弹void i2c_ack(uint8_t ack);看到这里大咖们可能在捏着下巴上唏嘘的胡茬子会心一笑了但是小白们也许还是不知所以。尽管函数的声明误写成了i2c_ack(uint8_tack)但是它的定义i2c_ack(e_I2cAckack)还是对的在调用函数传递函数参量的过程中传进去的I2C_ACK难道不还是0I2C_NAK不还是1吧笔者也是这么想的当然刚开始的时候我根本没有发现把声明写错的“笔误”。不过埋下的炸弹终会暴雷。由于重构后的程序运行不正常我很快发现了声明和定义不一致但是so what我依然不得要领于是只好架上仿真器单步调试看看到底会发生什么。我追踪调试到调用i2c_ack的地方眼见着把I2C_ACK0传了进去到了函数里面后竟然没有执行if(I2C_ACK ack)这个分支。于是我试着添加了一个uint16_t型的临时变量将函数参量赋值给它。不看不知道一看吓一跳传递进来的参量竟然成了0x5A00。追踪到这里又查阅了相关资料后我似乎有些开窍了。尽管8位整型便可以涵盖这次枚举定义中的最大值但是枚举类型的尺寸是16位而非所想象的8位。这样一来如果函数声明中的参量是16位那么在参量传递时传递进来的枚举类型的I2C_ACK会被处理成16位整型的‘0’函数会按照‘0’分支进行正确的处理。但是由于函数声明中的参量是8位所以实际上传递进来的枚举类型的I2C_ACK只取了1个8位整型的‘0’进入函数内部后它又会被扩展成16位整型而函数内部的变量是局部变量地址空间都在stack里面它扩展时会采用相邻的高位地址来填充该16位整型的高8位。这样在传递0时数据低八位依然是0但是高八位就不一定了。本来不改程序还不会遇到这些问题看看是不是天下本无事庸人自扰之千百年来多少人苦苦思索到底是什么力量掌握着我们的命运让我们经历痛苦和欢乐现在我明白了生命不息折腾不止正是这种没事找事瞎折腾的力量主宰了我们的喜怒哀乐呀三笔者分享的第二个关于枚举类型的案例是更加便利地使用枚举类型进行数组索引的一种新用法不敢藏私与诸君共享之。如前所述枚举的一个重要作用是增加程序的可读性以助记符的形式帮助程序员记忆和理解代码。比如笔者在实现软件定时器时(见文章《如何用单个定时器统一地实现多种定时应用》)就曾经以枚举类型定义了软件定时器的ID或者说软件定时器的名称。为了让读者更加便于理解还是要花开两朵各表一枝叨咕叨咕软件定时器。一个嵌入式产品中会有很多定时逻辑最好也是最通用的处理方式便是设计一种结构体形式的软件定时器令一个软件定时器对应一种定时逻辑所有软件定时器构成一个结构体数组各种定时逻辑的实现时便是在结构体数组中的成员变量上进行处理。在这里以可读性较强的枚举类型定义软件定时器的ID枚举值根据各个定时应用的具体逻辑命名。比如说检测输入信号的周期性定时器INPUT_DETECT_PTMR喂看门狗的周期性定时器FEED_WATCHDOG_PTMR监测系统状态的周期性定时器SYS_MONITOR_PTMR蜂鸣器报警的多次定时器BEEPTWEET_TTMR总线busoff后恢复通信的单次定时器BUSOFF_TTMR等。高智商的程序猿们打眼一看就能从枚举值的命名上看出定时器背后的逻辑来枚举增强程序可读性的功能可见一斑。但是问题是您老人家看明白了单片机呢这么说吧我们在用Timer[INPUT_DETECT_PTMR]处理定时逻辑时怎么保证这个定时器节点就能具体对应到检测输入信号的周期性定时器智商在线的你肯定不会因为INPUT_DETECT_PTMR这个文本化的枚举写得如此得昭彰就想当然地认为单片机也能“心同此心”的。实际上如果你不做一些特殊的处理单片机肯定不知道Timer[INPUT_DETECT_PTMR]就可以表征检测输入信号的周期性定时器的。愿你三冬暖愿你春不寒愿你天黑有灯下雨有伞。程序猿想和单片机结下此等心心相映的缘需要做点编程工作主动手拉手线牵线。四显然INPUT_DETECT_PTMR此类软件定时器节点ID想在数组中充当下标使用下标和枚举之间要具有天然的一致性。所幸数组Timer[N]的下标范围是[0,N-1]间的正整数而整型取值正是枚举类型的天然属性。所以第一步是要保证定时器枚举也从0开始取值然后取值依次加一在[0,N-1]间一一占位。第二步在定时器数组的初始化阶段要用整数型下标进行一次for循环将各个软件定时器节点的ID初始化为对应的数组成员的下标即Timer[i].timer_id i。这里的i有三个作用一是for循环体中的循环变量二是数组成员下标三是赋值给定时器ID。在系统运行阶段引用某个软件定时器时以该软件定时器对应的枚举类型常量做为数组下标引用以该ID标识的软件定时器节点即用Timer[timer_id]直接寻址具体的软件定时器。这里有一个好处是避免了以整型变量为下标引用定时器时需要查找该定时器节点在软件定时器数组中对应的下标的繁琐而且提高了程序的可读性。其中妙处你品你仔细品扫码入群扫码添加管理员微信加入“电子产品世界”粉丝交流群↓↓↓↓点击查看更多新闻
http://www.yutouwan.com/news/434713/

相关文章:

  • 平台网站很难做住建部禾建设部是一个网站吗
  • 昆明市建设厅网站宿迁做网站的公司
  • 网站注册地址查询常州哪些网站公司做的好处
  • 网站怎么做端口映射企业品牌网站建设的关键事项
  • 网站优化建设工作总结范文装修计算器在线计算
  • 南通装修网站大全适合做网站背景音乐
  • 网站开发项目企划书网站开发软件d
  • 自驾游网站建设方案wordpress+标签消失
  • 广西和城乡建设厅网站湛江免费企业建站
  • 乐温州网站建设wordpress js代码插件下载
  • 五华网站建设网页制作与网站建设试题和答案
  • 官方网站建设条件成都哪家网站建设好
  • v9双语版网站怎么做哈尔滨网站制作网页
  • 深圳网站设计知名乐云seo想买手表在哪个网站买是正品
  • 泸州市住房和城乡建设厅官方网站非主流在线制作图片
  • 仿我喜欢网站源码免费wordpress 标签不对应
  • 只做衬衫的网站集团网站建设招标
  • 营销型网站建设是什么会员卡管理系统哪里买
  • 潍坊做网站维护费用网页制作基础教程课程标准
  • 收费下载网站cms如何制作公司网站和网页
  • 企业网站的建设网页设计学习教程
  • 静态展示网站多少钱做企业网站用什么cms好
  • 新光途网站建设网站备案 机构需要什么手续
  • 网站建设工程设计图人们常用的网页设计工具是
  • 建网站需要服务器吗asp网站导航怎么做
  • 深圳最简单的网站建设荥阳郑州网站建设
  • 网站优化就是搜索引擎优化做影视网站怎么挣钱
  • 科技文化网站建设方案合肥做企业网站
  • 网站产品图片尺寸网站大改版
  • 网站建设需要的人员如何做好一名网络销售