嵌入式軟件工程師知識要點

數據結構(C語言)部分常考的知識點:

1、局部變量能、全局變量和靜態變量

2、堆和棧   

3、Const、volatile、define、typedef的用途

4、鏈表(比如鏈表的插入、刪除和排序)

5、排序(考查冒泡法的較多)

6、可重入函數 、malloc函數

7、指針(常考函數指針,函數指針,數組指針,指針數組和其他的應用),結構體和共用體

8、#include<filename.h>和#include“filename.h”的區別。

 

操作系統部分常考的知識點:

1、中斷和異常

2、進程和線程

3、進程的同步機制,進程通信和進程的死鎖

4、優先級反轉和優先級繼承問題

5、makefile文件

 

 

一些嵌入式開發的網址:

國外站點

Linux設備網站,由Rick Lehrbaum創建和維護,是一個嵌入式Linux入門網站,其中包含

嵌入式Linux行業的每日新聞、完整系列的快速參考指南、由重要開發者撰寫的大量文章

,還包括一個交互論壇。

http://www.linuxdevices.com/

下載嵌入式Linux交叉編譯工具鏈的好地方

SnapGear Embedded Linux Distribution Home Page

http://www.snapgear.org/snapgear/index.html

http://www.uclinux.org/pub/uClinux/...lf-tools/gcc-3/

嵌入式Linux聯盟(ELC),一個非盈利性的廠商中立的同業工會,其目標是在整個嵌入式

、應用和設備市場中發展和推廣Linux。

www.embedded-linux.org

Beyond Logic公司主頁,提供了許多嵌入式Linux系統開發的資料。

http://www.beyondlogic.org

嵌入式Linux期刊(ELJ,Embedded Linux Journal),主要關注Linux和其他開源軟件在嵌

入式系統中的應用。 其中有很多業界領導者爲ELJ撰寫文章。

embedded.linuxjournal.com

有幾本寫嵌入式Linux系統的書

http://www.embeddedlogic.com/ELSweb/booklinks.html

有關PowerPC體系的嵌入式

www.mvista.com

www.denx.de/e/index1.php

IXP4XX Open Source Developers Guide

http://ixp4xx-osdg.sourceforge.net/

uClinux/ARM項目

http://adam.kaist.ac.kr/~hschoe/notice.html

個人主頁

一個業餘愛好者代禮周的個人主頁,都是實踐出來的

http://www.lomx.net/index.htm

D_J嵌入式個人主頁,有很多資料!

http://staff.ustc.edu.cn/~wangzhuo/index.html

renbagshoes的個人主頁,有些資料可能你會用的到!

http://timity.nease.net

嵌入式Linux操作系統

小型化的嵌入式Linux版本

uClinux — 在沒有 MMU 的系統上運行的 Linux。目前支持 Motorola 68K、MCF5206 和

  MCF5207 ColdFire 微處理器。

http://www.uclinux.org/index.html

Etlinux — 設計用於在小型工業計算機,尤其是 PC/104 模塊上運行的 Linux 的完全

分發版

http://www.prosa.it/etlinux/index.html

Tiny Linux ── 可以運行在 386 上的 Linux 分發版。

http://tiny.seul.org/en/

ThinLinux ── 面向專用的照相機服務器、X-10 控制器、MP3 播放器和其它類似的嵌

入式應用的最小化的 Linux 分發版。

www.thinlinux.org

LRP(Linux Route Project)

http://www.linuxrouter.org

Peeweelinux一個小的嵌入式Linux發行版

http://freshmeat.net/projects/peeweelinux

具有實時擴展功能的嵌入式Linux版本

RT-Linux主頁

http://www.fsmlabs.com

http://www.rtlinux.com

RTAI

http://www.rtai.org

EL/IX

SRT-Linux

嵌入式GUI

Microwindows由Century Software的CEO Greg Haerr主持開發的一個公開源碼(LGPL)的

項目。Microwindows致力於爲一些小型設備和平臺提供現代圖形窗口環境。Microwindow

