1. 程式人生 > >嵌入式工程師發展

嵌入式工程師發展

學習就是要不斷的吸納知識,在研發過程中,經常會遇到一些問題,這種發現問題並解決問題的過程就是進步。

1、Linux開發工程師

首先成長為一名Linux開發工程師,這是最基本的目標,他應該具備如下的素質:


(1)瞭解Linux基本概念和基本操作(歷史,文化,起源)(命令列,配置,操作,開發模式)
(2)會使用Linux平臺下的編輯器vi(預設安裝,佔記憶體小,方便向嵌入式移植)
(3)會使用Linux平臺下的編譯器GCC(相應的十幾個命令列引數)
(4)會使用Linux平臺下的管理工具Make(與Makefile相配合,尤其用於大專案中多平臺移植的情況下)
(5)會使用Linux平臺下的偵錯程式GDB(可以瞭解底層硬體,及彙編指令)

 

2、嵌入式工程師

他更關心的是將來在哪一目標機上執行,不關心作業系統,進行的更多與程式設計相關的工作


(1)合格的C程式的程式設計師(理解基本的控制結構:迴圈、分支、陣列、指標)
(2)基本的程式設計思想(程式設計實踐中總結演算法)
(3)程式的編譯和連結
(4)可執行檔案內部(段、起始地址、如何載入執行)
(5)目標機處理器體系結構
(6)知道處理器的外設即System on Chip(內部儲存結構及外設驅動)
(7)組合語言及指令(主要是用在載入過程中)

 

3、系統工程師

系統工程師夾在驅動工程師及應用工程師這兩個層次之間,他要對系統有一個整體的概念,系統主要是指作業系統,往往理論有餘而實踐不足

 

(1)程序管理與排程(知道程序間的切換與排程,多工)
(2)記憶體管理(建立MMU頁表,知道從虛地址到實體地址的對映)
(3)驅動管理(管理裝置,編寫裝置驅動,載入裝置驅動)
(4)檔案系統(製作檔案系統,檔案系統的讀寫,甚至驅動有時也被當成檔案系統來管理)
(5)網路協議知識(協議實現作為上層應用與底層驅動之間的銜接)
(6)圖形系統知識(支援多視窗及管理視窗,包括視窗切換,視窗移動和覆蓋)

 

4、嵌入式Linux系統工程師

(1)嵌入式Linux基本概念
(2)交叉編譯
(3)Linux核心開發和除錯工具
(4)啟動程式碼移植(修改Uboot,Vivi等)
(5)核心交叉編譯(Linux不支援晶片時要晶片級的移植,支援晶片時要板級的移植)
(6)根檔案系統製作
(7)裝置驅動程式開發

 

5、下面針對一個簡單的"hello world"程式來區分一下以上所講的工程師之間的區別

#include<stdio.h>
int main(void)
{
printf("hello world!\n");
}


(1)初級程式設計師看到的是:

a、標頭檔案
b、主函式main
c、子函式printf
d、函式呼叫
e、入口引數
f、引數返回

 

(2)高階程式設計師看到的是:

a、標頭檔案---預處理過程
b、主函式main---程式入口
c、子函式printf---標準庫函式
d、函式呼叫---跳轉指令
e、入口引數---棧空間的引數傳遞
f、函式返回---返回指令

 

(3)嵌入式程式設計師看到的是:

a、標頭檔案---預處理過程---巨集展開/條件編譯
b、主函式main---程式入口---啟動程式碼
c、子函式printf---標準庫函式---連結過程
d、函式呼叫---跳轉指令---PC暫存器
e、入口引數---棧空間的引數傳遞---定址方式
f、函式返回---返回指令---LR暫存器


嵌入式程式設計師還能看到的是:

可執行檔案的內部組織結構
程式碼段
指令格式和型別
地址無關程式碼
資料段
RWdata讀寫資料段
ROdata只讀資料段
BSS未初始化資料段

 

(4)系統工程師看到的是:

子函式printf---標準庫函式---連結過程
動態連結(Dynamic Linking)(需要系統的支援)
靜態連結(Static Linking)(嵌入式系統常採用靜態連結,以適應不同系統)
標準C庫
系統呼叫(System Call)
軟體中斷(Software Interrupt)

 

(5)Linux系統工程師看到的是:

可執行檔案的載入過程(不用瞭解系統呼叫這一級)
Shell程序--fork系統呼叫---exec系統呼叫
程序狀態(就緒、執行、阻塞)
程序排程和排程演算法
程序的上下文切換

 

(6)嵌入式Linux系統工程師看到的是

使用者空間和系統空間(分別執行使用者模式和管理模式)
ARM---使用者模式和管理模式(執行許可權不同)
SWI---軟中斷指令(系統呼叫就是由使用者空間向系統空間切換)
MMU---虛地址和實地址(不同程序如何實現自己獨立的地址空間)
BUS---地址匯流排、資料匯流排和控制匯流排(程式如何獲得資料,系統如何取指)
SOC---片上系統(整個嵌入式系統如何執行)