2012/03/28

無線網路失敗?!!

這個方法或許有用…

症狀:

『如 果 您 已 啟 用 另 外 的 程 式 來 管 理 這 個 無 線 連 線 ,請 使 用 該 軟 體 。
如 果 您 要 Windows 設 定 這 個 無 線 連 線 , 請 啟 動 Wireless Zero Configuration (WZC) 服 務 。 如 須 有 關 啟 動 WZC 服 務 的 資 訊 , 請 參 閱 microsoft.com 網 站 上 Microsoft 知 識 庫 ( Knowledge Base ) 中 的 871122 文 章 。』

方法:

http://tw.myblog.yahoo.com/jw!RwduGricHxbS5wePJgNshA–/article?mid=570&sc=1

※ 如果您無法開啟Windows XP的WZC,請由「開始」→「控制台」→「系統管理工具」,開啟「服務」,選擇「Wireless Zero Configuration」,按『啟動服務』工具;啟動WZC之後的無線網路,在其連線內容即會多出一個「無線網路」的窗格。

2012/03/21

0歐姆電阻的作用 / 焊接IC / 拆IC方法

0歐姆電阻的作用

大概有以下幾個功能:
① 做為跳線使用。這樣既美觀,安裝也方便。
② 在數位和類比等混合電路中,往往要求兩個地分開,並且單點連接。我們可以用一個0歐的電阻來連接這兩個地,而不是直接連在一起。這樣做的好處就是,地線被分成了兩個網路,在大面積鋪銅等處理時,就會方便得多。附帶提示一下,這樣的場合,有時也會用電感或者磁珠等來連接。
③ 做保險絲用。由於PCB上走線的熔斷電流較大,如果發生短路過流等故障時,很難熔斷,可能會帶來更大的事故。由於0歐電阻電流承受能力比較弱(其實0歐電阻也是有一定的電阻的,只是很小而已),過流時就先將0歐電阻熔斷了,從而將電路斷開,防止了更大事故的發生。有時也會用一些阻值為零點幾或者幾歐的小電阻來做保險絲。不過不太推薦這樣來用,但有些廠商為了節約成本,就用此將就了。
④ 為調試預留的位置。可以根據需要,決定是否安裝,或者其他的值。有時也會用*來標注,表示由調試時決定。
⑤ 作為配置電路使用。這個作用跟跳線或者指撥開關類似,但是通過焊接固定上去的,這樣就避免了普通用戶隨意修改配置。通過安裝不同位置的電阻,就可以更改電路的功能或者設置位址。

參考:
http://bbs.pigoo.com/thread-8534-1-1.html

焊接IC

拆IC方法

2012/03/20

網路上看到分享文-硬體研發工程師

網路上看到分享文

http://www.wretch.cc/blog/Ezra12/11242727


在A公司剛滿一年了,雖然最後選擇了離開,但我決定還是要把所見所學整理一下。在裡面看到的其實不只是在工作上而已,也包括不同人家庭、婚姻、理財、保險等等等,我嘗試一點一點在下面列出:

部門內的大環境:

我進入的部門是多媒體研發部內的TV Tuner團隊,這個部門最主要是在做顯示卡,大概站營收的90%,其餘才是TV tuner card,也就是電視卡。部門內硬體工程師加一位硬體課長只有六位,軟體工程師加上一位軟體課長共有九位,光是由軟硬體員工人數大概就可以知道,其實作產品來說軟體的effort是比硬體要大的。部門內出的產品又以OEM為多,最大宗客戶為HP,小部份才是作OBM,也就是掛自己的牌子賣。助理一位。PM(專案管理師)共有六位,四位負責OBM,只有兩位負責OEM,老實說這個人數比和營收比差距甚大。每一位工程師與PM除了向自己的課長負責之外,包括課長和全部的員工都要向部門的資深經理負責,每個星期開一到兩次會議。

硬體工程師的工作:

硬體工程師的工作簡單的說就是把產品從沒有做到有,把產品效能調整到最好,並且使之順利量產。其中大略有幾個步驟:

a. PM與Sales訂出市場策略,規劃出新產品的時程表與大致的規格,例如這次EEEPC在出貨之前,我們就必須把搭配EEEPC的USB電視卡做出來。

b. PM與工程師課長評估可行性,訂出詳細的產品規格與上游廠商(也就是產品內主要要用的晶片是哪一家的),並畫押schedule。在這個階段一定下來,馬上就會通知客戶,讓客戶知道我們大約什麼時候可以有他們或許會需要的產品。

