国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

如何讀懂別人的代碼(上)

發布時間:2017-12-12 15:01    發布者:chunfen26341612
關鍵詞: 代碼 , ALTERA , XILINX , VERLIOG
對于IT相關從業人員來說,看別人代碼是必不可少的磨難。在學習階段,我們經常需要從書上看別人的代碼以吸取寶貴經驗,這是相當枯燥無趣的過程,也時常無法領會作者的意圖。在實際工作中,不可避免的出現需要接手做到一半的項目或是團隊合作的項目,這時候就必須看以前的工程師的代碼。如果說看書上的代碼用痛苦來形容的話,那么這種情況時遇到代碼不夠規范或者設計不合理,簡直就是苦不堪言。還有一些神一般的選手,設計者在編寫代碼時的“靈機一動”,其結果只有他自己和上帝才看得懂。這些代碼能看得你覺得生不如死,甚至開始懷疑人生:到底是代碼寫得混亂or我水平不行?!你以為這是最痛苦的嗎?NO!還有一種情況足以令你看得生不如死,甚至開始懷疑人生。那就是遇到運行不正常的代碼,對問題排查錯誤花的時間和精力還不如重新寫一遍,這時你的內心完全是崩潰的!
有一件事非常無奈,我們不可能要求別人的代碼都非常規范。所以,正確的學習方法和思維方式尤為重要。怎樣看他人代碼才是正確的方式?看代碼之前應該做些什么準備工作?看代碼用正向思維還是逆向思維?如何判斷代碼中哪些地方是否值得借鑒?由此,掌握到一種通用的去看懂別人代碼的技巧顯得非常重要。下面我們就來談談這方面。
我們知道,而實現功能可能有很多種方法,所以不同的人寫出的代碼不相同。通過看代碼去知道它要實現的是什么功能是一件很困難的事情。有些初學者會想到采取仿真一下、看電路圖、流程圖、時序圖、注釋等等方法,都是不可取的,通過這些你還是無法知道它的功能,以及有沒有錯誤。
那么正確的方法是什么呢?我們采取一種可稱之為“反推法”或是“逆向法”的方式,這個問題就迎刃而解了。要知道,代碼的目的是實現功能。無論你用那種代碼,有一點完全相同的就是“實現功能”這個最終結果。了解到這一點,我們就可以通過結果(功能)去反推過程(代碼),代碼的思路、流程、用途就抽絲剝繭清晰的顯露出來。好的,下面我們舉個實例來說明怎么通過反推法有步驟的去看懂別人的代碼。
代碼1。
如果我們按照自上而下的順序去看這個代碼,通過代碼的過程去看實現的功能會是很困難的事,甚至看不明白它要實現的是什么功能。Ok,我們現在從功能看起,這個代碼要實現的是“幀率采樣計算”這個功能,可以理解為圖片每秒顯示多少幀數。
1. 從代碼中我們可以看出,CMOS_FPS_DATA這個信號是我們所要求的信號(一秒內的幀數率);
2. CMOS_FPS_DATA<= fps_data >>1在一段時間內保持不變,才是我們所要的結果;
3. 從CMOS_FPS_DATA<= fps_data >>1中可以看出,CMOS_FPS_DATA是通過fps_data 這個信號來實現;
4. fps_data這個信號是怎么來的?反推到fps_data <= 0和fps_data<= fps_data + 1'b1這兩個信號。fps_data復位為零,在else if(Frame_valid)條件下加1;因此fps_data為幀數率標志信號;
5. 從CMOS_FPS_DATA<= fps_data >>1中可以看出是通過<= fps_data>>1右移一位,也就是說除以2得到這個值的;
6. 為什么要fps_data除以2來得到這個值?于是反推到if(delay_2s == 0)這個條件。
現在作者的意圖就非常清晰了。滿足幀數率的情況下不斷+1,到2秒時間時根據統計結果除以2,由此得到1秒時間的幀數。到此為止,我們已經可以非常容易的看懂這個代碼了。
通過反推法我們也能比較容易的去看代碼是否有錯誤。首先我們去知道代碼需要實現的功能,通過反推法得知是通過什么方法實現的,進而仿真時定位其目標,去看該代碼是否完成了功能。如果沒有完成功能,那么代碼就有誤。
對于學習者來說,反推法的意義還不僅在此。在本例中,這個設計思路完全滿足功能要求。這時,我們應該擴展思考,本例是通過2秒來實現功能,為什么要用2秒?是否可以直接通過1秒,或是3秒,或是其他方案來實現呢?各種方法的優缺點在哪里?通過反推法得知作者實現項目的方法并思考,這種方法正確還是錯誤?如果是錯誤或者這種方法不太好,那么我們如何避免?如果是優秀的代碼,我們如何借鑒并能舉一反三地運用到其他項目中去?本例只是選取項目中的一個小的節點,對于看整個項目的代碼來說可以運用反推法嗎?敬請關注下一節:《如何看懂別人的代碼(下)》。

本文地址:http://www.qingdxww.cn/thread-520838-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 無線充電基礎知識及應用培訓教程
  • Chiptorials——如何使用ATECC608 TrustFLEX實現公鑰輪換
  • Chiptorials ——使用ATECC608 TrustFLEX實現基本非對稱身份驗證
  • FPGA設計流程培訓教程
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文japanese在线播放 | 91啦视频在线 | 亚洲综合影院 | 亚洲综合色秘密影院秘密影院 | 四虎黄色影视 | 日韩精品午夜视频一区二区三区 | 欧美精品久久久亚洲 | 亚洲an天堂an在线观看 | 天天做日日做 | 女人18毛片a级毛片一区二区 | 欧美日韩不卡视频一区二区三区 | 黄色成人影视 | 两个人在线观看视频www | 国产69精品久久久久99不卡 | 日韩精品中文字幕一区三区 | 一区二区三区www | 四虎性 | www.四虎在线观看 | 亚洲欧美成人综合久久久 | 欧美xxxxb| 成年美女黄网站色大免费视频 | 成人国产一区二区 | 成年人黄色免费网站 | 国产成人永久在线播放 | 天天干天天操天天添 | 欧美日韩成人 | 视频国产精品 | 魏璎珞电视剧免费观看 | 大陆一级毛片国语对白 | 国产精品视频一区二区噜噜 | 女人l8毛片a级18女人水真多 | 精彩视频一区二区三区 | 两个人的免费视频 | 日本三级精品 | 国产日产韩产麻豆1区 | 亚洲视频欧美视频 | 在线精品日韩一区二区三区 | 日干夜干天天干 | 中文在线最新版天堂 | 亚洲区一二三四区2021 | 亚洲第一区视频 |