2013年6月17日 星期一

測試插入程式碼

讀取記憶體程式

void memread()
{
 int *p, i;
 p = (int *)0xcccccccc; //指向0xcccccccc位址
 while(1){
  i = *p; //一直讀取0xcccccccc位址的內容
 }
}

設定記憶體

在某工程中,要求設定一個絕對位址為0xaaaa的整數型變數的值為0x1111。 編譯器是一個純粹的ANSI編譯器。寫程式碼去完成這一任務。 這一問題測試你是否知道為了存取一絕對位址把一個整數型強製轉型 (typecast) 為一指標是合法的。這一問題的實作模式隨著個人風格不同而不同。典型的類似程式碼如下︰
void setmem()
{
    int *ptr;
    ptr = (int *)0xaaaa;
    *ptr = 0x1111;
}
 一個較常用的方法是︰
void setmem()
{
    *(int * const)(0xaaaa) = 0x1111;
}



定義一個最大值的巨集
#define MAX(A,B) ((A>B)?A:B)

call by value 和call by referece

void main()
{
 int x=10,y=20; 
 printf("x= %d,y= %d before swap(call by reference).\n",x,y);
 swap(&x,&y); 
 printf("x= %d,y= %d after  swap(call by reference).\n",x,y);
}

void swap_ref(int *px,int *py)
{
 int temp;
 temp=*px;
 *px=*py;
 *py=temp;
}

下列無法做swap
void main(){
 int i=10, j=20;
 printf("i= %d, j=%d before swap(call by value).\n",i,j);
 swap_val(i,j);
 printf("i= %d, j=%d after swap(call by value).\n",i,j);
 printf("MAX of A and B is %d",MAX(10,100));
}
>void swap_val(int i, int j)
{
 int temp;
 temp=i;
 i=j;
 j=temp;
}

2013年6月11日 星期二

電子廠工作職稱與職務內容簡敘述

每間公司的運作都是由老闆聘請一堆低不同部門的人員所組成, 以下就個人經驗和網路或書籍上得到的內容做簡單的整理, 是和電子產業工程職務做為分類

====產品相關====
PM(Product Manager)產品經理
    =>規劃產品規格, 產品佈局, 成本及市場評估, 決定出貨時間點
PJM(Project Manager)專案經理
    => 管理時程, 也要去追重要的里程碑日期.

====工程相關====
HW(Hardware) 硬體工程師
    =>選用物料, 電路設計, PCB佈局
FW(Firmware) 韌體工程師
    =>將板子MCU及控制晶片寫入開機程式, 使系統可以有功能
SW(Software)軟體工程師
    => 處理介面流程, UI功能
SA (System Application) 系統應用工程師
    => IC廠設計開發板, 要能驗證新IC的所有功能
ME(Machnicl)機構工程師
    => 設計外殼及內部PCB及線材的擺放
ID(Identical)外觀設計工程師
   => 提供吸引人的外觀圖,

====測試相關====
QA (Quality assurance)
    =>驗證產品基本功能及行為是否符合PM開出的規格
ETD (Electircal Test department)
    =>除了要測試基本功能外也要仿造客戶會接上的裝置來做測試
EMI (ElectroMagnetic Interference)電磁干擾
    =>打靜電槍看產品能不能承受且不能使產品受損, 也要在chamber內測試
        會不會有過高的頻率幅射的可能
Safty 安規
    => 產品內組裝及防護IC調查使用狀況

2013年6月2日 星期日

[轉]如何成為一位傑出的工程師(下)


九個工作策略
1. 閃亮的軌跡(Blazing trails), 2. 知道該問誰(Knowing who knows), 3. 主動的自我管理(Proactive self-management), 4. 掌握全局(Getting the big picture), 5. 正確地追隨(The right kind of followership), 6. 團隊合作(Teamwork as joint ownership of a project), 7. 小領導者的領導風格(Small-l leadership), 8. 精明(Street smarts) , 9. 呈現(Show and tell)

