谈一谈,你如何工作(或者说如何高效解决卡壳的问题)
在工作中,最有挑战性,也是真正耗费我们精力和时间的问题,就是那些卡壳的问题。<div>它们就像一条水路上,偶尔跌荡起来的几个点——尽管从总体时间上来看,并不多,可能只占很小一部分比例,但是,它们却是耗费的关键.</div><div>犹如CPU的功耗关键在于被唤醒的时间。</div><div><br></div><div>讨论问题不说空话,我以自己这阵子工作中遇到的问题来谈吧。</div><div><br></div><div>我现在的工作,是一款TI 的达芬奇系列的多媒体处理器,OMAP3系列,同时进行的是两款兼容的芯片的开发板,我的是DM3730,同事那边是OMAP3530。我的意思是,我们基本当这两个是一回事。</div><div><br></div><div>然后,我的工作是负责几个驱动——当然了,不是底层驱动那种复杂的东西,我做不了也没轮到我做。</div><div><br></div><div>简单的说就是,利用LINUX系统提供的接口函数,写一些 诸如 串口传输协议 网络socket编程一类的 子程序,以备以后调用。</div><div><br></div><div>从顺序上来说,我正式转入写这些驱动,首先是 串口,然后是GPIO,接着是现在的 网络编程(socket编程)。</div><div><br></div><div>其中,串口做了两个星期,当然也因为那两个星期里各种杂事多,但是不可否认的是,这个子程序的确花费了我不少精力。</div><div>GPIO做了一个星期,但是始终是可以写1写0,然则却没能解决输入问题,至今搁浅,因为实在没辙,不想浪费时间,于是转而进入socket编程。</div><div>socket编程比较幸运的是,在一本书上找到一个很不错的例程,经过简单修改,它可以完成单次的CS连接,传输数据。</div><div><br></div><div>可是也有好些问题,目前卡住,大致卡了两天。</div><div><br></div><div><font class="Apple-style-span" size="4">由于这不是一个技术讨论贴,只是讨论 技术以外 的问题,应该说是从 另一个角度,比如说 策略,解决方式 上去考虑如何更好地应对这些 关键性的卡壳问题。</font></div><div><br></div><div>从串口开始,到socket,这些都是我完全没有接触的东西,每一个任务都是一个全新的东西,我总是从寻找例程,然后以它为基础,修改看懂程序这样一条线往下走。</div><div><font class="Apple-style-span" size="4">然后调试,遇到各种问题的时候,只能大量地百度搜索,以期找到解决方案。</font></div><div><font class="Apple-style-span" size="4">但是,很多时候并没有这么幸运。</font></div><div>比方说都是ARM+LINUX,网上的内容绝大多数都以什么S3C2410,6410等芯片为主,虽说有很多东西有共通之处,但是到了具体细节却完全两回事。</div><div>这一点在GPIO上记忆尤深。</div><div><br></div><div>似乎2410用的一套API完全是基于它的头文件来做。</div><div>我自然也想用自己开发板上自带的OMAP3的头文件来做,最惨的是,我连这个头文件都无法加载。</div><div>于是,我总是不断地翻百度,却不断地感叹,又是OMAP3,要么就是系统自带的GPIO.H。很可惜,这个我也没办法加载,直到后来,tuxygood教了我怎样重新编译一个新内核,并用加载驱动模块的方法,这个gpio.h终于让我用上了。(很可惜,那个问题始终没有解决。)</div><div><br></div><div>当然了,这种事情试多了,我就知道如何分析哪些东西值得仔细研读,那些东西可以直接忽略。</div><div>——我吸取的教训之一:跟只找到少得可怜的真正相关的资料相比,更糟糕的事情,你还找到了很多其实没多大关联的资料。因为你的思路会被它们搅黄,你的时间会被大量浪费。</div><div><br></div><div>这是浪费时间和白费精力的一种情形。</div><div><br></div><div><font class="Apple-style-span" size="4">另一种是,有时候,你找到的资料可能非常完整,甚至是 教科书 式的资料,假如你仔细阅读,你可能会很深入了解这一部分的东西,但是,你会花费很多很多时间——学一门课的时间就不少吧。</font></div><div><font class="Apple-style-span" size="4">但是,里面可能只有一点对你当前问题有用的(甚至更糟糕的时候,是一点都没有。)</font></div><div><font class="Apple-style-span" size="4">可是,并不是那么容易地通过一目十行你就可以搜索到它——如果是,那给我一笔钱买下当今世界所有最好最权威的LINUX ARM书籍就好了。</font></div><div><br></div><div><font class="Apple-style-span" size="4">在这种时候,你可能会陷入一个两难抉择:</font></div><div><font class="Apple-style-span" size="4">一方面,你很担心这种工作耗时巨大,甚至毫无所获,另一方面,你很清楚,这些问题如果你不系统性了解,而总是试图通过网络寻找相关问题相关解决办法,这是一个治标不治本,甚至说,经常连标都治不了。这个时候,很困难。</font></div><div><br></div><div>而更常见更糟糕的情况是:</div><div>在你精疲力尽,眼睛疼得不像话,无奈之际,你想,那我还是扫一扫这本 教科书 吧,至少也许我能确定里面没有我想知道的条目和知识点。</div><div>但是这种时候很明显,你的精神和专注程度已经变得很低下。</div><div>而你还只是打算 扫一下而已,在这种时候,你可能只是加重了自己的疲劳。</div><div><br></div><div>如果这么说,问题似乎变得很简单了,那我们就换一下做事的时间和顺序就好了嘛?!</div><div>我们先阅读那些教科书式的资料(他们有的真的很棒。很多是LINUX OS系统编写者手笔),把问题彻底搞明白了,系统性学习一番再去看百度不就好了嘛?</div><div><br></div><div>很可惜,有时候,也不见得有用。</div><div>比方说,在看socket编程时,我参考了网上一个 署名 龙飞 的人写的很详细的将近十几二十篇的socket详细教程,我敢说,网上能找到的,至少中文,不可能有比这更详细的了。</div><div>可是坦白说,不知道真的是我眼光不够,没找到自己需要的呢?还是,</div><div><font class="Apple-style-span" size="4">对的,有时候,写资料的人其实很厉害,只可惜他和你关注的地方不一样,于是,你在他的大海里搜索你想要的那根针,却一无所获,这不是他垃圾,也不是你没用心,而是你找错了地方。</font></div><div><font class="Apple-style-span" size="4">(问题是,谁能告诉我,或者说,我该怎么找到那个 对的地方呢?)</font></div><div><br></div><div><font class="Apple-style-span" size="4">这次就是这样,我很关注一个问题,如何 实现 非阻塞socket链接,很可惜,我没找到。</font></div><div><font class="Apple-style-span" size="4">我那本参考书上教的两种方法都不管用。</font></div><div><br></div><div>写着写着,不小心写成了流水帐,很晚了,再写也很难写出什么总结。</div><div>所以我决定就这么滴吧。</div><div>我会再次通读,把一些我认为关键的东东选大字号。</div><div><br></div><div>PS:这不是一篇诉苦贴,也不想博取同情或者听到一句什么 辛苦了 之类的话。(虽然我表示很感激,但那真的是没用的东西。)</div><div>我期待听到你们的看法和一些过来人的意见——我想,大家曾经都是这么走过来的吧?</div><div><br></div> 辛昕现在上班几个月了?我还记得你那个去看公司的帖子。其实做工程大家的经历都很相似,每一个工程都会面对一个新的挑战,做的都是新的东西,当磕磕碰碰把原型整出来了。回头再看,发现自己只是解决了所遇到的问题(更多是是勉强搞定了,还不能算解决),自己对这个工程所涉及的核心知识却是不甚了解。你有想法去主动的把问题所需要的知识学习一遍,但是实际上你确是没有时间的,会有新的工作赶着往前走。我觉的这样只是完成工作,只是一种职业技巧,但是对个人的事业规划未必有利。其实,也是跟你一样苦恼
我遇到困难时,就绕过去
不要发生正面碰撞,从后边慢慢解决。就好象吸一支烟,喝一口茶,然后想别的问题,但始终不放弃这个问题。:time:回复 沙发 wstt 的帖子
再过一个星期左右,可以拿第四个月工资了。回复 4楼 辛昕 的帖子
:tongue: 幸福啊 工作之中遇到问题 正常 。我的经验,遇到问题的时候,主要还是要依靠自己去思考。
遇到问题就baidu、找一些例程修改,我觉得不是一个很好的办法。
虽然短时间内 可以把项目进行下去,可对自己却并没有实质性的提高。
所以俺一般在遇到问题的时候 比如代码有问题跑不下去
就先分析是什么原因导致程序运行不了?
找不到原因的话 就查阅资料或者能用的代码 为什么别人的能用 我的代码跟别人的代码区别在哪儿?
找到问题的源头 下次才会避免再出同样的错误。
回复 板凳 ddllxxrr 的帖子
<div class='shownolgin' data-isdigest='no'>总是想先把问题摆平,以后再进一步分析,但是一到后面就没有时间再回头去看了</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>回复 6楼 tx_xy 的帖子
<div class='shownolgin' data-isdigest='no'>说到对比例程,那倒还真管用,只是经常做的东西,找不到直接可以对比的例程。这个悲剧。</div><script>showreplylogin();</script>
回复 7楼 wstt 的帖子
<div class='shownolgin' data-isdigest='no'>嗯,能管的问题不多</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>卡,真卡</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>现在网络资源成千上万 能够很快找到自己需要的东西 也是一种能力哈 。。。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>现在网络资源虽成千上万,但是有些方面的中文资料很少的,适合你的资料就少之更少啦。我也经常遇到这些问题,也试过像楼主那样,凡是遇到不懂的,先baidu、google下看看有没有跟自己遇到同样问题的网页,有的话就好办啦,参考人家对比自己慢慢查出问题的所在;如果找不到相应的资料时,就唯有逐步调试(例如用点灯来测试)。
恩,还有当我们要接触一个新的领域,而且这领域的网上资料很少的话,又想更快弄明白的话,可以找找厂商技术支持。(其实呢,我也不知为何,不到最后都不会去找技术支持的,总想自己去解决)
这是我自认为的解决办法,但是我发现自己解决问题好慢啊,求更好跟快的解决方法:pleased:</div><script>showreplylogin();</script>
回复 12楼 sai明 的帖子
<div class='shownolgin' data-isdigest='no'>有的技术支持真不敢恭维,有的技术支持则比较惨</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>比方说,买的板子是TI的,说找TI吧,可惜,有的操作其实跟LINUX有关系,那就没辙了,LINUX是免费的,人家不提供技术支持。
找卖开发板的,又实在郁闷的不行。
那货(做人的基本素质,我就不点它名子了)
那货真够挫的。
最早有过三次登门寻求技术支持,问的问题,没一个能解决,其实那不是很复杂的问题,后来还是我们自己搞定的。
当然了,其中有一个解决的启发性信息,倒是跟它们要的,那是他们以前解决的一个客户问题留下的,他们跟我提到这个事情,我抱着试试的想法,跟他们要回来的。
然后,他们做的板子也很挫。
最初的上网问题最后被证实就是硬件问题,而且修了几个月没修好。居然搪塞为 板子上没有用铁箱盖着,进灰尘了。
然后,经常电话骚扰,一天控制在3次以内,GPIO的问题,至今没答复,大致有半个月了。
所以,很多时候,有的技术支持实在不敢恭维。
GPIO的问题试过寻求过TI的亚洲代理,最初跟它要一个GPIO例程,因为以前玩430的时候,记得例程很多,可是这款处理器的自己找了一个下午没找着,才写邮件。
对方给了一个不知道是什么的GPIO例程,没用上。
后来再问细一些,对方说,这是LINUX系统的问题了,这个没给钱人家当然就不管了。
这叫做 有的技术支持比较惨,当然这回惨的不是别人,是我。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>:) :)</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'><P>跟楼主有同感啊。:time: </P></div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>老大好啊...到了7月小弟也要工作了...惶恐哪.....
:titter:</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>!!!!!!!!!!</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>汗,这样写,无法回答.......</div><script>showreplylogin();</script>
页:
[1]