第144章 年前
1月12日。
實驗室裡張明遠在跑數據,周承宇在調算法,其他人各忙各的。
林東沒打擾他們,走進自己的辦公室,關上門,打開電腦。
屏幕上是他昨天寫的係統框架。
Liu內核裁剪了一半,驅動適配寫了大半,進程管理寫了一小半,內存管理剛開頭。
內核裁剪剩下的部分,是電源管理和中斷控製。
這兩塊不能砍,但可以精簡。
他把不必要的中斷源去掉,把電源狀態機簡化成三個模式一運行、待機、
關機。代碼量不大,但邏輯繞。
他寫了兩小時,編譯,跑起來,沒報錯。然後繼續。
驅動適配還剩音頻和傳感器。
音頻驅動他熟,傳感器驅動麻煩一點,要調2C總線,要配寄存器地址。
他翻著數據手冊,一行一行寫,寫完一個測一個。測到第三個的時候,12C通信死活不通。
他查了半小時,發現是地址寫錯了一手冊上寫的是068,實際應該是069。
改過來,通了。
他靠在椅背上,暗罵了一聲。
這種低級錯誤,不該犯。
但一個人寫係統,沒人幫他看,沒人幫他測,錯了隻能自己找。他揉了揉眼睛,繼續。
1月15日,內核裁剪完成,跑起來了。
屏幕上跳出幾行啟動信息,最後一行是「Kernel alive」(內核已啟動)。
驅動適配還剩最後一個一觸控螢幕。
更多小說內容請訪問o o p . t w
這是最關鍵的,周承宇的算法等著用。
他把數據手冊翻到中斷那章,開始寫。
觸控螢幕驅動分三塊:I2C通信、中斷處理、坐標上報。
12C通信他寫好了,直接復用。中斷處理要配GPI0,要寫中斷服務函數。坐標上報要轉成屏幕坐標,要濾波去抖。
他寫了兩小時,編譯,燒進去,屏幕沒反應。
查1og,12C通信正常,中斷沒觸發。
他翻數據手冊,翻到引腳定義那頁,發現中斷引腳配錯了。
改過來,重新編譯,燒進去。手指按上去,屏幕上跳出一串坐標。
通了。
繼續。
1月20日,驅動適配寫完,硬體能認了。
屏幕亮了,觸控能點了,電池能充了,天線有信號了。
他把手機主板接上去,屏幕上跳出東方科技的1©g0。那個小小的太陽,邊緣一圈亮邊,在暗色背景上微微發光。
繼續寫。
進程管理。
多任務調度、優先級、中斷處理一這部分最複雜,也最核心。他寫得很慢,每一行都要想清楚。不是不會,是不能錯。錯了後麵全崩。
他先寫任務控製塊。
一個結構體,存任務D、優先級、棧指針、狀態。寫完,編譯,沒問題。再寫任務調度器。雙向鏈表,按優先級插入,每次調度取第一個。
寫了兩小時,編譯,跑起來,沒問題。再寫任務切換。保存當前任務上下文,恢復下一個任務上下文。這部分要寫彙編,他不太熟,寫寫停停,翻了好幾遍參考手冊。
寫到第三天,任務切換終於通了。
他開了三個測試程序同時跑,CU調度正常,沒死機,沒崩潰。
他靠在椅背上,揉了揉眼晴。
1月25日了。
還有內存管理。這是最後一塊。
寫完,係統就能開機了。
寫完,手機就能跑了。
但內存管理也是最難的一塊一內存分配、回收、碎片整理、虛擬地址映射一個人寫,至少還要兩周。
他咬了咬牙,繼續。
先寫物理內存分配器。
位圖管理,每頁4KB,總內存256MB,位圖大小8KB。
寫了一個小時,編譯,跑起來,沒問題。
。繞最分部這一換轉址地、錄目頁、表頁。射映存內擬虛寫再
。錯報沒,來起跑,譯編,時小兩了寫他
。了通,跑再,來過改。題問齊對址地是現發,時小兩了查。崩是還,跑再,碼代化始初上補。化始初沒表頁是現發,g01查。崩就序程試測跑一但
。氣口一出長,上背椅在靠他
。了機開能統係,半大了寫理管存內,日72月1
。來起跑沒麵桌,了來出ogoI,了亮幕屏
。跑在存內,跑在度調務任,跑在動驅,跑在核內。了活統係但。寫沒還
。久很了看,息信機開的上幕屏著盯他
。了快
。了點一差就
。點兩午下,間時眼一了看他
。始開點三,議會次一後最前年
。來起站,器輯編掉關,碼代存保他
。人了滿坐室議會,點三午下
。桌一了圍,人個十。豪鄭、叔財、梅王、輝國李、筱丁、嶼程、川程、雯曉蘇、宇承周、遠明張
」。度進下一報塊模各,會次一後最前年「:圈一了掃,位主在坐東林
。口開先遠明張
」。離距有還標目終最離但,點一好標目前年比。機死沒天十了跑續連,度5.93熱發,Am893耗功板主「:據數串一了念,開翻本記筆把他
」。天03跑,83熱發,053耗功一標目後年。跑續繼「:頭點東林
。來下記,頭點遠明張
」一題問出果如。停能不間中,跑續連天03,總林「:頭起抬,下一了停上紙在尖筆,候時的寫他
」。間時有還們我「,說東林」。決解就題問出「
。了問再沒,頭點了點遠明張
」。成達標目前年。秒毫8.11遲延控觸「:鏡眼推了推宇承周
」。秒毫01後年「
1。點一了高時平比率頻的鏡眼推但,麼什說多沒他。說宇承周」。好「