好了,如果你是一個希望能夠提高生產力,增加自己智慧資產的工程師。你該如何做才能讓別人覺得你表現傑出呢?在我們這個研究之前,這個答案並不存在。無論是在學校或是在職場中,沒有任何地方在教培養傑出表現的工作策略。大多數的人藉由試誤法來驗證自己的想法。然而,許多計術上極有競爭力的工程師因為在這個過程中犯了太多錯誤,使得他們的整體表現僅僅比平均稍高一些而已。例如,他們可能沒有採取主動積極的態度,或者是他們在對整個組織重要性不高的方面主動積極。

我們發現,改變你做事的方法以及和別人共事的方法是有必要的。表現傑出的人事實上做事的方法和其他的人有相當的差異。他們將他們的工作策略融合到每天的表現中,產生一個前後一致的行為準則。任何一位具有足夠聰明和動機的工程師都可以獲得卓越表現的能力。

盡管如此,這種生產力的發揮並不是像大爆炸一樣的釋放出來。也沒有魔法藥丸或是神奇子彈可以讓你瞬間出類拔萃。而是藉由九個互相結合在一起的工作策略為基礎發展起來的。以下依照重要性排列,分別介紹這九種工作策略。

[轉]如何成為一位傑出的工程師(上)

如何成為一位傑出的工程師
How to be a Star Engineer
Robert E. Kelley, Carnegie Mellon University
(Robert E. Kelley, "How to be a star engineer," IEEE Spectrum, pp. 51-58, Oct. 1999.)
翻譯:馬仕毅

1985年,我被問了一些問題,從那時起,我就開始找尋真正的答案。提出問題的是貝爾實驗室(那是仍然是AT&T的一部分,現在屬於Lucent Technologies Inc.)。貝爾實驗室由全世界最好的大學中聘用了最優秀,最聰明的畢業生,然而,最後只有少數的人真正發揮他們的潛力而成為卓越的工程師。大部分的新進人員發展成可以穩定地完成任務的執行者,生產力並沒有特別突出,無法幫助貝爾實驗室在提昇AT&T的市場競爭力方面,做出顯著的貢獻。
貝爾實驗室想要知道的是:傑出的工程師和普通的工程師到底有什麼不同?傑出與否是由天份來決定?還是可以經由學習得來?可不可以設計一套提昇生產力的計畫來幫助表現平平的員工成為傑出的人才?
不只有公司才會尋求這些問題的答案。由1985年開始,幾乎所有我遇到的工程師都希望能夠增加自己的生產力。他們覺得自己也可以出類拔萃,他們不喜歡被同事的光芒所掩蓋。因此他們不斷地努力求進步。在現今的職場中,資源越來越少,工作的要求卻越來越多。全球化的競爭,購併風氣,企業裁員使得每位員工所承擔的責任越來越重大,而可利用的資源卻比以前少。環顧你的四周,和五年前比較,那位不是比以前工作更努力,工時更長?誰不是待完成的工作一堆,好多的電話和電子郵件還沒回?大家都在暗自擔心,如果不能再提高生產力,下一個被裁員的會不會是自己?誰不希望能夠重新掌握自己的生活-在工作和個人生活中取得一個更好的平衡點?每個人都聽過:更聰明地工作(work smarter),只是似乎沒人知道那是什麼意思。
我和我的同事從那時起就開始研究公司和個人生產力的問題。來自貝爾實驗室,3M,及惠普公司總計超過一千位工程師在這個研究的過程中,同時扮演了研究夥伴及受試者的角色。為了瞭解傑出工程師的秘密,我們使用了問卷調查,直接觀察,工作日記,焦點團隊(focusgroups),以及面試等方法來收集資料。並在適當的時候使用統計分析,內容分析(contentanalysis),及反覆的模型建立(iterative model building)等方法。
許多其他的公司也都參與了這個過程,包含了以電機工程師為重心的Analog Devices, Fore Systems, AirTouch,以及一些包含其他領域工程師的公司如Shell Oil, KimberlyClark等。這些公司採用了我們的生產力提昇計畫。有效地將表現普通的員工轉換成傑出的工程師,而在這個過程中,也讓我們對於產生傑出表現的關鍵因素有了更多的了解。