# 資訊科技產業專案設計課程作業 3
## [MTK (5G)無線區域網路(WLAN/Wi-Fi)軟/韌體工程師](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120190326000)
### 職缺說明
1. Wi-Fi 驅動程式/韌體開發設計及驗證
2. Wi-Fi 等無線晶片之跨層架構介面設計
3. 協助研發軟體新技術與新工具
4. 產品量產問題分析與解決
5. 無線網路(802.11) 演算法和系統效能探索
6. 無線網路新規格前期定義,架構設計及軟硬體分工
### 職缺需求
1. 碩士以上;電子電機相關、通訊/電信、資訊科學、資訊工程相關科系畢業為主
2. 熟悉嵌入式系統、C/C++ programming
3. 具嵌入式系統程式開發經驗
4. 具Linux/Unix 環境程式開發經驗
5. 具WLAN/Wi-Fi 802.11通訊協定、MAC/PHY/CoEx/LP、射頻相關經驗
### 自我評估
* 有碰過嵌入式系統,使用ARM Cortex-M7 的 stm32746G開發板進行簡單的嵌入式系統開發
* 接觸過簡單的 FreeRTOS
* 修過 Jserv 老師的 Linux 核心實作做過簡單的 Linux device driver , 且透過老師的 [vwifi](https://github.com/sysprog21/vwifi) 對於 cfg80211 mac80211 nl80211 有簡單的概念與想法
## [瑞昱 藍牙韌體設計工程師C1](https://recruit.realtek.com/zh/index.php?option=com_content&view=article&id=9900)
工作經驗 : 2 年
學歷要求 : 碩士
### 工作項目:
1. Bluetooth SoC Firmware Development.
2. FPGA/ASIC Verification.
3. Customer Support.
### 應徵條件:
1. 碩士以上;電機、電機與控制、資訊科學、自動控制、通訊工程、電信、資訊工程、電子相關科系畢業為主。
2. 具3年以上相關工作經驗者為佳。
3. 具2年以上嵌入式韌體開發經驗。
4. 有 RTOS 相關開發經驗。
5. 精通 ARM / MIPS assembly, C or C++ programming language。
6. 熟悉 USB、UART、SPI、I2C、PCM、I2S 界面至少 2 種以上。
7. 個性積極, 自我挑戰, 善協調, 有創造力。
8. 可能會出差協助客戶解決問題。
### 自我評估
1. 對於嵌入式系統的底層有所認識(Hardware Abstract Layer)
2. 熟悉非同步傳輸協定UART、SPI、I2C 的規格與介面
3. 熟悉 C 語言
## [Nvidia Enbedded Software Engineer](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Taiwan-Taipei/Embedded-Software-Engineer_JR1962146?locationHierarchy1=2fcb99c455831013ea52ed162d4932c0)
**What you’ll be doing:**
* Work directly in developing or integrating NVIDIA automotive or embedded software technology into various NVIDIA automotive or embedded platforms.
* Create and implement software features.
* Might work with customers to provide deep technical assistances.
* Assist customers to achieve fully optimized design with NVIDIA products.
* Provide partner feedbacks as to product features and software improvements
**What we need to see:**
* Experience in relevant domain.
* Good English language skills to work effectively with global teams.
* Full experience at Linux, QNX or Android.
* Excellent C skills.
* Experience working on embedded systems and ARM processor specific.
**Ways to stand out from the crowd:**
* Excellent debugging and problem solving skills.
* Self managing and ability to break down complex problems in to manageable tasks.
* Experience working in following areas is a plus: AutoSAR, device drivers, multimedia, graphics, camera software stack, image quality tuning (ISP tuning), OpenCL, OpenCV, CUDA, Deep Learning, and AI.
We are an equal opportunity employer and value diversity at our company. We do not discriminate on the basis of race, religion, color, national origin, sex, gender, gender expression, sexual orientation, age, marital status, veteran status, or disability status. We will ensure that individuals with disabilities are provided reasonable accommodation to participate in the job application or interview process, to perform essential job functions, and to receive other benefits and privileges of employment. Please contact us to request accommodation.
### 自我評估
除了上述的 Embedded system 的知識,我也對 deep learning AI 有接觸。
熟悉深度學習影像辨識、影像偵測與人體關鍵點重建,對於 OpenCV 的影像處理也有了解。
## 準備方向
1. 準備更多 Linux device driver 的 practice 經驗
2. 在嵌入式系統開發板上,試著透過 FreeRTOS 來建立 Task 操作功能的實作經驗
3. 了解其他 spec 比如網路的 802.11n , 藍芽的協定
## 相關面試題目
[心得 研替面試心得 (聯發科)](https://pttcareers.com/Tech_Job/1Nm0SaUb)
[心得 面試心得系列5 聯發科 MTK](https://www.ptt.cc/bbs/Tech_Job/M.1501843612.A.732.html)
[Nvidia 面試趣](https://interview.tw/c/Vemx?)
## 模擬面試
:smile: : interviewee
:confused: : interviewer
:confused: 您好,可以請您先自我介紹一下嗎?
:smile: 好的我的名字是 ... ,我有修習過嵌入式系統嵌入式系統方面我們使用 stm32 的開發板進行一些開發。Linux 核心實作方面,了解 Linux kernel 的實作並嘗試寫一個 linux device driver 並對kernel 進行效能分析 ...... ...。
:confused: 好的根據你的自我介紹,我想要問你在修習嵌入式系統的課程中,作業系統的必要性?
:smile: 若是我們的系統的任務比較多比較複雜的話會需要,假如功能簡單僅僅幾個 sensor 的話,其實用 polling 的方式反而簡單又快速。我們可以透過 Middle-ware : FreeRTOS 這個即時作業系統來進行任務的排程。排程的方式我們可以從 FreeRTOS 的規格裡得到 : 主要會採用 preemptive & time-slicing 的排程方式,並且透過設置 Interrupt 的方式基本上這個嵌入式系統就可以符合多數功能性。
:confused: 好的你剛剛有提到 Interrupt ,Interrupt 的流程又是怎麼樣呢?
:smile: 中斷的流程是
1. CPU 先將狀態存至 PCB
2. CPU 根據中斷向量表找到 OS 中對應的 ISR
3. 執行該中斷程式
4. 執行結束後讓行程返回原本的狀態繼續執行
:confused: 那根據你所說,我們中斷的 Callback function 有甚麼特別的地方嗎?
:smile: 通常我們 C 語言中斷的 callback function 會是一個回傳 void 引數為函式指標( *func )的函式,原因是我們執行完之後就返回所以不會有回傳值。
:confused: 好,想問你計算機組織你算熟嗎?
:smile: 還算可以。
:confused: 那請問一下指令執行的五個 pipeline ?
:smile: 分別是指令擷取(Instruction fetch)、指令解碼(Instruction decode)、執行(Execution)、記憶體存取(Memory access)與寫回(Write back)。
:confused: OK,好等等我們會給你幾個程式題目稍微測試一下你的基本程式能力。