c. 軟硬體工程師由課長指定接案,開始畫電路圖。案子一般來說又有分兩種,一種是由上游晶片廠做出來的公版(reference design),這種設計其實上游廠商已經把系統廠(也就是把消費者終端產品做出來的廠商,A公司就是)想要做的產品做出來了,從電路圖到電路板模型,從驅動程式到韌體一應俱全,此時硬體工程師一顆一顆的將電路圖近乎照抄完畢,把裡面的元件全部換成公司有現成的料件,有時會因為需要而加入自己的備用電路或元件,但通常會預留確認過沒問題的電路。另一種比較有挑戰性,就是要作一個沒有人作過的晶片組合,此時就要把不同晶片廠商的FAE(負責協助下游廠商設計的工程師)link起來,讓他們先討論,了解大致的連接之後,硬體工程師開始畫電路,遇到問題就找FAE討論,整個電路圖確定之後進到下一個設計步驟。

d. 使用軟體開始Placement,也就是零件擺放,要把電路圖上的每一顆元件按照一些設計的原則在電路板上擺在最適當的位置,這些位置非常重要,因為會直接影響下一個階段的結果,也就是走線。走線又叫做layout,這個部份我們會和大陸的layout工程師合作,首先先寫出layout rule,也就是寫出每一個零件之間的連線你想要怎麼連接,要走直線還是斜線?線寬要走多少距離?哪些線之間必須要走出一定的長度關係等等等,幾乎是把整張版子的每一個細節走法都寫出來讓layout工程師知道,之後layout工程師開使使用軟體走線,當然這當中需要不斷反覆的修改與溝通,畢竟對方是大陸人方式和台灣人不盡相同。Placement和Layout這兩個步驟是硬體工程師最精髓的地方,下功夫也就要先下在這,因為不同的線路走法會造成不同的產品效能,工程師的目標就是把效能最大化,進公司的前兩個月我都在讀這方面的書與資料。

e. Layout在硬體工程師確認完全ok之後,layout工程師會開始出圖作業,將版子的規劃圖送給PCB(印刷電路板)廠商去沖洗,也就是把他做出來,依照PCB層數的不同,最慢兩週內會洗出來,當中PCB廠也會和工程師確認當中的製作細節。接下來工程師要把版子當中的所有零件都確認好事哪一顆,公司內有沒有現成的?需不需要和其他廠商的業務拿sample?因為當版子洗出來,就要聯所有料件一起送往工廠製作產品sample。因此要先將料件備好,當中就會產生很多機會要和其他廠商業務碰面的機會。

f. 當sample版子還沒生出來之前,軟體工程師就應該先把驅動程式寫出來,sample一打出來就要測試,看看哪裡有問題。於是艱辛的debug之路就開始了,硬體工程師要分辨問題出在哪裡,作各種實驗來找答案,當中廠商FAE是最好的夥伴,常會需要他們的驗證及協助來找到問題。只要是硬體問題工程師都要自己想辦法解決,可能需要換料或是從新走線(就會回到上一個步驟重來一遍),若是驅動程式的問題則請軟體工程師或是上游廠商來作修改,一直做到產品在各樣測試下全部通過為止,其中包含基本效能測試、品質測試、高電壓防治測試、溫度測試、電磁防治測試等等。另外根據此產品要賣的國家不同,必須要去過當地的法規,每一項測試雖然都有其他的部門幫忙測試,但全部需要由硬體工程師準備、送件、壓時間、以及解bug,每一個bug若與一開始的設計有相關,無法以換零件解決的話,就必須回到走線的步驟作修改,從新打sample。如果產品是客戶要求,硬體工程師會將此ok的sample送到客戶那裡,附上自己寫的產品spec及測試結果,等客戶什麼時後有興趣看一看我們的產品。這部份必定是與其他家代工廠競爭的,因為如HP這樣的大公司必會先向許多廠商提出產品需求,看看誰做的最快最好最便宜,但通常決定的關鍵都是公司之間的”關係”。

g. 以上步驟先完成一部分時,就要開始準備產品的小量試產。A公司的產品都在蘇州生產,一般來說新產品都會先作200pcs的試產,看看在生產此產品時會不會遇到問題,硬體工程師透過email與電話監督,如果出現生產問題,要盡量想辦法在一天內提出解決方案,若沒有辦法,就必須要跑蘇州一趟了。試產當中所有的料件都需要由硬體工程師來準備,工廠PE(工廠端的工程師)會提出哪些料件不足,或是交期太長等,全都透過硬體工程師和廠商交涉來解決。如果順利,一次的試產就把生產問題都克服掉,那就準備第一次量產。也有許多狀況是必須有的二次試產,甚至第三次試產,想當然每一次試產都是成本,怎樣將次數降到最低就是關鍵了。

