這本書,光是標題,許多人連看也不會看。基本上這些工作都是作業系統做完了。
但寫程式,每天都在用,卻沒有什麼人想了解。
可是在嵌入式系統,這是基本功,基本到被人忽略。
所以Bee可以了解到這本書名為何要取名為程式設計師的自我修養。
書上的系統是以PC作業系統為平台。不過我本來沒有多大興趣,結果一看就停不下來。
Bee沒有想到有書如此詳細解析Loader,library,DLL的格式,還可以修改。
其中在Linux的資料特別詳細,也難怪嵌入式系統使用PC幾乎只用Linux。
因為Windows上什麼也不公開。而嵌入式的環境又是如此特別,使用Windows安裝常常有一堆問題。
加上近來Bee被人問MPI相關,可是Bee完全沒有接觸過MPI。
在看過DLL相關的段落時,Bee就了解MPI是如何實現了。
其實MPI的實現,可以說是將DLL及相關資料送到遠端電腦去執行。不過還要查證一下。
也就是有實現DLL的作業系統,MPI就可以很容易實現了。之前還在想是有多難的技術呢!
作業系統中有許多很細微的動作,而嵌入式系統工程師要從MCU進步到使用PC這些動作還是要有所理解。
這本書補償了這個空隙。
2010年5月10日 星期一
讀書:早上3小時,完成一天工作
這是買其他書本順便買的。和許多勵志書一樣。
不過Bee很懶,常常只有一小段時間有點用。
現在則是因為一句有用的話,讓Bee很受用。其實Bee還沒看完書,但取得有用的話已經夠用了。
這句話就是
"永遠要想備用計劃"。
Bee發現這句話有三個義意。
1.不要放棄原本目標。
2.即使不成功,也會有所進度。
3.若是意外失敗,也會停止情緒化,馬上收集狀態,想下一個動作。
有多太次,心想的計劃失敗了,到最後什麼也沒有。這一直是Bee心中最大的魔障。
不管看了多少勵志書,仍是無效。結果一句話,一個簡單的意念,就可以解決了。
每個人勵志方式不同,還是要好好了解自己,才能不斷進步。
不過Bee很懶,常常只有一小段時間有點用。
現在則是因為一句有用的話,讓Bee很受用。其實Bee還沒看完書,但取得有用的話已經夠用了。
這句話就是
"永遠要想備用計劃"。
Bee發現這句話有三個義意。
1.不要放棄原本目標。
2.即使不成功,也會有所進度。
3.若是意外失敗,也會停止情緒化,馬上收集狀態,想下一個動作。
有多太次,心想的計劃失敗了,到最後什麼也沒有。這一直是Bee心中最大的魔障。
不管看了多少勵志書,仍是無效。結果一句話,一個簡單的意念,就可以解決了。
每個人勵志方式不同,還是要好好了解自己,才能不斷進步。
2010年5月7日 星期五
uCOS-II win32-port官方版本解析
根據之前追蹤的經驗,重點在於如何利用Windows的Thread。
看過之後,發現果然是官方版本,在管理CtxSW更符合CPU運作,只不過更符合單核心的context switch。難怪可以避免多核心衝突。
使用的Hook比較少,大部分在OSStartHighRdy()內做,這個也是不錯的點,也是只有呼叫一次,同在cpu_c.c內。
它一樣使用三種thread:
context switch一個,動作就是排程管理。
timer中斷。
一般工作。
有一點和Bee想的一樣,要將win32的thread handle於在stack上才好管理。這點有做到,所以不會引發其他問題。
唯一不同的是一般工作的thread一不小心退回到win32 thread下,有做task delect動作,有做好的收尾。
MCU的話,會抓stack底部資料產生return,就不知到那裏去了。要是stack有放一些可以產生中斷的特定資料才可以防好。
對於Bee來說,欠缺的功能就是外部中斷支援,以及PC console界面管理了。
PC console界面,可以參考以前的PC.c進行移植。
外部中斷就要仿照Timer做了。
看過之後,發現果然是官方版本,在管理CtxSW更符合CPU運作,只不過更符合單核心的context switch。難怪可以避免多核心衝突。
使用的Hook比較少,大部分在OSStartHighRdy()內做,這個也是不錯的點,也是只有呼叫一次,同在cpu_c.c內。
它一樣使用三種thread:
context switch一個,動作就是排程管理。
timer中斷。
一般工作。
有一點和Bee想的一樣,要將win32的thread handle於在stack上才好管理。這點有做到,所以不會引發其他問題。
唯一不同的是一般工作的thread一不小心退回到win32 thread下,有做task delect動作,有做好的收尾。
MCU的話,會抓stack底部資料產生return,就不知到那裏去了。要是stack有放一些可以產生中斷的特定資料才可以防好。
對於Bee來說,欠缺的功能就是外部中斷支援,以及PC console界面管理了。
PC console界面,可以參考以前的PC.c進行移植。
外部中斷就要仿照Timer做了。
2010年5月4日 星期二
如何讀書2:多看幾次
學會速讀後,所會面臨的問題是,快速掃瞄後,到底有沒有吸收到?
其實這個問題後來才發現根本不同擔心。因為在開始理解掃瞄到的資訊後,就會"自然感覺到"是不是要再看一遍。
這裡的"自然感覺到"就是在掃瞄完後產生的,關於這點,就是和之前讀書是不一樣的。
因為以聲音為了解依據的時候,會自然以為意念的傳達是依聲音為準。
轉到速讀後,才發現並不是,也不完全是影像,可以說是一種多次元的意念。
以前在聲音為理解的時代,讀書資訊是以一維的方式進行輸入。
在速讀的狀況下,讀書資訊是以二維的方式進行輸入。
但因為速讀有一招"倒向看"就是一種段落掃瞄方式,進行輸入,完全不照順序性。
所以在腦中要以超維度的方式才可以解析二維輸入的速讀資訊。
解析後的資料比較像全書被分解成一堆以2D圖片索引的心得資料。
說是"心得"也不為過,因為大部分較為無義意的句子皆不存在了。
而有資料無法連貫的地方,就是沒看懂的地方。
當心思回想書的內容,很快就可以知道那裏沒有連貫,自然就會回去再看一次。
不過只讀一次,只能認知其表面含義。
反正速讀一本書的時間不長,基於表面含義再去看一次,就可以再看到更深的意境。
有時是書的問題,就算多看幾次也是不清楚。
這時的多看幾次就會變成是多看幾本不同人寫的相同主題的書。
不同的人表達不同,就可以找到和自己背景相符合的表達,這樣就可以看懂了。
其實這個問題後來才發現根本不同擔心。因為在開始理解掃瞄到的資訊後,就會"自然感覺到"是不是要再看一遍。
這裡的"自然感覺到"就是在掃瞄完後產生的,關於這點,就是和之前讀書是不一樣的。
因為以聲音為了解依據的時候,會自然以為意念的傳達是依聲音為準。
轉到速讀後,才發現並不是,也不完全是影像,可以說是一種多次元的意念。
以前在聲音為理解的時代,讀書資訊是以一維的方式進行輸入。
在速讀的狀況下,讀書資訊是以二維的方式進行輸入。
但因為速讀有一招"倒向看"就是一種段落掃瞄方式,進行輸入,完全不照順序性。
所以在腦中要以超維度的方式才可以解析二維輸入的速讀資訊。
解析後的資料比較像全書被分解成一堆以2D圖片索引的心得資料。
說是"心得"也不為過,因為大部分較為無義意的句子皆不存在了。
而有資料無法連貫的地方,就是沒看懂的地方。
當心思回想書的內容,很快就可以知道那裏沒有連貫,自然就會回去再看一次。
不過只讀一次,只能認知其表面含義。
反正速讀一本書的時間不長,基於表面含義再去看一次,就可以再看到更深的意境。
有時是書的問題,就算多看幾次也是不清楚。
這時的多看幾次就會變成是多看幾本不同人寫的相同主題的書。
不同的人表達不同,就可以找到和自己背景相符合的表達,這樣就可以看懂了。
2010年4月28日 星期三
uCOS-II Win32 Port解析及改善 -- 4
將中斷改為其他程式觸發:
將中斷改由外部程式控制,其中Timer改為外部程式觸發可以改為可以”停格”的作業系統模擬,可以觀察各中斷程式是否有執行異常,或是驗證程式。結果如下:
改進資料傳輸:
資料傳輸功能主要是可以使uCOS-II可以模擬在大量資料輸入狀況下,測試程式是否正常,可以應用在有通信的狀況下,或有輸出入資料的狀況下,看程式對於資料處理的情況。也可以增加除錯的報告,將程式運作的各種狀況報告,增加對程式的除錯。實行則以選擇跨行程通信的方式來做,選擇使用Pipe。因為Pipe具有以下特性:
1. 在Windows及Linux皆可以使用,具有平台轉移性。
2. 以檔案呼叫方式做為資料傳輸的方式,容易理解函式的用法。
因為檔案呼叫也會停止Thread,故Pipe實現在uC/OS-II中亦要一個獨立Task才不會干擾到其他的Task。結果如下:
可以發現兩支應用程式的資料為完全一樣,證明有寫到uC/OS Win32 Port。而且可以設定在Server程式關閉時,Client端亦可同時關閉。
加入此功能可以實現以軟體模擬外部環境對uC/OS-II做輸出入測試。
其他問題及改善提議:
在Windows上模擬uC/OS仍和DOS上執行的uC/OS有些行為不同。
1. random()行為不一樣:每一個Thread都有自己的random()的變數,和DOS不同是共用,所以不用保護也可以正常使用。但各Task的random()產出的數列完全相同,在DOS則完全不同。使得Win32 port模擬結果和DOS不同。
2. Mutex功能使用後當機,經查原始碼,發現也是因為hTaskThread[]沒有同步更新造成。
若是將Win 32A PI Thread Handle放在TCB中管理也許可以解決,但要重新做核心除錯。其主要構想為:
1. 利用沒有用到的Stack做為Thread Handle存放地方,就可以經由TCB管理。而Stack在實體CPU會用到,但也不會亂改,所以是安全的。
2. 影響到函式有OSSchedulThread()及OSTCBInitHook()。
3. 需要修改的變數有二個hTaskThread[]及taskSuspended[]。
4. taskSuspended[]是管理task是可以執行或是不可執行flag。
hTaskThread[]是Win32API的Thread Handle。此二個變數要改用Stack做為存放的地方,故資料結構要做變動。
5. OSTCBInitHook()是向Win32API申請Thread Handle的函式,要改成Handle改存到pTcb->OSTCBStkPtr,taskSuspended[]標記亦一併存入。
6. OSSchedulThread()則要改成取用Handle時改由OSTCBCur->OSTCBStkPtr中取出Win32API Thread Handle,taskSuspended[]標記亦一併取出。
實作驗證是成功的。
後記:在要發表這篇時,將舊程式拿出來Run時,結果是當機的。原因在於Bee換了一台雙核電腦。也就是原先在單核心上是可以正常執行。
也因這個原因,改善的部分延至今日發表。
因為已經找到當機原因,且有在研究解決方法了。
所以就再次發表。後面會加上新的版本。
2010年4月13日 星期二
ION跑Folding@Home
反正Bee的ION小桌機從不關機,那就加跑一些公益軟體。
一般掛機只會用到CPU,所以Bee想利用一下GPU。
ION架Folding@Home無法簡單完成。
有幾件事要做的。
1.調整ION的記憶體大小,至可以使用GPU運算。
原設定為256MB,改到最大值512MB。這是因為256MB為顯示工作用,多的才是GPU運算用。
不調應是發不動。
2.修改FAH的參數。
因為認不出顯示卡型號,這點Bee是認為ION就是回傳"ION"導致無法比對出是那一等級的顯示卡。
所以就加入強制開啟的參數。 -forcegpu nvidia_g80
設定好了終於可以跑了。
結果幾乎呈現當機的Lag。
原來和電驢相衝。調整啟動順序,先開好其他程式,最後再開Folding@Home。這樣就行了。
還是有點Lag,但好多了。
看一下溫度,比平常多了十度。但電力好像沒有多多少。
跑一段時間,待螢幕進入休眠,馬上啟動GPU-Z則可以測到只多五度。
這應該算是用最少的電力跑Folding@Home了。
經過一天的測試,發現可能跑不及格。也就是可能三天算不完。最後還是放棄了。
一般掛機只會用到CPU,所以Bee想利用一下GPU。
ION架Folding@Home無法簡單完成。
有幾件事要做的。
1.調整ION的記憶體大小,至可以使用GPU運算。
原設定為256MB,改到最大值512MB。這是因為256MB為顯示工作用,多的才是GPU運算用。
不調應是發不動。
2.修改FAH的參數。
因為認不出顯示卡型號,這點Bee是認為ION就是回傳"ION"導致無法比對出是那一等級的顯示卡。
所以就加入強制開啟的參數。 -forcegpu nvidia_g80
設定好了終於可以跑了。
結果幾乎呈現當機的Lag。
原來和電驢相衝。調整啟動順序,先開好其他程式,最後再開Folding@Home。這樣就行了。
還是有點Lag,但好多了。
看一下溫度,比平常多了十度。但電力好像沒有多多少。
跑一段時間,待螢幕進入休眠,馬上啟動GPU-Z則可以測到只多五度。
這應該算是用最少的電力跑Folding@Home了。
經過一天的測試,發現可能跑不及格。也就是可能三天算不完。最後還是放棄了。
2010年4月6日 星期二
JAVA霸主地位不再
Bee常去看TIOBE的電腦語言排行。以了解電腦的走向。
這個月(2010/4)出現了令人意外的排名:JAVA不再是第一了。
而第一改為C語言。
不管如何,前二大語言的佔有率仍是沒有其他語言可以威脅的。
只是長期來看,用JAVA吃飯肯定比C來得難。
這個月(2010/4)出現了令人意外的排名:JAVA不再是第一了。
而第一改為C語言。
不管如何,前二大語言的佔有率仍是沒有其他語言可以威脅的。
只是長期來看,用JAVA吃飯肯定比C來得難。
訂閱:
文章 (Atom)