s支持許多硬件平臺,移植性很強。Microwindows的主要目的之一便是運行在嵌入式Linu

x上,並且提供了基於Win32/X的兩套API接口。

http://www.microwindows.org

http://microwindows.org

MiniGUI由原清華大學教師魏永明先生開發,是中國人做的得較好的自由軟件之一。Mini

GUI 是一種面向嵌入式系統或者實時系統的公開源碼(LGPL)的圖形用戶界面支持系統。

它主要運行於Linux控制檯,實際可以運行在任何一種具有POSIX線程支持的POSIX兼容系

統上。

http://www.minigui.org

飛漫軟件的MiniGUI項目

http://www.minigui.com/company/cindex.shtml

Qt/Embedded是著名的QT庫開發商Trolltech正在進行的面向嵌入式系統的QT版本。Qt/Em

bedded對於各種硬件接口到GUI工具包提供了完整的圖形棧。Qt/Embedded的API同Qt/X11

和Qt/Windows的相同,但它並不是基於X11庫的。Qt/Embedded是公開源碼(LGPL)項目。

http://www.trolltech.com

OpenGUI基於一個用匯編實現的x86圖形內核,提供了一個快速的、32位的、高層的C/C++

圖形接口。OpenGUI也是一個公開源碼(LGPL)項目。OpenGUI提供了二維繪圖原語,消息

驅動的API和BMP文件格式支持。

http://www.tutok.sk/fastgl

PicoGUI是一個可以工作在包括手持式設備等各種硬件上的小型的、可移植的、基於客戶

/服務器結構的GUI。同X Window系統一樣,它具有客戶—服務器結構的靈活性,但又不

同於X Window系統,它將字體、BMP文件、控件以及一些應用程序所需要的其它的一些資

源直接集成在服務器。雖然減少了系統的靈活性,但在速度上有了很大的提高,並且減

小了程序大小。

http://picogui.org

Tiny-X是一個爲嵌入式系統而開發的緊縮型的X Window服務器。它由SuSE贊助,由XFree

86的核心成員Keith Packard開發。Tiny-X的目標是可以在小內存或幾乎無內存的情況下

良好運行。

http://www.pps.jussieu.fr/~jch/software/kdrive.html

 

 

凹凸筆試題目(嵌入式軟件開發)

2007-02-07

Embedded Software Design Engineer

1 讀程序段,回答問題

int main(int argc,char *argv[])

{

int c=9,d=0;

c=c++%5;

d=c;

printf("d=%d/n",d);

return 0;

}

a) 寫出程序輸出

b) 在一個可移植的系統中這種表達式是否存在風險?why?

#include "stdio.h"

int a=0;

int b;

static char c;

int main(int argc,char *argv[])

{

char d=4;

static short e;

a++;

b=100;

c=(char)++a;

e=(++d)++;

printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);

return 0;

}

a) 寫出程序輸出

b) 編譯器如果安排各個變量(a,b,c,d)在內存中的佈局(eg. stack,heap,data section,bss section),最好用圖形方式描述。

2 中斷是嵌入式系統中重要的組成部分,這導致了許多編譯開發商提供一種擴展:讓標準C支持中斷,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一箇中斷服務子程序(ISR),請評論以下這段代碼。

__interrupt double compute_area(double radius)

{

double area = PI * radius *radius;

printf("nArea = %f", area);

return area;

}

3 C/C++基礎知識問題

a) 關鍵字volatile在編譯時有什麼含義?並給出三個不同使用場景的例子(可以僞代碼或者文字描述)。

b) C語言中static關鍵字的具體作用有哪些 ?

c) 請問下面三種變量聲明有何區別?請給出具體含義

int const *p;p是一個指向常整型變量的指針。

int* const p;p是一個指向整型變量的常數執政。

int const* const p;

4 嵌入式系統相關問題

a) 對於整形變量A=0x12345678,請畫出在little endian及big endian的方式下在內存中是如何存儲的。