h. 配合sales需求開始量產。此時和上一步驟一樣,但是開始有其他單位幫忙備料、追料,工廠若出問題也必須由工廠扛較大責任,因為照理說生產問題應該在試產時就解決完畢。但是通常出問題硬體工程師還是要立即解決,不然就跑大陸。量產出問題是很嚴重的,因為會牽涉出貨時間,延遲客戶會立即反應,甚至要求賠償。

以上每一個步驟都是需要壓時間的,時間內東西沒有生出來就算失職,所以大部分RD的壓力都來自於時間不足,或是忽然有客戶很臨時的需求,於是乎加班變成常態。通常案子量產的機會不大,我做的十個案子中有一個走到量產,四個走到試產,而有五個夭折,另有胎死腹中的不計其數。這其實和markting方面有很大的關係,如果策略下的準其實不需要這麼多時間的浪費。

怎樣叫做厲害的硬體工程師?
這一點我是從我課長身上看到的,他的確在專業上卓越,更在扮演課長的角色上表現精悍。整理一下稍微可以分為幾點:

1. 基本專業上:細心是硬體工程師的必備條件,他必須對線路設計原則非常了解且堅持,工作當中會碰到一大堆人想和你在專業上妥協,甚至自己畫出一些可用的外加電路,使產品設計更加完整。同時從設計的一開始,就能針對效能問題、工廠生產問題、以及其他測試問題做出預測,直接就把解決方式設計進去,有些部門甚至要求RD不能作第二版sample,一定要一版ok,用以減少成本。對於晶片設計有不錯的認知,能加強debug速度。再厲害一些的工程師會很快幫助廠商釐清問題真相。

2. 專案管理上:我最多同時身上有七個案子在跑,每週都需要報告進度,所以如果我一天作一個那週末還得加班。厲害的工程師在專案上懂得爭取時間,包括和PM爭取,壓縮廠商時間等。為了要回家睡覺,工程師必須知道案子孰重孰輕,雖然每個案子的關係人同時都開口向你要進度,壓時間,你也必須以產品的銷售潛力當作排先後次序的原則。同時知道什麼問題要接,什麼問題要推,推不是不解決,而是推給晶片廠商去解問題而不自己解。同時要知道各家廠商的料況,避免使用交期太長的料,或是在很早之前就必須通知廠商備料。

3. 廠商關係上:厲害的硬體工程師和上游廠商關係良好,因為業務關係許多上游廠商的業務會不斷與工程師接洽,尋找切入的機會。關係良好的廠商會把最好的市場機會給你,盡全力解你的bug,以及以最快的速度提供你必要的元件。因此你不會在長官面前因為案子delay而丟臉,反而會因快速把料況問題解決而得到親睞。最後更不用說,好的廠商關係也是未來轉職莫大的幫助。廠商有百百種,三節送禮的有,聊天打屁的也有,應酬喝酒的更不佔少數。

4. 創意與提案:厲害的硬體工程師能夠向長官提案,一起討論並且建議。同時會去看其他的產品,藉以提出較具創意性的專案,不過這一項在我們部門內幾乎看不見。

2012/03/16

耗電與待機時間(battery life)換算

幾個公式:

W=PT (energy=power * time)
P=IV (power=Electric_current * Voltage)
W=IVT

通常電池的energy有兩種單位mAh與Wh

ex:
27Wh 且 7.4V
=> 套用公式P=IV => 27W/7.4V=3648mA
=> 所以27Wh約等於3648mA

—————————————
另外一例子:

電池資訊: 12.13wh, 3.7V
而總電流由41mA降到26mA

1: 先算電池總共energy
[P = IV => 12130mW = I * 3.7, I = 3278mA]
3278mAh

2: 原本電流的電池life time
(3278/41) * 1h = 79.95h

3: 降低之後電流的電池life time
(3278/26) * 1h = 126h

4: 所以增加多少時間 battery life
126h – 79.95h = 46.05h

2012/03/12

extern變數但還是undefined的處理方式

我遇到過很多次這種狀況, 但是我都沒記下來導致每每都要犯這問題
狀況是這樣的, 如果今天我們寫了兩個檔案需要透過變數傳遞訊息
ex: file1.c , file2.c
file1裡面宣告global 變數 g_state, 以記錄裝置狀態
而且 file2也需要知道此global 變數 g_state
這樣的話就會在
file1.c

int g_state = 0;

file2.c

extern int g_state;

通常這樣就OK了!
但是有時候就是會發生以下undefined狀況:

ERROR: “g_state” [drivers/net/wireless/bcm4329/bcm4329.ko] undefined!
make[2]: *** [__modpost] Error 1
make[1]: *** [modules] Error 2
make: *** [sub-make] Error 2

我google了一下
找到這個資訊 http://bbs.chinaunix.net/thread-1918580-1-1.html

原來解法很容易:
file2.c多加一行EXPORT_SYMBOL_GPL就可以

