Re: [請益] 如何快速的看懂程式碼?
※ 引述《changeway (我愛洗澡不怕跌倒)》之銘言:
: ※ 引述《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
: 弄清楚現在程式的架構 之後拿到其他包的程式碼再看的時候也會上手許多
我也是網通廠的 看到認識的人回應,我也來回一下
我不是寫driver也不是寫firmware,我沒這麼偉大
我只是個寫AP的小雜碎
最近老闆叫我改driver,其實只是改個小功能,但是對外行人真的很困難
第一次改的時候,跟老闆兩個人改到深夜,只為了改兩顆小LED燈的閃爍模式
一開始就從整個網卡driver source code找到某支程式
喔! 就檔名就叫 wlan_led.c,一看才一千行不到,太簡單了
花了點時間看完整支程式,大概知道要怎麼改
改完後LED的行為還是一整個怪
看datasheet的資料要改register第17個bit,但原程式明明改的是21bit
該bit應該只有三個地方會改到,但是把那三個地方拿掉後,值還是會變
總之就是一整矛盾,連我老闆也沒輒
最後老闆拿出以前舊程式來比對,比對後發現幾乎一模一樣
但舊程式是work的,把lan_led.c改為舊檔後就好了
問題很明顯是發生在兩個檔案不一致的地方,那地方只是一行程式罷了
但問題是,明明知道問題是發生在這一行,但就是不知道為什麼要改成那樣
就好像已經給你看攻略本了,還沒辦法破關
明明正妹就已經在倒追你了,你還被發卡一樣
白痴啊~~~
不過還好,因為我只是一個小小系統廠的一個小小寫程式的小雜碎罷了
自信心完全不會受到打擊
整套系統包含規格、實作、業界慣例、問題與解法…都是許多人花許多時間發展的
初入門的人很難一窺全貌,就好像光看一小片拚圖是無法知道整套拚圖的圖案一樣
一定要等到拚到一定的數量才慢慢猜得出全貌
一開始擔心自已沒碰過硬体,怕自已看spec.一個頭兩個大都是多餘的
只要把眼前的事做好,只要你一直能夠撐得下去,一兩年後回過來看當時的自已
就會知道當時的擔心都是多餘的
n年前看過郭靖郭大俠學武的方式,他的師父們知道他笨,都跟他說你只要照著學就好
心法照著背,不懂沒關係,以後自然就懂了
招式照著練,很弱沒關係,以後自然就強了
我知道這只是小說,沒什麼說服力
不過想當初我只是一個企管系的畢業生,退伍後為了討生活自學Java
後來再自修作業系統,當時只看懂五成,慢慢的把計組、組語、C、C++看過學過
讀工數電子學電路學電磁學…(當然很多都沒看完或只看一點點)
當時看書也是看得一知半解的,但慢慢的心裡就有個底了
寫程式不就是:利用編譯器把所用的語言轉成CPU看的懂的碼來執行
再廣義一點:利用工具(編譯 直譯器)產生適當的程式碼(機器語言)給某個chip執行
再廣義一點:在一系統內,把某些資訊丟給某資訊處理機去處理,轉成有用的資訊
再廣義一點:利用已知的物理、數學原理,製造一些好用的工具,利用該工具達成目的
現在小的寫程式寫得可順的咧,從高階到低階都還過得去
之前老闆花了幾萬塊派我去上driver課程,想開始凹我寫driver
所以我寫寫AP、解解bug應該還過的去吧,我還是企管系的咧
時間花在哪裡,成就就在哪裡,如此而已
會來做這一行的人都不會是什麼天才,但多少都肯下點工夫
填填register誰不會,看看spec誰不會
register要怎麼填一定會有文件,spec一定也是人看得懂的語言
事出必有因,只要遵著因就能找到果
萬一spec是外星人寫的怎麼辦?萬一填register時沒文件看怎麼辦?
沒足夠的資源,天才來解也一樣啦,賭神?你還真當他是神!
再說到敝公司某位測試部們的同事,電子+資工背景
知道本人非本科系在做RD大受激勵,也想轉當寫程式的工程師
問題是他對自已太沒信心了,C看完改看C++,看完後又從頭看C,重覆一直看
就是不敢跟老闆表示想轉換工作內容
(敝公司RD QA都是同一個老闆管的,老闆也希望QA能轉RD,畢竟找外面的RD太貴了)
C怎麼看就只有那二百頁,C++他說不定都看得比我熟了
他只要開始寫程式→發現問題→google問題→找不到解答很沮喪
慢慢地變成寫程式→發現問題→google問題→找到解法有成就感
不出一年,絕對夠格當個稱職的RD (應該說是稱職的台灣RD)
想要速成,就只能靠天份
但在這行混的人,大都不是速成,而是慢慢累積過來的
協定、規格、工具、多如牛毛,懂得愈多的人就顯的愈強
有誰聽過別人說某人對某協定很有天份的嗎?隔壁的Eric是高手,因為他對這晶片的
規格很有天份?
硬体不會,不會先學電子學嗎?
電子學不會,不會先看電路學嗎?
電路不會,不會先學工數嗎?
工數不會,不會先學微積分嗎?
……
再怎麼不濟,從四則運算學起總行了吧
平常要多累積啊,不要想學硬体才發現要從微積分開始學起
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.216.41
推
10/25 03:57, , 1F
10/25 03:57, 1F
推
10/25 08:26, , 2F
10/25 08:26, 2F
推
10/25 08:56, , 3F
10/25 08:56, 3F
推
10/25 13:23, , 4F
10/25 13:23, 4F
推
10/25 13:34, , 5F
10/25 13:34, 5F
推
10/25 19:04, , 6F
10/25 19:04, 6F
→
10/25 19:05, , 7F
10/25 19:05, 7F
→
10/25 19:06, , 8F
10/25 19:06, 8F
→
10/25 19:06, , 9F
10/25 19:06, 9F
→
10/25 19:07, , 10F
10/25 19:07, 10F
→
10/25 19:08, , 11F
10/25 19:08, 11F
→
10/25 19:09, , 12F
10/25 19:09, 12F
→
10/25 19:10, , 13F
10/25 19:10, 13F
推
10/26 23:21, , 14F
10/26 23:21, 14F
→
10/26 23:23, , 15F
10/26 23:23, 15F
→
10/26 23:24, , 16F
10/26 23:24, 16F
→
10/26 23:24, , 17F
10/26 23:24, 17F
→
10/26 23:27, , 18F
10/26 23:27, 18F
推
10/26 23:36, , 19F
10/26 23:36, 19F
推
10/27 04:17, , 20F
10/27 04:17, 20F
推
10/27 04:20, , 21F
10/27 04:20, 21F
→
10/27 04:21, , 22F
10/27 04:21, 22F
→
10/27 04:22, , 23F
10/27 04:22, 23F
→
10/27 04:23, , 24F
10/27 04:23, 24F
→
10/27 04:24, , 25F
10/27 04:24, 25F
→
10/27 04:25, , 26F
10/27 04:25, 26F
→
10/27 04:26, , 27F
10/27 04:26, 27F
→
10/27 04:27, , 28F
10/27 04:27, 28F
→
10/27 04:28, , 29F
10/27 04:28, 29F
→
10/27 04:29, , 30F
10/27 04:29, 30F
→
10/27 04:30, , 31F
10/27 04:30, 31F
→
10/27 04:32, , 32F
10/27 04:32, 32F
→
10/27 04:33, , 33F
10/27 04:33, 33F
→
10/27 04:34, , 34F
10/27 04:34, 34F
推
11/01 16:12, , 35F
11/01 16:12, 35F
推
11/02 13:54, , 36F
11/02 13:54, 36F
討論串 (同標題文章)