作者changeway (我爱洗澡不怕跌倒)
看板Soft_Job
标题Re: [请益] 如何快速的看懂程式码?
时间Fri Oct 24 23:30:43 2008
※ 引述《gogogogoooo (...)》之铭言:
: 目前刚进去工作
: 主管便把他们Team开发成品到现在的source code丢给我看
: 大概数十万行吧 里头的注解非常的少 可以说是没有
: 主管叫我自行trace code 看懂整个程式码在干麻
: 常常看到一大堆变数 却完全不晓得意义为何
: 也不知道干麽用 觉得非常的挫折
: 那种感觉就有点像是你写了一个算式
: 例如说 3*2=6 看得懂式子
: 可是我却不晓得他实际在干麻
: 或许他的意义可能是有3个人 每个人有2颗苹果 总共有6颗苹果
: 公司是写韧体的 算是网通厂 最近又丢了一份datasheet给我看
: 因为程式码里头有些是写入Register的 要看datasheet才知道在干麽
: 以前也从来没碰过硬体 看了spec也是一个头两个大
我自己也是待网通厂的 想我刚开始的时候 也是很慌不知该如何看起
所以就找到main()从头开始看起 (好在那时只是8051的系统 程式不算多)
然後边看边做投影片画流程.. 把整包程式的区块分隔开来一个一个看
我建议你可以先把硬体板子拿来看 把上面的主要元件搞懂
(我那时缠着给我板子的硬体RD问阿.. 好在人家不嫌弃我菜 @@)
MCU是那个? 主要的IC又长怎样? Flash, eeprom, RAM...
或是有温度监控 RTC 还是PoE IC 这些板子上都可以看得到..
那为什麽会有这些元件在上面 当然有他的原因..
个别ic的功能拼起来就是这个产品要做的事...
可以去跟同事要或是google找到这些IC的datasheet
也不用一拿到就猛K 看前几页就好 就会告诉你这颗ic会有啥spec跟然後是做啥的
看不懂的spec wiki是你的好夥伴
弄懂硬体是做啥後 再来好好的看程式码..
就如你说的程式码里头有要写入Register的 要看datasheet才知道在干麽
那就切换到datasheet的视窗 找这个位址 这个开关的功能
有些IC的datasheet还会好心的告诉你这功能的目的为何
相关的register应该也是在上下页而已
软体叫硬体去做的事 硬体怎麽做 软体管不着 (这就是传说中的硬体限制)
但是要怎麽用程式码让IC去达成什麽样的功能 就是用这些register控制
例如一颗switch没有vlan tag/untag的功能 这颗IC就不能做802.1q VLAN的功能
简单讲就是给使用者一个介面(Web, console, SNMP...) 去控制这块板子
我到觉得你刚开始这这份工作 不用急着把全部程式码看懂在干嘛
看懂这份程式码的主架构跟运作的流程比较重要
因为之後会做的工作应该不外乎就是在这个架构跟流程中增修某个客户要的功能
或是做其他的案子 把这份程式套用到不同的IC
弄清楚现在程式的架构 之後拿到其他包的程式码再看的时候也会上手许多
: 有时候问了主管一些问题 跟我说这看天份的...
: 不晓得版上的人 刚遇到一份几乎没注解的code的时候
: 是怎样才可以比较快速的去看懂整个程式码在干麽?
: 还是说我应该去加强什麽样的背景 多看那一方面的书
--
我也是半菜不菜的工程师 一些些经验...
--
我四岁的时候把球丢进水沟,烦恼了半个下午,到底该不该去把球捡起来。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.137.248
1F:推 meltice:很多code进入点不是main 或是进入点根本不重要 10/24 23:59
2F:→ meltice:可能是个library 是个thread 是个interrupt触发的... 10/24 23:59
3F:推 MaxBiaggi:那m大有什麽好建议呢? 10/25 00:07
4F:→ meltice:我通常都是由log追code 还好linux有log可以看 10/25 00:10
5F:→ meltice:再来就用printf大法 看看成是到底跑去哪了 10/25 00:11
6F:推 OnlyRD:GDB 谢谢 10/25 01:02
7F:→ OnlyRD:不知道进入点 去看少少的几段ASM... 10/25 01:03
8F:推 Dungeon:呵呵~没错阿!很多进入点是int驱动的! 10/25 01:17