谈一谈,你如何工作(或者说如何高效解决卡壳的问题)
[复制链接]
在工作中,最有挑战性,也是真正耗费我们精力和时间的问题,就是那些卡壳的问题。它们就像一条水路上,偶尔跌荡起来的几个点——尽管从总体时间上来看,并不多,可能只占很小一部分比例,但是,它们却是耗费的关键. 犹如CPU的功耗关键在于被唤醒的时间。
讨论问题不说空话,我以自己这阵子工作中遇到的问题来谈吧。
我现在的工作,是一款TI 的达芬奇系列的多媒体处理器,OMAP3系列,同时进行的是两款兼容的芯片的开发板,我的是DM3730,同事那边是OMAP3530。我的意思是,我们基本当这两个是一回事。
然后,我的工作是负责几个驱动——当然了,不是底层驱动那种复杂的东西,我做不了也没轮到我做。
简单的说就是,利用LINUX系统提供的接口函数,写一些 诸如 串口传输协议 网络socket编程一类的 子程序,以备以后调用。
从顺序上来说,我正式转入写这些驱动,首先是 串口,然后是GPIO,接着是现在的 网络编程(socket编程)。
其中,串口做了两个星期,当然也因为那两个星期里各种杂事多,但是不可否认的是,这个子程序的确花费了我不少精力。 GPIO做了一个星期,但是始终是可以写1写0,然则却没能解决输入问题,至今搁浅,因为实在没辙,不想浪费时间,于是转而进入socket编程。 socket编程比较幸运的是,在一本书上找到一个很不错的例程,经过简单修改,它可以完成单次的CS连接,传输数据。
可是也有好些问题,目前卡住,大致卡了两天。
由于这不是一个技术讨论贴,只是讨论 技术以外 的问题,应该说是从 另一个角度,比如说 策略,解决方式 上去考虑如何更好地应对这些 关键性的卡壳问题。
从串口开始,到socket,这些都是我完全没有接触的东西,每一个任务都是一个全新的东西,我总是从寻找例程,然后以它为基础,修改看懂程序这样一条线往下走。 然后调试,遇到各种问题的时候,只能大量地百度搜索,以期找到解决方案。 但是,很多时候并没有这么幸运。 比方说都是ARM+LINUX,网上的内容绝大多数都以什么S3C2410,6410等芯片为主,虽说有很多东西有共通之处,但是到了具体细节却完全两回事。 这一点在GPIO上记忆尤深。
似乎2410用的一套API完全是基于它的头文件来做。 我自然也想用自己开发板上自带的OMAP3的头文件来做,最惨的是,我连这个头文件都无法加载。 于是,我总是不断地翻百度,却不断地感叹,又是OMAP3,要么就是系统自带的GPIO.H。很可惜,这个我也没办法加载,直到后来,tuxygood教了我怎样重新编译一个新内核,并用加载驱动模块的方法,这个gpio.h终于让我用上了。(很可惜,那个问题始终没有解决。)
当然了,这种事情试多了,我就知道如何分析哪些东西值得仔细研读,那些东西可以直接忽略。 ——我吸取的教训之一:跟只找到少得可怜的真正相关的资料相比,更糟糕的事情,你还找到了很多其实没多大关联的资料。因为你的思路会被它们搅黄,你的时间会被大量浪费。
这是浪费时间和白费精力的一种情形。
另一种是,有时候,你找到的资料可能非常完整,甚至是 教科书 式的资料,假如你仔细阅读,你可能会很深入了解这一部分的东西,但是,你会花费很多很多时间——学一门课的时间就不少吧。 但是,里面可能只有一点对你当前问题有用的(甚至更糟糕的时候,是一点都没有。) 可是,并不是那么容易地通过一目十行你就可以搜索到它——如果是,那给我一笔钱买下当今世界所有最好最权威的LINUX ARM书籍就好了。
在这种时候,你可能会陷入一个两难抉择: 一方面,你很担心这种工作耗时巨大,甚至毫无所获,另一方面,你很清楚,这些问题如果你不系统性了解,而总是试图通过网络寻找相关问题相关解决办法,这是一个治标不治本,甚至说,经常连标都治不了。这个时候,很困难。
而更常见更糟糕的情况是: 在你精疲力尽,眼睛疼得不像话,无奈之际,你想,那我还是扫一扫这本 教科书 吧,至少也许我能确定里面没有我想知道的条目和知识点。 但是这种时候很明显,你的精神和专注程度已经变得很低下。 而你还只是打算 扫一下而已,在这种时候,你可能只是加重了自己的疲劳。
如果这么说,问题似乎变得很简单了,那我们就换一下做事的时间和顺序就好了嘛?! 我们先阅读那些教科书式的资料(他们有的真的很棒。很多是LINUX OS系统编写者手笔),把问题彻底搞明白了,系统性学习一番再去看百度不就好了嘛?
很可惜,有时候,也不见得有用。 比方说,在看socket编程时,我参考了网上一个 署名 龙飞 的人写的很详细的将近十几二十篇的socket详细教程,我敢说,网上能找到的,至少中文,不可能有比这更详细的了。 可是坦白说,不知道真的是我眼光不够,没找到自己需要的呢?还是, 对的,有时候,写资料的人其实很厉害,只可惜他和你关注的地方不一样,于是,你在他的大海里搜索你想要的那根针,却一无所获,这不是他垃圾,也不是你没用心,而是你找错了地方。 (问题是,谁能告诉我,或者说,我该怎么找到那个 对的地方呢?)
这次就是这样,我很关注一个问题,如何 实现 非阻塞socket链接,很可惜,我没找到。 我那本参考书上教的两种方法都不管用。
写着写着,不小心写成了流水帐,很晚了,再写也很难写出什么总结。 所以我决定就这么滴吧。 我会再次通读,把一些我认为关键的东东选大字号。
PS:这不是一篇诉苦贴,也不想博取同情或者听到一句什么 辛苦了 之类的话。(虽然我表示很感激,但那真的是没用的东西。) 我期待听到你们的看法和一些过来人的意见——我想,大家曾经都是这么走过来的吧?
|