推 walker2009:感覺牽涉很廣@@ OS 計組 組語 compiler 很多很多.. 03/27 03:38
→ walker2009:我也是囫圇吞棗XD 需要有厲害的大大整個有系統的說明 03/27 03:39
→ walker2009:好期待這篇的回應(興奮) 感覺可以學到很多 03/27 03:40
推 wa120:懂原理就好摟 原理是拿來應用的 也不需要到底層 03/27 04:37
→ wa120:像TCP/IP就懂它的handshaking camera就懂它的RGB raw data 03/27 04:39
→ wa120:同樣是Call function,有些人就是可以最佳化 03/27 04:40
→ wa120:差別就是在對原理了不了解 03/27 04:41
推 costbook:修過計算機組織、微處理機實習、系統程式...就知道了 03/27 04:44
→ costbook:或者是弄個嵌入式板子來玩 03/27 04:45
推 wa120:當程式會寫 以前教觀念的書本重看一次真的會超有收獲 03/27 04:46
→ operationcow:去看看 Minix 的程式碼, 自己寫一個作業系統就知道了 03/27 04:57
→ operationcow:以你問的 drawline 為例, CPU 有兩種 mode, text 03/27 05:01
→ operationcow:mode 和 graphic mode, 傳統的 command line, CPU 是 03/27 05:01
→ operationcow:在 text mode, 單位是一個字, 要如何寫就是用 bios 03/27 05:02
→ operationcow:提供的中斷, 現今的 GUI 則是 CPU 處於 graphic mode 03/27 05:03
→ operationcow:寫的方式應是 memory mapped IO 03/27 05:04
→ operationcow:單位則是 pixel 03/27 05:04
→ operationcow:如你所說的, 如果是 standard library cout, 當你是 03/27 05:05
→ operationcow:在 command line 的系統, standard library 最終call 03/27 05:05
→ operationcow:OS 的 API, OS 的 API 則是用 bios 的中斷 03/27 05:06
→ operationcow:如果是在 GUI, 那你輸出的會被轉成像 pixel 的型式 03/27 05:07
→ operationcow:才被畫上螢幕 03/27 05:07
→ operationcow:至於你說的網路, 則牽扯到 network stack, 但是最接 03/27 05:08
→ operationcow:近底層的部分, 還是不外乎剛剛說得那兩種方式 03/27 05:09
→ operationcow:有錯請指正 <(_ _)> 03/27 05:11
推 yauhh:你轉烤麵包機的旋鈕時,不必忙著思考線路上的原理. 03/27 06:15
推 sunneo:弄嵌入式系統 trace kernel就可以猜出些端倪 03/27 06:25
→ sunneo:從之前看到ip 113到公司 時間過好快...@_@ 03/27 06:27
→ sunneo:不過再早期確實會碰到kernel api不足支援的問題 03/27 06:28
推 VictorTom:推y大, 轉烤麵包機的旋鈕時,不必忙著思考線路上的原理 03/27 07:53
→ VictorTom:就算是寫所謂比較底層的東西, 也不見得需要去弄懂每一個 03/27 07:54
→ VictorTom:API/LIB怎麼實作的, 不同vendor不一定實作方式也不同. 03/27 07:55
→ VictorTom:真正有需要的公司, 公司自有一套機制train你給你需要研 03/27 07:55
→ VictorTom:讀的資訊(不管是底層的SW或HW怎麼做). 軟硬體包山包海, 03/27 07:56
→ VictorTom:你想弄懂所有東西, 那就卯起來讀書卯起來trace code吧. 03/27 07:57
→ VictorTom:最後, 寫AP也沒有這麼淺, 或者說寫程式也沒有這麼容易. 03/27 07:58
推 sawang:單純寫AP,也有一堆演算法資料結構可以研究啊 XDD 03/27 10:23
→ sawang:要花的時間也是很多低~ 03/27 10:24
推 Bencrie:呃 ... text跟graphics mode是顯示卡那邊的事吧 @@a 03/27 10:53
→ Bencrie:x86的工作模式是有 real mode跟protected mode XD 03/27 10:54
→ operationcow:遇到行家了, good. 那他是怎麼切換的阿, 我只知道有 03/27 10:56
→ operationcow:兩個 mode 可供切換, 不過不知道他實際怎麼切換的? 03/27 10:57
→ operationcow:看了 EFI 也沒找到相關的程式碼 03/27 10:58
推 Bencrie:API就是要給人家call的,有興趣的東西再深入研究就好了 03/27 10:59
推 clanguage:你要看real mode 切 protected mode 就看 x86 programmi 03/27 11:41
→ clanguage:g guide 就好了 去圖書館也找的到專書 03/27 11:41
→ clanguage:填暫存器填一填 設定分頁和分段 03/27 11:42
→ operationcow:real mode 跟 protected mode 我知道, 這蠻基本的 03/27 12:31
→ operationcow:我是想請問 text mode 和 graphic mode 之間的切換 03/27 12:31
→ QQ29:大家推文的專有名詞我...都沒概念= = 我不是說寫AP很容易@@ 03/27 13:03
→ QQ29:只是覺得寫AP會學到的東西可能有限 技術方面能碰到的機會很少 03/27 13:03
→ QQ29:主要是我從來沒有會過底層 沒有這觀念 有點希望知道這方面的 03/27 13:05
→ QQ29:概觀 不然我只會call有的東西 沒的話我就不知道怎下手了 03/27 13:05
推 costbook:有時候有穩定可靠的開發工具比自己去從頭寫還重要 03/27 14:34
推 wa120:我會從他們的API去推測他們的記憶體管理策略 03/27 14:53
→ wa120:倒是覺得沒有Call function那麼簡單 03/27 14:54
→ wa120:因為在很多情況 資料量大的時候很容易overflow 03/27 14:55
→ QQ29:我也想要有推敲她怎麼寫的能力 但是我就一直不懂.... 03/27 14:58
→ QQ29:某一個環節..... 03/27 14:59
→ fragileness:有興趣的話可以改找driver相關的工作啊XD 03/27 15:01
推 hilorrk:那你要不要學量子力學來徹底瞭解電子是啥東西啊...XD 03/27 20:59
推 dk3208:我覺得寫ap可以學到一些架構面的東西,不一定就比driver容易 03/27 21:34
→ dk3208:你看到那些能夠reuse的component內部也可能只是多call了一 03/27 21:36
→ dk3208:層api 03/27 21:36
→ dk3208:能夠設計這些component也是很有學問的...XD 03/27 21:37
推 StubbornLin:做出那些層次本來就是要讓你不懂底層也能用 03/27 22:00
→ StubbornLin:只是你如果懂底層比較知道如何去最佳化 03/27 22:00
→ StubbornLin:在上層做東西不代表就沒問題要解決 03/27 22:01
→ StubbornLin:因為你依賴的是下面的那些東西,當那些有問題時 03/27 22:01
→ StubbornLin:你可能就得想辦法去讀下面的東西,做出workaround來 03/27 22:02
> -------------------------------------------------------------------------- <
作者: tylpk (tylpk) 看板: C_and_CPP
標題: Re: [問題] 程式是如何建構出來的???
時間: Sat Mar 27 21:51:39 2010
: 我真的很佩服寫底層的
: 寫driver阿 寫一些核心技術的人
: 感覺他們才是真正又會寫程式 又會開發新技術的人員...
: 請板友們 替我解解惑吧.....
如果以系統整合廠來說,就算是寫 driver,很多時候也是 call function。
舉例來說,假設我有一顆 IC 要透過 I2C 下參數給它,
你會發現其實那個 I2C 的函式也是人家做好的。
有興趣的話,可以 trace code,並對照 I2C 的運作原理,就會比較容易理解。
不過大部份的人應該都是沒興趣吧?
我倒覺得可以先拿簡單一點的例子來練習,比如說要設定 CPU 某一根 pin 腳,
大部份會再有一個 function 把設定暫存器的細節隱藏起來,
如果 trace code 看到一堆奇怪的 #define,去找到實際 mapping 的位址,
再對照 cpu spec 有關 gpio 的章節,便會有原來如此的感覺。
我覺得很多事情實際碰到會比較有感覺,會比看書有感覺多了。
(還在寫 AP 時,手頭約有三、四本嵌入式的書,當時只覺得好像是天書!)
: 自己覺得我再寫上層的東西 但是要是沒底層的人 我根本就無法寫出來
: 我覺得我已經變成 要寫程式 只要找不到API就不會寫了的情況...
: 是只有我有這種疑惑嗎 大家都對整個 os hw driver firmware 這些
: 都有基本的觀念嗎?? 我是都沒有才想潑版請教各位
正巧我也有寫過 AP!
拿我前前公司的一個例子來說好了,
客戶要測試做出一張 DVD 塞滿醫療影像專屬格式(DICOM DIR)的時間要多久?
很不巧的我們的程式跑了兩天都還沒結束!
後來在幾個重要地方插入時間,終於順利找到兇手,
原來問題是出在購買函式庫的 function 上,
但問題就來了,我們又不可能叫原廠改?
(很恐怖,不要問XD)
最後的解決方式就是自己 K 規格書,
搞清楚 binary 檔案的格式,
自己用二進位寫檔的方式解決。
所以囉,你說你不會寫,是因為還沒有遇到問題吧XD
不管如何,掌握判斷問題的能力與解決問題的能力是一定要有的,
這樣有問題時才會有個方向,
這必須仰賴自己的不斷進修。
當然不同程式會有不同需求的地方,
就從相關且自己有興趣的地方切入吧。
假設寫 browser,試著只用最簡單的 TCP API,自己去組 http 的 header,
重點是這件事做了會讓你覺得有趣並想繼續。
畢竟 Code 海茫茫,學海無涯呀。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.210.105
→ YesIam118:TCP是protocol吧 應該說用自己用socket兜出來 03/27 22:00
推 dk3208:推!!! 03/27 22:02
→ operationcow:http 是用 TCP 當作 transport layer, 他說用 TCP 03/27 23:05
→ operationcow:API 也不能算錯, 切入的角度不同而已 03/27 23:05
推 VictorTom:推:) 03/28 00:51