b) 在ARM系統中,函數調用的時候,參數是通過哪種方式傳遞的?

c) 中斷(interrupt,如鍵盤中斷)與異常(exception,如除零異常)有何區別?

5 設週期性任務P1,P2,P3的週期爲T1,T2,T3分別爲100,150,400;執行時間分別爲20,40,100。請設計一種調度算法進行任務調度,滿足任務執行週期及任務週期。

6 優先級反轉問題在嵌入式系統中是一中嚴重的問題,必須給與足夠重視。

a) 首先請解釋優先級反轉問題

b) 很多RTOS提供優先級繼承策略(Priority inheritance)和優先級天花板策略(Priority ceilings)用來解決優先級反轉問題,請討論這兩種策略。

 

 

參考答案:

1 5

存在風險,因爲c=c++%5;這個表達式對c有兩次修改,行爲未定義,c的值不確定

int a=0; // data section

int b;   // data section

static char c; // BSS

int main(int argc,char *argv[])

{

    char d=4;         // stack

    static short e;   // BSS

    a++;

    b=100;

    c=(char)++a;

    e=(++d)++;

    printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);

    return 0;

}

a=2,b=100,c=2,d=6,e=5

 

2 a)ISR不能返回一個值;

b)ISR不能傳遞參數;

c)浮點一般都是不可重入的;

d)printf函數有重入和性能上的問題。

 

3 a) 用volatile關鍵字定義變量,相當於告訴編譯器,這個變量的值會隨時發生變化,每次使用時都需要去內存裏

重新讀取它的值,並不要隨意針對它作優化。

建議使用volatile變量的場所:

(1) 並行設備的硬件寄存器

(2) 一箇中斷服務子程序中會訪問到的非自動變量(全局變量)

(3) 多線程應用中被幾個任務共享的變量

b) 在函數體,一個被聲明爲靜態的變量在這一函數被調用過程中維持其值不變。

     在模塊內(但在函數體外),一個被聲明爲靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數

訪問。它是一個本地的全局變量。

     在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的

模塊的本地範圍內使用。

     static全局變量與普通的全局變量有什麼區別:static全局變量只初使化一次,防止在其他文件單元中被引用;

     static局部變量和普通局部變量有什麼區別:static局部變量只被初始化一次,下一次依據上一次結果值;

     static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝

c) 一個指向常整型數的指針

     一個指向整型數的常指針

     一個指向常整型數的常指針

4

 

a) 0x12345678

little endian        big endian 剛好反過來

高地址--〉 0x12      低地址--〉 0x12

             0x34                 0x34

             0x56                 0x56

低地址--〉 0x78      高地址--〉 0x78

b)參數<=4時候,通過R0~R3傳遞,>4的通過壓棧方式傳遞

c)   異常:在產生時必須考慮與處理器的時鐘同步,實踐上,異常也稱爲同步中斷。在處理器執行到由於編程失誤而導致的錯誤指令時,或者在執行期間出現特殊情況(如缺頁),必須靠內核處理的時候,處理器就會產生一個異常。

所謂中斷應該是指外部硬件產生的一個電信號,從cpu的中斷引腳進入,打斷cpu當前的運行;

所謂異常,是指軟件運行中發生了一些必須作出處理的事件,cpu自動產生一個陷入來打斷當前運行,轉入異常處理流程。

異步與同步的區別`

5

 

6 高優先級任務需要等待低優先級任務釋放資源,而低優先級任務又正在等待中等優先級任務的現象叫做優先級反轉

優先級繼承策略(Priority inheritance):繼承現有被阻塞任務的最高優先級作爲其優先級,任務退出臨界區,恢

復初始優先級。

優先級天花板策略(Priority ceilings):控制訪問臨界資源的信號量的優先級天花板。

優先級繼承策略對任務執行流程的影響相對教小,因爲只有當高優先級任務申請已被低優先級任務佔有的臨界資源

這一事實發生時,才擡升低優先級任務的優先級。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章