數據結構(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):控制訪問臨界資源的信號量的優先級天花板。
優先級繼承策略對任務執行流程的影響相對教小,因爲只有當高優先級任務申請已被低優先級任務佔有的臨界資源
這一事實發生時,才擡升低優先級任務的優先級。