C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

亚星游戏官网-yaxin222  上士

注册:2007-8-19
发表于 2009-7-30 21:38:08 |显示全部楼层
         最近,接受了项目组的一项安排,给俺们的终端产品利用USB多映射出一个端口。心中惶惶然~USB技术这辈子还没有接触过,它的技术基础,实现方式等更是一点不懂!但任务在此,还是要赶鸭子上架啦。努力的复制粘贴外加一些小小的创新工作,修改了18个分散的源代码文件之后,代码工作初步完成。调试还算顺利,编译通过。
         狂喜!接下来用PC端串口工具做测试,问题就来了:PC端映射出来的端口只能接受广播来的消息,但不能主动发送消息!先怀疑自己的代码N遍,看了又看,想了又想,没有发现问题。利用usb通信抓取工具,也没有发现任何可疑之处(可能有,不过,我对USB协议一知半解都谈不上)。接近三天极度郁闷的调试工作,让人崩溃,但始终没有找到原因。更变态的是,这个端口偶尔还能正常发送命令。
         Bug必有因,代码里自有其逻辑。只是看你能不能敏锐发现那个藏匿极深能够让你脱离苦海的陷阱一个原程序中的初始化代码无意中闯入了视野:
  for (iface = FIRST_IFACE;
       iface < MAX_IFACE_NUM;
       iface++)
  {
    if (iface == BREW_NOTIFICATION_IFACE)
      break;
         ……………………
}
     原来代码中,BREW_NOTIFICATION_IFACE接口是在一个枚举中最后的,但这个接口又不需要初始化,所以当初开发的人员冒昧的选择了break,退出循环。而我加的接口在这个接口之后,所以我的接口完全没有初始化。也就没有注册上USB端口的中断。所以造成了产品终端不能检测外来的任何输入!!!
S*H*I*T,在心里尽量文明的狂骂了代码提供商N遍,把break改成了continue,重新编译,下载,验证。一切OK!!!从地狱升入天堂!

这个故事告诉大家:在循环里,要优先考虑continue,慎用break,除非有绝对的理由

谨以此文,纪念一个break抹杀掉的我的三天青春!!!!!
已有 1 人评分经验 家园分 收起 理由
shenhqi + 10 + 30 + 10

总评分: 经验 + 10  家园分 + 30  + 10   查看全部评分

举报本楼

本帖有 8 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-9-24 15:17 , Processed in 0.141598 second(s), 17 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图