第一篇:北京科技大學 嵌入式課程設計報告
《嵌入式控制系統》 課程設計報告
學 院
專業班級
姓
名
學
號
指導教師
_
目錄
摘要..............................................................................................................................................4
引言
隨著芯片技術和電子產品智能化的飛速發展,嵌入式技術越來越受到人們的關注,應用領域幾乎遍及所有的電子產品:智能機器人、網絡通信、軍用設備、汽車導航、環境保護、智能儀器等等。嵌入式系統不僅融合了計算機軟、硬件技術、通訊技術和半導體微電子技術,而且針對實際應用系統要求,將相應的計算機直接嵌入到應用系統中,并可針對應用需求對軟、硬件進行優化、裁減。
嵌入式控制系統是一門新興的課程,通過本次課程設計可以更好地掌握這門新技術,對今后的發展有很大幫助。
開發方法和流程,熟悉Intel XScale硬件平臺及其應用處理機的使用方法,熟悉WINCE嵌入式系統的基本原理、概念。
4.設計原理 4.1 LED發光原理
LED(Light Emitting Diode),即發光二極管。是一種半導體固體發光器件。它是利用固體半導體置于一個有引線的架子上,然后四周用環氧樹脂密封,起到保護內部芯線的作用,所以LED的抗震性能好。
發光二極管的核心部分是由P型半導體和N型半導體組成的晶片,如圖1,在P型半導體和N型半導體間有一個過渡層,稱為P-N結。在某些半導體材料的P-N結中,注入的少數載流子與多數載流子復合時,會把多余的能量以光的形式釋放出來,從而把電能直接轉換為光能。P-N結加反向電壓,少數載流子難以注入,故不發光。利用注入式電致發光原理制作的二極管叫發光二極管,通稱LED。當它處于正向工作狀態時(即兩端加上正向電壓),電流從LED陽極流向陰極時,半導體晶體就發出從紫外到紅外不同顏色的光線,光的強弱與電流有關。
圖1 發光二極管的核心組成部分
圖3 控件設計圖
其中,顯示按鈕是作為數碼管靜態顯示的按鈕,如顯示1235; 亮、滅、閃爍這三個按鍵是通過GPIO控制發光二極管的狀態; 測試按鍵是實現2,4、6、8數碼管循環動態顯示的按鈕; 復位按鍵是實現中斷次數清零功能的按鈕; Apply按鍵是啟動更改的循環顯示周期的按鍵。
以上就是整個課程設計的全部控制界面,通過不同的按鈕操作,實現不同的功能。
5.3基本功能的實現
windowsCE是一個界面友好的嵌入式操作系統,系統提供了豐富了控件,極大的方便了用戶的開發。C++是優秀的編程語言,在EVC環境下,編寫的難度大大降低,尤其是界面的處理。由于實驗平臺提供了相應的驅動程序,所以本次實驗并不需要了解其硬件操作,大大縮短了一個嵌入式應用的開發速度。通過本次嵌入式實
圖5 LED數碼管循環顯示2,4,6,7 6.2 LED數碼管清零功能實現結果
通過控制面板上的操作按鍵,實現清零功能,當按鍵按下去之后,四個LED數碼管的顯示數字全部都會變為零。見圖6
6.4 頻率設置功能實現結果
閃爍周期可以通過鍵盤輸入來進行設置,本課程設計設置的為0~9之間,基值為100ms,通過改變閃爍周期來控制2、4、6、8循環顯示的頻率。見圖8.和圖9.圖8 閃爍周期為5時的結果
力,也增強了我們的團隊協作能力。有什么不懂不明白的地方要及時請教老師或上網查詢,只要認真鉆研,動腦思考,動手實踐,就沒有弄不懂的知識。
} //{{AFX_DATA_MAP(CLedDlg)// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP BEGIN_MESSAGE_MAP(CLedDlg, CDialog)
//{{AFX_MSG_MAP(CLedDlg)ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON_ON, OnButtonOn)ON_BN_CLICKED(IDC_BUTTON_OFF, OnButtonOff)ON_BN_CLICKED(IDC_BUTTON_FLASH, OnButtonFlash)ON_WM_TIMER()ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)ON_BN_CLICKED(IDC_BUTTON_RESET, OnButtonReset)ON_BN_CLICKED(IDC_BUTTON_APPLY, OnButtonApply)//}}AFX_MSG_MAP END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CLedDlg message handlers
BOOL CLedDlg::OnInitDialog(){
CDialog::OnInitDialog();// Set the icon for this dialog.The framework does this automatically // when the application's main window is not a dialog
}
void CLedDlg::OnButtonSet(){
//KillTimer(1);m_test=FALSE;UINT val =GetDlgItemInt(IDC_EDIT_NUM,&b,FALSE);memset(data,0,4);if(b){ BOOL b;BYTE data[4];DWORD bytes;// TODO: Add your control notification handler code here m_test=false;m_flash=false;n=0;ntime=0;flashtime=5;SetTimer(1,100,NULL);
return TRUE;// return TRUE unless you set the focus to a control
WriteFile(m_hDev2,&m_bValue,4,&m_dwBytes,NULL);} void CLedDlg::OnButtonOff(){
}
void CLedDlg::OnButtonFlash(){
}
void CLedDlg::OnTimer(UINT nIDEvent){
// TODO: Add your message handler code here and/or call default
BYTE test[4]={2,4,6,8};BYTE data[4];DWORD bytes;// TODO: Add your control notification handler code here
m_flash=!m_flash;// TODO: Add your control notification handler code here
//KillTimer(1);m_flash=FALSE;m_bValue = TRUE;WriteFile(m_hDev2,&m_bValue,4,&m_dwBytes,NULL);
} if(ReadFile(m_hDev3,&val,sizeof(val),&bytes,NULL)){
if(val!=oldval){ SetDlgItemInt(IDC_EDIT_INTERRUPT,val,FALSE);oldval=val;
} else {
}
} m_test=FALSE;for(i=0;i<4;i++){ } WriteFile(m_hDev,data,4,&bytes,NULL);data[i]=ledfont[0];TCHAR str[64];wsprintf(str,TEXT(“Error %d”),GetLastError());SetDlgItemText(IDC_EDIT_INTERRUPT,str);CDialog::OnTimer(nIDEvent);CDialog::OnTimer(nIDEvent);void CLedDlg::OnButtonTest()
flashtime=str[0]-'0';
if(flashtime==0)
{
flashtime=1;
} } }
第二篇:嵌入式課程設計報告
福建工程學院
《嵌入式系統》課程設計
報告書
題目:
基于S3C2440設備驅動及其界面設計
班級:
姓名:
學號:
指導老師:
陳靖,張平均,李光煬
目錄
一、設計課題...............................................................................................................................4
二、設計目的...............................................................................................................................4
三、設計任務及要求...................................................................................................................4
四、設計內容...............................................................................................................................5
五、操作界面的生成...................................................................................................................7
六、操作界面調試.......................................................................................................................9
七、設計總結.............................................................................................................................10
八、設計參考書.........................................................................................................................12
九、附件(程序).....................................................................................................................13
一、設計課題
基于S3C2440的設備驅動及其界面設計
二、設計目的:
1.進一步鞏固嵌入式系統的基本知識; 2.掌握嵌入式應用系統的基本結構; 3.掌握嵌入式系統開發環境建立和使用;
4.掌握嵌入式系統基本驅動、應用程序的設計調試和編譯移植方法; 5.學會查閱有關專業資料及設計手冊; 6.MiniGUI界面編程。
三、設計任務及要求:
1.掌握嵌入式系統開發環境建立和使用;
2.掌握嵌入式系統基本驅動、應用程序的設計調試和編譯移植方法;
3、MiniGUI在PC上的安裝、移植
4、Linux基本輸入輸出驅動程序設計編譯與移植
5、基于MiniGUI的基本輸入輸出應用編程編譯與移植
6、編寫設計說明書(方案的確定、設計環節的考慮及必要說明等)及設備的使用說明;
7、繪制有關圖紙.四、設計內容:
1、基礎知識準備
1)講解設計任務;2)熟悉ubuntu的使用;3)熟悉TQ2440試驗系統的使用;4)掌握嵌入式系統開發環境建立和使用;
5)掌握嵌入式系統基本驅動、應用程序的設計調試和編譯移植方法.2、界面設計環境構建:MiniGUI在PC上的安裝、移植
2.1、MiniGUI在pc機上安裝和運行
建立工作目錄:mkdir /minigui-free
cd /minigui-free mkdir /src 復制源文件包到工作目錄:cp /mnt/hgfs/D/src/* /minigui-free 解壓文件到/minigui-free:
tar zxvf libminigui-1.6.10.tar.gz tar zxvf minigui-res-1.6.10.tar.gz tar zxvf mg-samples-1.6.10.tar.gz
2.2、MiniGUI庫安裝
(2)將libcross.sh考到minigui的lib庫的解壓文件夾中(3)將rescross.sh 考到minigui的res資源解壓文件夾中(4)將samplecorss.sh 考到sample例子解壓文件夾中(5)依次運行libcross.sh,rescross.sh,samplecorss.sh(6)到nfsroot的,目錄下,將libreduce.sh考到這個目錄下,運行libreduce.sh 2.3、安裝qvfb(1)解壓qvfb1.1.tar.gz(2)./configure(3)make(4)make install 2.4、配置MiniGUI.cfg vi /etc/MiniGUI.cfg 修改如下部分為 [system] # GAL engine and default options gal_engine=fbcon
defaultmode=800x480-16bpp # IAL engine ial_engine=fbcon mdev=/dev/mouse mtype=IMPS2 [fbcon] 6
defaultmode=800x480-16bpp [qvfb] defaultmode=800x480-16bpp display=0 1.5運行MiniGUI例子程序(1)打開qvfb:qvfb &(2)運行helloword:
五、操作界面的生成
1、操作界面面執行文件的生成
1).在/minigui-free/mg-samples-1.6.10/src/修改源文件treeview.c 2).再次運行samplecorss.sh,生成執行文件treeview
2、利用nfs進行掛載
1).將本地PC機的網絡方式設置成為橋接
2).查看/etc/exports下可以掛載的目錄
3).啟動服務/etc/init.d/nfs-kernel-server restart 4).查看本機和ARM上的IP地址,設置在同一網段,然后ping,使其能夠互通。5).在超級終端上,進行操作
Mount-o nolock,rsize=1024,wsize=1024 本機IP:/ /mnt
將虛擬機和ARM進行掛載,可以查看到虛擬機根目錄下的文件。
3、在超級終端上將需要的文件從虛擬機上復制到ARM機上
1).重新燒寫文件系統鏡像文件
2).掛載成功后,將/mnt/minigui-free/nfsroot/lib/*復制到/usr/lib/ 3).將/mnt/minigui-free/nfsroot/usr/local/lib/*復制到/usr/local/lib/ 4).將/mnt/etc/MiniGUI.cfg復制到/etc/ 8
5).將/mnt/minigui-free/mg-samples-1.6.10/src/*復制到/usr/minigui/
4、在超級終端上運行執行文件
1).進入/usr/minigui/運行treeview文件 2).可以再操作界面上現實我們所設計的界面
六、操作界面調試
1、點擊LED1LED2LED3LED4,分別控制四盞led燈的亮暗,調試界面如下:
2、輸入頻率值,點擊START鍵控制四盞led燈閃爍,調試界面如下:
七、設計總結
1、設計過程中遇到的問題
錯誤1:
InitGUI: Can not initialize colors of window element!InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.解決方法:正確配置MiniGUI.cfg文件 錯誤2:
Permission denied 解決方法:權限不夠,使用root用戶登錄。錯誤3:
編譯出錯未找到jpeg,png等
解決方法:安裝zlib,png,jpeg庫。
錯誤4:
出現符號未找到等編譯錯誤 解決方法:make clean 后在make 錯誤5:
在minigui創建和移植的過程中,出現lib庫編譯不成功的現象,這是由于minigui是基于qt3的,因此需要添加qt3所在路徑至配置文件。錯誤:6 在開發板上添加鼠標設備后,提示視頻采集失敗,這是因為/etc下的配置文件MiniGUI.cfg中對外設控制范圍的控制過大,銀將其修改為與界面統一大小800*480.錯誤:7 在執行led燈控制程序之前應該首先停止開發板上原有的流水燈進程led-player。錯誤:8 運行執行程序treeview后界面上出現兩個光標,此時應該在/etc/init.d下的rcS文件中停用qt3的光標。
2、心得體會
本學期為期兩周的嵌入式課程設計在不知不覺中結束了,雖說這次課程設計時間不是很長,但是感覺自己收獲頗豐,不僅學習到了一些新知識,回顧了以前的一些快要遺忘的知識點,而且使自己的學習目標更加明確,學習方法更加完善,也體會到軟件開發的趣味,更加清楚地認識到了自己在軟件開發及學習上的一些不足之處。
兩周的課程設計,在計算機這個博大深奧的領域我感覺自己還有好多東西要學,還有好多的東西不懂!嵌入式軟件開發應用廣泛而且前景很好,目前正處于人才緊缺的關口,嵌入式技術在未來能夠得到更加廣泛的應用。學好嵌入式,C語言很重要,所以感覺自己有必要在學習、積累一下這方面的知識。很多東西的學習不是一帆風順也是比較耗時的,嵌入式也不例外,要想學好還必須下大力氣,還必須堅持。這次的課程設計讓我明確了一點:嵌入式開發對于提升我們的系統知識有很大的幫助,尤其是操作系統的知識。嵌入式
系統開發對于我們的知識面要求非常的廣,且要有一定的深度。這次的課程設計因為是一個有針對性的訓練,所以記的會非常牢固。跟平時上課不太一樣,平時上完理論課很少有時間上機進行時間或者隔幾天才上機練習,等到上機時一些東西可能遺忘了,比較耗費時間。在課上,有老師在前面演示我們感覺看得懂或感覺沒問題,可輪到我們獨立完成的時候,因為實際操作的少,其中的問題就來了!我很感謝學校特別是學院老師有實訓這樣的安排,把我們這一學期學的東西系統的集中的進行訓練,讓我們深刻明確的體驗了一下軟件開發的流程!還要感謝給我們實訓的楚老師,感覺楚老師能力很強,也很有耐心,即使老師講了很多遍的問題,我們不會,老師還是會走進我們給我們耐心的指導,還給我們講一些學習計算機的方法,一些軟件開發需要注意的細節,讓我們知道自己在哪方面不足,需要加強,也讓我們了解到哪些需要認真的學習,那些是重點,不是沒有方向的亂學一通,什么也學不好!經過這次的實訓,我真真確確的感受到了計算機在我們生活中工作中的運用,這些軟件、程序能讓我們提高工作的效率,更直觀更便捷的切入主題。當然,在學習的過程中并不是一帆風順的,在這之中,因為要操作的東西很多,有時錯一步,后面的結果就無法顯示,而自己的計算機水平還有待提高,根本檢查不出來是哪里出了錯!這時候,老師都會耐心的過來幫助我!在平時我們就需要好好的查閱書籍或者上網搜集相關資料去解決問題。
短短兩周的課程設計很快結束了,我發現我對計算機這個專業、對嵌入式技術、對Linux都有了新的認識。通過這次的實訓,我了解到,要真真正正的掌握計算機程序還不是一件簡單容易的事兒,但真正掌握后,它帶給我們的將是無窮的便捷與科技,我喜歡高端便捷的生活。我希望我能做計算機這個萬能機器人的主人而不是奴隸,我會努力加油的!感謝學校,感謝老師給我的幫助,讓我的思想、技能又上了一個臺階!感謝!加油!
八、設計參考書
1、《嵌入式系統接口設計與Linux驅動程序開發》
2、《ARM9嵌入式LINUX系統構建與應用》
4、MiniGUI編程手冊
5、Linux應用程序編程
九、附件(程序)
#include
#include
/*包括 MiniGUI 常用的宏以及數據類型的定義*/ #include
/*包含了
MiniGUI
繪圖函數的接口定義*/ #include
/*包含了
libminigui 中所有內建控件的接口定義*/ #include
/*包含了許多UNIX系統服務的函數原型*/ #include
/*提供對I/O控制的函數*/
#define ID_LED1 101
/*定義各個控件與定時器的ID號*/ #define ID_LED2 102 #define ID_LED3 103 #define ID_LED4 104 #define ID_TEXT1 105 #define ID_TEXT2 106 #define ID_START 107 #define ID_STOP 108 #define ID_COMBOBOX 109 #define ID_TIMER 110
static int a,b,c,d=0;
/*定義LED燈的初始值*/ static int fd_led;
/*定義文件描述符*/
HWND hMainWnd;
/*定義主窗口句柄*/
static void draw_circular(HWND hdig,int x,int y,int r,int which)
/*自定義一個畫圓函數,x、y、r、which分別表示圓心坐標、半徑、顏色*/ {
HDC hdc;
/*定義設備上下文句柄*/ int color;color=((which==0)?PIXEL_green:PIXEL_red);
hdc=BeginPaint(hdig);
/*獲得設備上下文句柄*/ SetBrushColor(hdc,color);
/*設置畫刷顏色*/ FillCircle(hdc,x,y,r);
/*調用園填充函數*/ EndPaint(hdig,hdc);
/*釋放設備上下文句柄*/ }
static DLGTEMPLATE DlgInitProgress=
/*定義對話框模板.用static類型數據,使該數據的定義只在所在文件中有效,以免因為名字空間污染造成潛在的編譯或連接錯誤*/ {
WS_BORDER|WS_CAPTION,/*對話框風格,WS_BORDER創建有邊框的窗口 ,WS_CAPTION創建含標題欄的主窗口*/
WS_EX_NONE,/*對話框擴展風格,WS_EX_NONE表示無擴展風格*/
0,0,800,480,/*對話框位置,左上角坐標(0,0),800、480分別為寬和高*/
“MY_LED_CONTROL”,/*對話框標題*/
0,/*對話框圖標*/
0,/*對話框菜單*/
9,/*對話框中控件個數。這個必須要匹配*/
NULL,/*pointer to control array*/
0
/*附加值*/ };
static CTRLDATA CtrlInitData[]=
/*控件數組*/ {
{
“static”,/*控件類型*/
WS_VISIBLE|SS_SIMPLE,/*控件風格,WS_VISIBLE創建初始可見的窗口,SS_SIMPLE顯示單行文本*/
100,270,150,40,/*控件位置*/
ID_TEXT1,/*控件ID*/
“Please input frequency”,/*控件內容*/
0,/*附加值*/
WS_EX_NONE
/*控件擴展風格*/
}, { “static”, WS_VISIBLE|SS_SIMPLE, 605,270,150,40, ID_TEXT2, “HZ”, 0, WS_EX_NONE
}, {
“button”, WS_VISIBLE|WS_TABSTOP, 135,160,80,60, ID_LED1, “LED1”, 0, WS_EX_NONE
}, {
“button”, WS_VISIBLE|WS_TABSTOP, 285,160,80,60, ID_LED2, “LED2”, 0, WS_EX_NONE
}, {
“button”, WS_VISIBLE|WS_TABSTOP, 435,160,80,60, ID_LED3, “LED3”, 0,/*WS_TABSTOP支持Tab鍵*/
WS_EX_NONE
}, {
“button”,WS_VISIBLE|WS_TABSTOP,585,160,80,60,ID_LED4,“LED4”,0,WS_EX_NONE
}, {
“button”,WS_VISIBLE|WS_TABSTOP,285,360,80,60,ID_START,“START”,0,WS_EX_NONE
}, {
“button”,WS_VISIBLE|WS_TABSTOP,435,360,80,60,ID_STOP,“STOP”,0,WS_EX_NONE
}, {
CTRL_COMBOBOX,WS_VISIBLE|WS_TABSTOP|CBS_AUTOSPIN|CBS_AUTOLOOP,/*CBS_AUTOSPIN創建旋鈕數字框,CBS_AUTOLOOP框中的數字將自動循 環顯示*/
435,270,80,40,ID_COMBOBOX,“0”,/*旋鈕數字框初始值*/
0,WS_EX_NONE
} };
static int DialogBoxProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)/*對話框過程函數,用來接收和處理所有發送到該窗口的消息*/ {
int number;
/*用來存從旋鈕數字框獲得的數值*/
static int t=0;
int num;
/*存放定時時間*/
switch(message)
{
case MSG_INITDIALOG:
/*用戶在定義自己的對話框回調函數時,需要處理
MSG_INITDIALOG消息,該消息是在MiniGUI根據對話框模板建立對話框以及 控件之后,發送到對話框回調函數的。*/
SendDlgItemMessage(hWnd, ID_COMBOBOX, CB_SETSPINRANGE, 0, 10000);
/*設置旋鈕數字框的最大小值*/
return 1;
case MSG_PAINT:/*重繪消息*/
draw_circular(hWnd,175,90,30,1);
draw_circular(hWnd,325,90,30,1);
draw_circular(hWnd,475,90,30,1);
draw_circular(hWnd,625,90,30,1);
printf(“*************************init draw_circular******************************n”);
case MSG_TIMER:t++;
/*定時器消息,這里完成LED燈的閃爍*/
if(t%2!=0)
{
ioctl(fd_led, 0,0);
ioctl(fd_led, 0, 1);
ioctl(fd_led, 0, 2);
ioctl(fd_led, 0, 3);printf(“*************************time red******************************n”);
draw_circular(hWnd,175,90,30,1);
draw_circular(hWnd,325,90,30,1);
draw_circular(hWnd,475,90,30,1);
draw_circular(hWnd,625,90,30,1);
break;
}
else
{
ioctl(fd_led, 1,0);
ioctl(fd_led, 1, 1);
ioctl(fd_led, 1, 2);
ioctl(fd_led, 1, 3);printf(“*************************time green******************************n”);
draw_circular(hWnd,175,90,30,0);
draw_circular(hWnd,325,90,30,0);
draw_circular(hWnd,475,90,30,0);
draw_circular(hWnd,625,90,30,0);
break;
}
case MSG_COMMAND: /*擊鍵消息*/
switch(wParam)
{
case ID_LED1:a++;
/*控制LED燈亮暗*/
if(a%2!=0)
{
ioctl(fd_led,0,0);
draw_circular(hWnd,175,90,30,1);
}
else
{ /
ioctl(fd_led,1,0);
draw_circular(hWnd,175,90,30,0);
}
printf(“******************led1********************************n”);
break;
case ID_LED2:b++;
if(b%2!=0)
{
ioctl(fd_led,0,1);
draw_circular(hWnd,325,90,30,1);
}
else
{
ioctl(fd_led,1,1);
draw_circular(hWnd,325,90,30,0);
}
printf(“*******************led2********************************n”);
break;
case ID_LED3:c++;
if(c%2!=0)
{
ioctl(fd_led,0,2);
draw_circular(hWnd,475,90,30,1);
}
else
{
ioctl(fd_led,1,2);
draw_circular(hWnd,475,90,30,0);
}
printf(“*******************led3********************************n”);
break;
case ID_LED4:d++;
if(d%2!=0)
{
ioctl(fd_led,0,3);
draw_circular(hWnd,625,90,30,1);
printf(“*******************led33********************************n”);
}
else
{
ioctl(fd_led,1,3);
draw_circular(hWnd,625,90,30,0);
}
printf(“*******************led4********************************n”);
break;
case ID_START:printf(“*******************start1*********************n”);
number=SendMessage(GetDlgItem(hWnd,ID_COMBOBOX), CB_GETSPINVALUE, 0, 0);/*獲取旋鈕數字框的數值*/
printf(“**********%d*******************n”,number);
printf(“*******************start2*********************n”);
if(number!=0)
{
printf(“*******************start3*********************n”);
num=(int)(1000*(1.0/number));
/*將頻率轉換為時間*/
printf(“*******************start4*********************n”);
}
else
{
printf(“*******************start5*********************n”);
num=1000;
}
printf(“*******************start6*********************n”);
printf(“*******************start7*********************n”);
printf(“*******************start8*********************n”);
SetTimer(hWnd,ID_TIMER,num);/*創建定時器,時間為num*10ms*/ printf(“*************************SetTimer OK******************************n”);
SendMessage(hWnd,BM_CLICK,0,0);
/*發送點擊信息*/ printf(“*************************SendMessage OK******************************n”);
//for(i=0;i++;i<10000)
/*當初用for循環時無法進入循環,也許是因為消息本身有循環機制,用for循環太多也許沖突,所以后來用了定時器*/
//{
//
printf(“********%d**********n,i”);
//
ioctl(fd_led, 1,0);//
ioctl(fd_led, 1, 1);//
ioctl(fd_led, 1, 2);//
ioctl(fd_led, 1, 3);
//
draw_circular(hWnd,175,90,30,0);
//
draw_circular(hWnd,325,90,30,0);
//
draw_circular(hWnd,475,90,30,0);
//
draw_circular(hWnd,625,90,30,0);
printf(“*******************start9*********************n”);
// usleep(number);
//usleep(num);
//
ioctl(fd_led, 0,0);//
ioctl(fd_led, 0, 1);//
ioctl(fd_led,0, 2);//
ioctl(fd_led, 0, 3);
// draw_circular(hWnd,175,90,30,1);
// draw_circular(hWnd,325,90,30,1);
// draw_circular(hWnd,475,90,30,1);
// draw_circular(hWnd,625,90,30,1);
// printf(“*******************start10*********************n”);
//usleep(number);
//usleep(num);
// }
printf(“*******************start********************************n”);
break;
case ID_STOP:
KillTimer(hWnd,ID_TIMER);/*關閉定時器。下面的表示燈滅*/
ioctl(fd_led, 0,0);
ioctl(fd_led, 0, 1);
ioctl(fd_led, 0, 2);
ioctl(fd_led, 0, 3);
draw_circular(hWnd,175,90,30,1);
draw_circular(hWnd,325,90,30,1);
draw_circular(hWnd,475,90,30,1);
draw_circular(hWnd,625,90,30,1);
printf(“**************stop******************n”);
break;
}
}
return(DefaultDialogProc(hWnd,message,wParam,lParam));
/*對話框的缺省消息處理由 DefaultDialogProc 函數完成*/ }
static void InitDialogBox(HWND hWnd){ DlgInitProgress.controls=CtrlInitData;
/*將對話框模板結構和控件結構數組關聯起來*/ DialogBoxIndirectParam(&DlgInitProgress,hWnd,DialogBoxProc,0L);/*創建對話框*/
printf(“*************create dialog**********************n”);}
/*****************************************************************
主窗口的過程函數
static int LedWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){
HDC hdc;
switch(message)
{
case MSG_PAINT:
hdc = BeginPaint(hWnd);
TextOut(hdc, 60, 60, “My leds control!”);
EndPaint(hWnd, hdc);
return 0;
case MSG_CLOSE:
DestroyMainWindow(hWnd);
PostQuitMessage(hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
*********************************************************************/ int MiniGUIMain(int argc, const char* argv[])
{
// MSG Msg;
// MAINWINCREATE CreateInfo;/*描述主窗口的屬性*/
#ifdef _MGRM_PROCESSES
JoinLayer(NAME_DEF_LAYER , “led” , 0 , 0);
/*選擇PROCESSES模式*/
#endif
printf(“****************into main*********************n”);
fd_led=open(“/dev/GPIO-Control”,0);
/*打開驅動設備*/
if(fd_led < 0)
{
perror(“open device led”);
exit(1);
}
ioctl(fd_led, 0, 0);
/*初始燈滅*/
ioctl(fd_led, 0, 1);
ioctl(fd_led, 0, 2);
ioctl(fd_led, 0, 3);
InitDialogBox(HWND_DESKTOP);
close(fd_led);/*********************************************************** CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;/窗口風格/
CreateInfo.dwExStyle=WS_EX_NONE;
/窗口擴展風格/
CreateInfo.spCaption=“MY_LED_CONTROL_WIN”;
/窗口標題/
CreateInfo.hMenu=0;
/菜單/
CreateInfo.hCursor= GetSystemCursor(0);
/光標/
CreateInfo.hIcon=0;
/圖標/
CreateInfo.MainWindowProc=LedWinProc;
/設置主窗口的窗口函數,所用發往該窗口的消息由該函數處理/
CreateInfo.lx=0;
/窗口位置/
CreateInfo.ty = 0;
CreateInfo.rx = 240;
CreateInfo.by = 180;
CreateInfo.iBkColor=COLOR_lightwhite;
/設置背景顏色/
CreateInfo.dwAddData=0;
/附加數值/
CreateInfo.hHosting=HWND_DESKTOP;
/設置窗口的托管窗口為桌面窗口/
hMainWnd = CreateMainWindow(&CreateInfo);
/創建主窗口,返回創建窗口的句柄/
if(hMainWnd == HWND_INVALID)
return-1;
ShowWindow(hMainWnd,SW_SHOWNORMAL);
/顯示窗口的顯示方式/
while(GetMessage(&Msg, hMainWnd))/獲取主窗口的句柄,指向MSG結構指針/
{
TranslateMessage(&Msg);
/將擊鍵消息轉換為MSG_CHAR消息,然后直接發送到窗口的過程函數/
DispatchMessage(&Msg);
/獲取消息的目標窗口的窗口過程,然后直接調用 該窗口過程函數對消息進行處理/
}
MainWindowThreadCleanup(hMainWnd);/清除主窗口所使用消息隊列的系統資源/ *****************************************************************************/
return 0;
}
#ifndef _MGRM_PROCESSES #include
第三篇:嵌入式操作系統程課程設計報告
目錄
一、實習任務和目的????????????1
二、實習基本要求?????????????1
三、實習題目???????????????1
四、實習地點???????????????1
五、實習內容???????????????3
六、實習總結、心得體會??????????8
七、參考資料???????????????9
0
一、實習的任務和目的:
本次實習的目的是在學生已掌握了嵌入式操作系統的知識、對當前嵌入式操作系統的主要種類和應用領域有較清晰的概念的基礎上,以嵌入式LINUX操作系統教學內容為指導,以S3C2410經典實驗箱為平臺,使學生掌握配置、裁剪、移植和維護嵌入式LINUX操作系統的技能和相關理論知識,具備一個初級嵌入式LINUX系統程序員的綜合技能。
本次實習的任務是通過教師對嵌入式LINUX的配置、裁剪、移植以及文件系統的移植等內容的講解,讓學生掌握如何搭建嵌入式開發環境、嵌入式LINUX系統移植、文件系統移植以及簡單的驅動程序的開發。
二、實習基本要求:
1、了解嵌入式操作系統技術前沿、應用領域、發展趨勢及相關領域研究成果;
2、熟悉嵌入式操作系統的特點、分類、基本概念;
3、熟悉主流實時操作系統。深入了解嵌入式LINUX,包括系統配置、裁剪、移植;
4、熟悉并掌握嵌入式文件系統的建立、移植;
5、以嵌入式處理器器S3C2410為例,掌握嵌入式LINUX驅動程序開發的一般方法。
三、實習題目:
1、復習LINUX系統基本操作,常用命令;
2、嵌入式LINU開發基礎知識;
3、嵌入式LINUX開發環境的建立;
4、Bootloader移植;
5、LINUX內核的配置、裁剪;
6、LINUX內核移植與編譯;
7、建立根文件系統;
8、模塊方式驅動程序設計;
9、中斷、LED驅動程序設計。
四、實習地點:
應用技術學院五樓四機房。
五、實習內容:
第一部分 嵌入式LINU開發基礎知識: 1.1 嵌入式LINUX簡介
嵌入式系統的定義為以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適用于應用系統,對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統,它的主要特點是潛入、專用。本次實訓的平臺是在LINUX下的ubuntu系統上進行的。
1.2 嵌入式LINUX開發平臺簡介
本次實訓的需要一臺主機及一塊開發板,它們需要滿足一定的硬件要求,主機的硬件要求是:有一個25針的并口接口,它用來連接JTAG連線,有一個9針的串口接口,支持網絡,至少20GB的硬盤,用到的開發板是s3c2410,它有如下的部件:64MB SDRAM,1MB NOR Flash,64MB NAND Flash,兩個網卡,5個串口(內置3個,外擴2個),音頻輸入輸出。2.5寸IDE接口,標準SD/MMC卡座,GPIO按鍵,外接I2C接口的實時時鐘(RTC)芯片。1.3 嵌入式LINUX開發流程
(1)在主機上編譯Bootloader,然后通過JTAG燒入單板,(2)在主機上編譯嵌入式LINUX內核,通過Bootloader燒入單板或直接啟動,(3)在主機上編譯各類應用程序,單板啟動內核后通過NFS運行他們,經過驗證后再燒入單板。1.4 嵌入式LINUX開發環境的建立
開發環境的搭建:硬件開發環境的搭建很簡單,將主機與目標板通過JTAG、串口線(接單板上的串口0)、網線(接單板上的網卡0)連接起來,將各類設備連接到目標板上即可,軟件的搭建環境相對要復雜的多,時間也要得多,首先第一步需要移植U—boot,然后再來燒寫LINUX內核,再創建根文件系統,最后才可以來寫相應的驅動程序來進行開發的!第二部分 嵌入式LINUX系統構建:
2.1 Bootloader移植
u-boot是德國DENX小組的開發用于多種嵌入式CPU的bootloader程序, u-boot不僅僅支持嵌入式LINUX系統的引導,當前,它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系統。u-boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。移植過程:
在主機上創建一個文件夾,把以下四個已下載的文件復制到里面,這四個文件分別為:
u-boot.bin,----LINUX操作系統啟動的bootloader;uImage,---LINUX操作系統內核;
root.cramfs,----根文件系統;yaffs.tar.bz2,----應用程序壓縮包。運行sjf2410-s命令如下:sjf2410-s /f:u-boot.bin。然后按回車,等待燒寫完成后,設置開發板的地址與服務器的地址,命令如下:設置本機服務器IP地址:(根據具體主機環境更改IP)setenv serverip 192.168.1.113,設置ARM設備IP地址:(隨意設置成與上面主機同一網段IP即可),setenv ipaddr 192.168.1.199,保存變量設置:saveenv。
2.2 內核裁剪與移植
LINUX本次實驗目錄下存放著已經修改好的博創經典2410平臺的內核源碼包,將該源碼包拷貝到宿主機LINUX系統中,解壓至本次實驗目錄,配置編譯生成內核uImage文件燒寫到ARM設備中。在內核根目錄下,用命令make menuconfig進入配置界面,對系統進行裁剪,如下:
選擇硬件系統
配置LCD驅動
網卡驅動
配置NANF Flash驅動
配置文件系統
然后運行 bootm 啟動內核即可。2.3 創建根文件系統
解壓busybox源碼后,進入busybox源代碼目錄,打開Makefile,修改兩個地方,分別是在Makefile文件中的CROSS_COMPILE=后面添加上arm-LINUX-這一行以及ARCH ?=后面改成arm.然后在busybox根目錄下使用命令make menuconfig進入配置界面進行配置,如圖:
Busybox截圖
退出后,使用命令make,make install。用shell腳本創建根文件系統的目錄結構,并在想要運行根文件系統的地方運行腳本,需要創建一個文件夾rootfs,里面包括了一些LINUX下的基本的文件。還需要把busybox源碼目錄下的/etc 的內容拷貝到此處創建的文件夾的etc下,修改拷貝過來的profile文件,修改初始化文件inittab和fstab,修改初始化的腳本文件,init.d/rcS,創建一個空的mdev.conf文件,在掛載根文件系統時用到,再把本機上的passwd,shadow,group文件拷貝過來,把busybox默認安裝目中的文件全部復制到這里的rootfs中,會發現多了LINUXrc->bin/busybox,這是掛載文件系統需要執行的,這時,在rootfs目錄下,使用命令cp-rvf /rootfs/busybox-1.12.2/_install/*./,,到此,就用busybox創建了一個基本的文件系統。
第三部分 設備驅動程序設計:
3.1 模塊方式驅動實驗
在這里,需要有兩個程序,一個驅動程序,一個用戶程序,驅動程序通過用戶程序來調用,完成基本的讀寫以及注冊設備號等,在本程序中,用戶程序非常簡單,驅動程序的核心部分是如下代碼所示:
static struct file_operations demo_fops = { owner: THIS_MODULE, write:demo_write, read: demo_read, ioctl: demo_ioctl, open: demo_open, release: };demo_release, 其他的所有程序都是在這個基礎上延伸出來的。還有一個注冊設備號的函數如示:
register_chrdev(0, DEVICE_NAME, &pxa270_fops);假設本驅動程序的源代碼名字是s3c2410_led.c編譯驅動程序模塊的方法是把驅動程序復制到內核目錄下的drivers/char子目錄下,在drivers/char/Makefile中增加一行:obl-m +=s3c2410_led.o,然后在內核根目錄下執行make modules.就生成drivers/char/s3c2410_led.ko,再把它復制到開發板上,就可以使用insmod s3c2410_led.ko,rmmod s3c2410_led.ko了,此時,就可以執行本用戶程序了,結果如下:
3.2 LED驅動實驗
本實驗的主要目的是寫一個驅動程序來點亮開發板上的一顆LED燈。主要的程序核心還是集中在怎么給led燈引腳一個電平以及用戶程序中ioctl程序的使用。程序的核心代碼如下:
static struct file_operations s3c24xx_leds_fops = {.owner =
THIS_MODULE,.open
=
s3c24xx_leds_open,.ioctl =
s3c24xx_leds_ioctl, };static int s3c24xx_leds_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg){
if(arg > 4){
return-EINVAL;
}
switch(cmd){
case IOCTL_LED_ON:
s3c2410_gpio_setpin(led_table[arg], 0);
return 0;
case IOCTL_LED_OFF:
s3c2410_gpio_setpin(led_table[arg], 1);
return 0;
default:
return-EINVAL;
} } 編譯好模塊后,復制到開發板目錄下即可在開發板下執行,點亮led燈。
命令led_test 1 off/on,如此,就可以關閉或點亮一個led燈了!3.3 中斷按鍵控制LED實驗 核心代碼如下:
注冊中斷:request_irq(button_irqs[i].irq, buttons_interrupt, button_irqs[i].flags,button_irqs[i].name,(void *)&press_cnt[i]);注冊備:register_chrdev(BUTTON_MAJOR, DEVICE_NAME, &s3c24xx_buttons_fops);中斷函數:
static irqreturn_t buttons_interrupt(int irq, void *dev_id){
volatile int *press_cnt =(volatile int *)dev_id;
*press_cnt = *press_cnt + 1;/*
ev_press = 1;
wake_up_interruptible(&button_waitq);
return IRQ_RETVAL(IRQ_HANDLED);} 同理,把它的目標文件放到內核根目錄下的drivers/char編譯后,把生成的模塊文件復制開發板下,即可完成相應的任務,通過按鍵可以來控制led燈了,同時,可以通過命令cat /proc/devices, cat /proc/interrupt來查看設備及中斷的注冊情況!
六、實習總結、心得體會:
通過為期將近幾周的嵌入式操作系統實習,我收獲頗深。這次實習雖然短,可是收獲很大,感覺平時上課學到的東西都沒有這幾天學到的多。正所謂:“實踐是檢驗真理的唯一標準”。這次實習可以形象的概括為:“山重水復疑無路,柳暗花明又一村”。只有自己經歷過才會真正的懂,書本知識還遠遠不夠!
此次嵌入式操作系統實習給我最深的體會就是:理論+細心+實踐才能在實際 生產中體現所學知識的價值。
在嵌入式行業發展如此快速完善的今天,理論與細心與實際的完美結合才能讓自己在專業領域占有一席之地。在實習中,我初步了解了嵌入式處理器S3C2410的工作原理、也加深了對嵌入式處理器S3C2410的認識;也見識了關于嵌入式處理器的一些工作方式等。
幾周的嵌入式操作系統實習結束了,做了好幾個小實驗,有成功也有失敗,然而終究還是學會了很多東西。在整個實習期間,我體會到了自己的進步,并且從中也體會到了它的快樂。實習也讓我明白了:第一,通過實踐真正覺得自己可以做些什么了有點存在的小成就感;第二,通過嵌入式操作系統實習,加強了我們的動手實踐能力和設計創新精神。作為信息時代的大學生基本的動手能力是一切工作和創造的基礎和必要條件。第三,在嵌入式操作系統實習的這些日子里,大家的團隊精神得到了很大的加強,閉門就會造車那是不可能的事情。
在為期兩周的實習當中感觸最深的便是實踐聯系理論的重要性,當遇到實際問題時,只要認真思考,運用所學的知識,一步一步的去探索,是完全可以解決遇到的一般問題的。本次實習的目的主要是:使我們嵌入式操作系統及LINUX相關操作有一定的感性和理性認識,培養和鍛煉我們的實際動手能力。使我們的理論知識與實踐充分地結合,作到不僅具有專業知識,而且還具有較強的實踐動手能力,能分析問題和解決問題的應用型技術人才,為以后的順利就業作好準備。此次實習學到了很多課內學不到的東西,比如獨立思考解決問題,出現差錯的隨機應變,和與人合作共同提高,都受益非淺,今后的制作應該更輕松,自己也都能扛的起并高質量的完成項目。在此,感謝老師及其他老師的細心指導,也同樣謝謝其他各組同學的無私幫助!
七、參考資料:
1、雅默著.構建嵌入式LINUX系統[M].北京:中國電力出版社.2004年
2、孫瓊著.嵌入式LINUX應用程序開發詳解[M].北京:人民郵電出版.2003年 3、2410經典實驗指導書3.2 北京博創興業科技有限公司2410經典實驗箱配套教材
4、韋東山著.嵌入式LINUX應用開發完全手冊
北京:人民郵電出版
第四篇:嵌入式系統基礎課程設計報告
河南機電高等專科學校
嵌入式系統基礎課程設計報告
系 部: 電子通信工程系 專 業: 班 級: 學生姓名: 學 號:
2012年 06月
嵌入式系統基礎課程設計任務書
1.時間:2012年06月11日~2012年06月15日 2.課程設計單位:河南機電高等專科學校
3.課程設計目的:深入學習單片機編程技巧,熟悉電子產品設計制作全過程。能夠利用匯編語言完成十字路口交通燈的設計。4.課程設計任務:
按交通燈的具體要求來寫
―――-紅色文字為說明,寫報告時請先刪除!!
嵌入式系統基礎課程設計報告
前言:
×××××××××××××××××××××××××××××××××××××××××××××××-----宋體,小四,不加粗,單倍行距
實訓報告: ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
??????
×××××××××××××××××××××××××××××××
―――-紅色文字為說明,寫報告時請先刪除!!
心得體會: ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
??????
××××××××××××××××××××××××××××××××××××××××××××××××××
參考文獻:
???以下紅色文字為“參考文獻”的示例,寫報告時請先刪除!!填寫上你自己的“參考文獻”
[1] 周小謙,丁功揚,郭日彩,三峽電力系統的形成和發展,電網技術。1998,88(3):p1-3 [2]-----宋體,小五,不加粗,單倍行距
第五篇:嵌入式系統基礎課程設計報告
河南機電高等專科學校
《嵌入式系統基礎》 課程設計報告
設計題目: 系 部: 電子通信工程系 班 級: 學 號: 學生姓名: 成 績:
2012年 05月
《嵌入式系統基礎》課程設計任務書 1.時間:2012年05月14日~2011年05月25日 2.課程設計單位:河南機電高等專科學校
3.課程設計目的:掌握《嵌入式系統基礎》課程基本概念、基本原理,具有一定的單片機設計能力,能夠利用所學知識完成設計內容,提高實際動手能力。4.課程設計任務:
①參考相關的的書籍、資料,根據設計要求完成原理圖設計; ②制作電路板并完成調試; ③繪制軟件流程圖; ④完成軟件設計并完成調試;
⑤作好筆記,對自己所發現的疑難問題及時請教解決; ⑥聯系自己所學知識,總結本次設計經驗; ⑦認真完成課程設計報告。
5.設計要求
根據所給具體的設計要求來寫!
《嵌入式系統基礎》課程設計報告
前言:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
一、硬件設計
1.設計思路及原理框圖
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
××××××××××××××××××××××××××××××× 2.采用的芯片功能介紹
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
××××××××××××××××××××××××××××××× 3.原理圖
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
×××××××××××××××××××××××××××××××
二、軟件設計
1.設計思路
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
××××××××××××××××××××××××××××××× 2.程序流程圖(必須要有)
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× ………………
××××××××××××××××××××××××××××××× 3.具體程序(可選,但流程圖一定要有)
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
×××××××××××××××××××××××××××××××
心得體會: ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
×××××××××××××××××××××××××××××××
參考文獻:
[1] 付家才 電子實驗與實踐.北京:高等教育出版社130-150頁
[2] 李東生、張勇、許四毛 《Protel 99SE電路設計技術入門與應用》電子工業出版社231-300頁
………………
格式要求:
標題按照所給模板格式書寫。
正文字體為:中文宋體,西文(字母和數字):Times New Roman,小四號字; 段落:兩端對齊,首行縮進2字符,行距固定值20磅,其他設置為默認。
―――-紅色文字為說明,寫報告時請先刪除!!