extern int g_state;
EXPORT_SYMBOL_GPL(g_state);

2012/03/08

C語言巨集macro: 將enum的integer變數 印出變成string

我記得之前有個同事有透過程式碼的撰寫
將enum的數字變數,轉成string
但是原始碼我後來忘記了
現在努力回想, 也在網路找一些資料
試圖拼湊回來

方法一

好像可以了..

#define STATE_STRLENGTH 32#define stringiz(arg) #arg   //將數字前面加# 就是字串化/* enum states for the power meter */typedef enum {	STATE_UNSET = 0,	STATE_INIT,		STATE_OPEN,	STATE_PROBE,	STATE_EARLYRESUME,	STATE_EARLYSUSPEND,	STATE_RESUME,	STATE_SUSPEND,	STATE_REMOVE,	STATE_SHUTDOWN,	STATE_CLOSE,	STATE_EXIT,	STATE_MAX,} Numbers;char num_str[STATE_MAX][STATE_STRLENGTH] = {	stringiz(STATE_UNSET),	stringiz(STATE_INIT),	stringiz(STATE_OPEN),	stringiz(STATE_PROBE),	stringiz(STATE_EARLYRESUME),	stringiz(STATE_EARLYSUSPEND),	stringiz(STATE_RESUME),	stringiz(STATE_SUSPEND),	stringiz(STATE_REMOVE),	stringiz(STATE_SHUTDOWN),	stringiz(STATE_CLOSE),	stringiz(STATE_EXIT),};

要用的時候

void main(){ int val = xxx; printf("%d:%s\n", val, num_str[val]);}

另外一種寫法

透過switch case來處理文字
而不是初始時就設定好文字

void state_stringiz(void) {	int i;		for(i = STATE_UNSET; i < STATE_MAX; i++){		switch(i) {			case STATE_UNSET:				strcpy(num_str[i],stringiz(STATE_UNSET));				break;				case STATE_INIT:				strcpy(num_str[i],stringiz(STATE_INIT));				break;				case STATE_OPEN:				strcpy(num_str[i],stringiz(STATE_OPEN));				break;			case STATE_PROBE:				strcpy(num_str[i],stringiz(STATE_PROBE));				break;						case STATE_EARLYRESUME:				strcpy(num_str[i],stringiz(STATE_EARLYRESUME));				break;			case STATE_EARLYSUSPEND:				strcpy(num_str[i],stringiz(STATE_EARLYSUSPEND));				break;			case STATE_RESUME:				strcpy(num_str[i],stringiz(STATE_RESUME));				break;			case STATE_SUSPEND:				strcpy(num_str[i],stringiz(STATE_SUSPEND));				break;			case STATE_REMOVE:				strcpy(num_str[i],stringiz(STATE_REMOVE));				break;			case STATE_SHUTDOWN:				strcpy(num_str[i],stringiz(STATE_SHUTDOWN));				break;			case STATE_CLOSE:				strcpy(num_str[i],stringiz(STATE_CLOSE));				break;			case STATE_EXIT:				strcpy(num_str[i],stringiz(STATE_EXIT));				break;		    default:		      	break; //no match		}  }}

2012/03/03

微軟 Microsoft Windows/Bing/IE

微軟這段日子的沉潛準備, 從前人們認為微軟老舊的大體制不可能被修改
只能日漸凋零,讓apple與google一吋吋侵襲的Microsoft
似乎開始改變了


[網路搜尋]
首先我認為第一步的成功改變是Bing搜尋引擎的成立
microsoft自從迎娶yahoo失敗後,自己跳下海作搜尋引擎並且獲得不錯的市場成績

 


[手持系統]
再來就是換掉爛透的winCE的手持作業系統
有用過這款作業系統的手機, 就可以體會有多爛
介面設計使用電腦的思維
使用者經驗也不足
觸控又差
現在換成新的Windows Phone 7 應該好很多


[瀏覽器方面]
由於之前由IE壟斷市場, 所以也沒必要一直求進步
導致更新速度緩慢! 更讓IE6.5還占市場大宗, 因為Windows XP就是預載IE6.5
後來firefox和chrome以飛快的速度更新與創新
讓IE市占越來越低,一直到出IE9力挽狂瀾

2012/03/02

git 怎麼新增branch到server?

其實不難啦! 作個紀錄吧~
主要就是在local本地端先自己開創一個branch後, 再push到remote遠端的server上

步驟:

  1. git checkout –b newbranch origin/master  (這是在本地端create一個新的branch)
  2. git add 欲上傳的檔案
  3. git commit –a
  4. git push origin newbranch    (這是把在local端的新create branch推上server)

一般的作法都是local先做再推
因為大部分的server是bare的