第一篇:基于ARMLINUX的嵌入式GUI的設(shè)計(jì)與開發(fā).
基于ARM LINUX的嵌入式GUI的設(shè)計(jì)與開發(fā)
摘 要:GUI設(shè)計(jì)在嵌入式系統(tǒng)設(shè)計(jì)中占據(jù)著舉足輕重的地位,MiniGUI為一種適合于嵌入式系統(tǒng)的、功能強(qiáng)大的GUI,本文介紹了基于ARM和Linux的MiniGUI移植方法以及在ARM開發(fā)板上實(shí)現(xiàn)普通手機(jī)操作界面的設(shè)計(jì)過程,并提出了相應(yīng)功能的實(shí)現(xiàn)方法,給出了設(shè)計(jì)的效果。
關(guān)鍵詞:嵌入式系統(tǒng);ARM;Linux;MiniGUI
1、引言
目前,嵌入式應(yīng)用非常廣泛。嵌入式系統(tǒng)由硬件和軟件兩大部分組成。硬件方面的主要核心是嵌入式處理器,以ARM為核的32位RISC處理器是中高端嵌入式應(yīng)用的代表。軟件方面一般由嵌入式操作系統(tǒng)和應(yīng)用軟件組成。嵌入式操作系統(tǒng)種類眾多,比如Linux、uCLinux,其具有開放源碼、免費(fèi)授權(quán)和資源豐富等優(yōu)點(diǎn),備受開發(fā)者的青睞。應(yīng)用軟件根據(jù)產(chǎn)品需求會(huì)用到圖形界面(GUI)、文件系統(tǒng)(FS)、網(wǎng)絡(luò)(TCP/IP協(xié)議棧)等軟件功能,其中,GUI對(duì)于提高人機(jī)交互友好性,易操作性具有很好的效果,而隨著圖形顯示設(shè)備的廣泛應(yīng)用,目標(biāo)產(chǎn)品對(duì)GUI的需求越來越多。
2、系統(tǒng)環(huán)境和構(gòu)架
系統(tǒng)實(shí)現(xiàn)環(huán)境采用SmartARM2200開發(fā)板及運(yùn)行在ARM上的uCLinux操作系統(tǒng)。
SmartARM2200開發(fā)板:CPU型號(hào)為L(zhǎng)PC2210,內(nèi)核規(guī)格為ARM7TDMI-S,60M,支持uCLinux操作系統(tǒng)[1] [2];上面帶有充足的存儲(chǔ)資源(PSRAM,NAND FLASH,NOR FLASH和E2EPRORM等)和豐富的接口(以太網(wǎng)接口、CF卡和SD卡接口,串口接口等),可使用2.2英寸240*320 TFT液晶屏,可使用JTAG仿真調(diào)試[3];
嵌入式Linux內(nèi)核[4]:uCLinux嵌入式操作系統(tǒng);
uCLinux開發(fā)平臺(tái)的構(gòu)建:
基于Linux嵌入式系統(tǒng)的設(shè)計(jì),其開發(fā)流程為如圖1所示:
圖1 Linux嵌入式系統(tǒng)開發(fā)流程
圖中,依次建立開發(fā)環(huán)境arm-elf-gcc,安裝uCLinux內(nèi)核,下載ZLG/BOOT,下載uCLinux內(nèi)核和文件系統(tǒng),為了調(diào)試uCLinux應(yīng)用程序,將宿主機(jī)的共享目錄加到開發(fā)板的/mnt目錄下,并啟動(dòng)NFS服務(wù)。MagicARM2200-S主芯片為L(zhǎng)PC2210,LPC2210芯片沒有內(nèi)部Flash,無法進(jìn)行ISP下載,需要額外的DownLoad程序。
3、MiniGUI移植
在宿主機(jī)上安裝MiniGUI:將MiniGUI函數(shù)庫(kù)源代碼和資源文件(MiniGUI-STR壓縮包)復(fù)制到PC機(jī)的RedHat 9.0特定目錄上,解壓,編譯。
在目標(biāo)板的uCLinux操作系統(tǒng)上運(yùn)行MiniGUI應(yīng)用程序[3],需要:
1)由于不同目標(biāo)機(jī)的圖形顯示設(shè)備與輸入設(shè)備不一致,所以需要為MiniGUI編寫相應(yīng)的GAL和IAL(驅(qū)動(dòng)程序),再于MiniGUI的源代碼一起交叉編譯生成MiniGUI的靜態(tài)鏈接庫(kù)文件(uCLinux不支持共享庫(kù),只能使用靜態(tài)連接庫(kù)); 2)MiniGUI應(yīng)用程序也在宿主機(jī)上進(jìn)行交叉編譯,并與MiniGUI靜態(tài)鏈接庫(kù)生成目標(biāo)板可執(zhí)行的FLAT格式文件,交叉編譯如圖2所示; 圖2 MiniGUI應(yīng)用程序的交叉編譯
3)在目標(biāo)板的uCLinux操作系統(tǒng)上搭建MiniGUI運(yùn)行環(huán)境(安裝MiniGUI的資源文件res和運(yùn)行的配置文件MiniGUI.cfg),將MiniGUI應(yīng)用程序(FLAT格式)下載和運(yùn)行。
根據(jù)系統(tǒng)要求,需安裝MiniGUI資源文件,并修改運(yùn)行時(shí)的配置文件MiniGUI.cfg。
4、系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 4.1系統(tǒng)總體框架
基于SmartARM2200開發(fā)板,進(jìn)行MiniGUI系統(tǒng),并模擬手機(jī)顯示部分主要功能:首頁,圖標(biāo)選擇界面,電話本,信息,游戲,其他等六大模塊,系統(tǒng)總體框架如圖3.1所示:
1)首頁:具有顯示靜態(tài)封面圖片,更改、顯示時(shí)間等功能;
2)圖形選擇界面:提供一個(gè)以圖標(biāo)加標(biāo)簽文字的方式供用戶瀏覽選擇條目的界面;
3)電話本管理:提供記錄姓名、手機(jī)、電話、地址等信息,并且可以添加、修改、設(shè)計(jì)適合手機(jī)鍵盤輸入的拼音輸入法程序,滿足中文姓名,中文短信等漢字輸入的需要,鍵盤布局如圖3.2所示;
4)信息管理:提供編寫新信息,瀏覽收信箱和發(fā)信箱等的操作界面; 5)游戲:提供一到兩個(gè)單機(jī)游戲,比如貪吃蛇,俄羅斯方塊; 6)其他:利用GUI繪圖函數(shù)繪制幾幅優(yōu)美的圖像,制作鬧鐘等;
圖3.1系統(tǒng)整體框圖圖
圖3.2鍵盤布局圖
注:在主界面下,可以通過按左右鍵來進(jìn)入圖形選擇界面,電話本管理和短信管理;在圖形選擇界面下可以通過選擇不同的圖標(biāo)來進(jìn)入不同的操作界面。
4.2 系統(tǒng)模塊設(shè)計(jì)
4.2.1主界面功能的實(shí)現(xiàn)如下:
1)主窗口的創(chuàng)建部分[5]
InitMainWindow();
// 設(shè)置各項(xiàng)屬性,并建立主窗口
ShowWindow(hMainWnd,SW_SHOWNORMAL);
// 顯示主窗口
2)消息循環(huán)
while(GetMessage(&Msg,hMainWnd))
{ TranslateMessage(&Msg); DispatchMessage(&Msg);}
3)填充背景色和顯示漢字
LoadBitmapFromFile(HDC_SCREEN,&mainskin,“res/skin2.bmp”);
FillBoxWithBitmap(hdc,0,0,MWINDOW_RX,283,&mainskin);
TextOut(hdc,30,295,“信息”); // 顯示文字
其中資源圖片一般在MiniGUI建立主窗口的過程中發(fā)送MSG_CREATE消息時(shí)加載(邏輯字體也在此時(shí)創(chuàng)建),而背景色的填充和漢字的顯示則是在窗口初始顯示,發(fā)送MSG_PAINT消息時(shí)繪制,而且必須在指定的設(shè)備上下文中操作:
hdc = BeginPaint(hWnd);
// 獲得設(shè)備hdc
EndPaint(hWnd,hdc);
// 釋放設(shè)備hdc
4)時(shí)間操作
在MSG_CREATE消息時(shí),啟動(dòng)1s的定時(shí)器:SetTimer(hWnd,ID_TIME,100);在定時(shí)器消息MSG_TIMER中獲取當(dāng)前時(shí)間,并顯示出來。
4.2.2圖形選擇界面的功能實(shí)現(xiàn)
當(dāng)有鍵盤按下時(shí),系統(tǒng)會(huì)發(fā)送MSG_KEYDOWN,處理此消息時(shí),通過判斷按鍵方向,確定當(dāng)前選擇的圖標(biāo),當(dāng)選擇圖標(biāo)發(fā)生變化時(shí),即用背景色重繪原有邊框,用另一種顏色繪制新的邊框,并將標(biāo)簽文字重寫在右下角的位置。
4.2.3電話本管理模塊完成的功能:
1)顯示電話本名單,通過上下鍵移動(dòng)可選中不同的名單,同時(shí)顯示其電話號(hào)碼;
2)選中一個(gè)名單時(shí),可以查看其詳細(xì)信息(姓名,手機(jī),固話,住址,排序,類型等),并且可以編輯修改;
3)當(dāng)選中“新建”時(shí),可以創(chuàng)建一個(gè)新的電話名單和其詳細(xì)信息;
4)姓名和住址的編輯支持中文拼音輸入法,通過2~9按鍵上標(biāo)注的26個(gè)字母組合,可以輸入常見的漢字。
電話本管理模塊的實(shí)現(xiàn)方法如下:
1)電話本列表框?qū)崿F(xiàn):
{CTRL_LISTBOX,//列表框控件定義:
WS_VISIBLE WS_VSCROLL WS_BORDER LBS_NOTIFY,//LBS_SORT,//
L
BS_AUTOCHECKBOX,1,0,238,263,ID_PhoneList,”“,0,}
在初始化和更新條目時(shí)需要填充列表框,清空列表框和填充函數(shù)分別為:
SendDlgItemMessage(hWnd,ID,LB_RESETCONTENT,0,0);
SendDlgItemMessage(hWnd,ID,LB_ADDSTRING,0,(LPARAM)myphonenote[i].name);
更改選擇條目字符串和更改反白條位置的函數(shù)分別為:
SendDlgItemMessage(hwnd, ID, LB_SETTEXT,index,buff),SendDlgItemMessage(hwnd,ID,LB_SETCURSEL,index,0L);
2)條目明細(xì)——查看框
分別創(chuàng)建相應(yīng)的靜態(tài)框和編輯框,列表框,并填充相應(yīng)的值即可。
3)條目明細(xì)——編輯框
初始化時(shí)把光標(biāo)賦予姓名框,備份當(dāng)前的條目信息。
SendMessage(hwnd,EM_LIMITTEXT,10,0L);
4)拼音輸入框
拼音輸入法實(shí)現(xiàn)了手機(jī)電話本的修改維護(hù)和信息的編寫,它不僅窗口比較多,切換頻繁,而且需要漢字字庫(kù)和鍵盤編碼譯碼的支持,顯示界面實(shí)現(xiàn)的難度比較大,其實(shí)現(xiàn)框架圖如圖4所示:
圖4 拼音輸入法界面
5、系統(tǒng)實(shí)現(xiàn)
經(jīng)過交叉編譯,通過FTP或NFS,和MiniGUI的資源文件、配置文件一起下載到構(gòu)架好uCLinux操作平臺(tái)的ARM板,重啟運(yùn)行,程序在開發(fā)板上運(yùn)行時(shí)部分界面效果比較理想,如圖5所示:
圖5 運(yùn)行結(jié)果
參考文獻(xiàn):
[1]李巖,榮盤祥編著.基于S3C44B0X嵌入式uCLinux系統(tǒng)原理及應(yīng)用.清華大學(xué)出版社.[2] 廣州周立功單片機(jī)發(fā)展有限公司.uCLinux開發(fā)平臺(tái)構(gòu)建.[3]周立功等著.ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程(二).北京航空航天大學(xué)出版社.[4]林曉飛,劉彬等編著.基于ARM嵌入式Linux應(yīng)用開發(fā)與實(shí)例教程.清華大學(xué)出版社.[5]北京飛漫軟件技術(shù)有限公司.MiniGUI編程指南.
第二篇:嵌入式開發(fā)工程師
任職要求:
1、大學(xué)本科及以上學(xué)歷,2年以上工作經(jīng)驗(yàn),計(jì)算機(jī)電子通訊類專業(yè)畢業(yè);
2、能夠熟練使用POWER PCB或PROTEL或ORCAD等電路設(shè)計(jì)軟件進(jìn)行PCB設(shè)計(jì);
3、熟悉電子元器件,能獨(dú)立設(shè)計(jì)數(shù)字及模擬電路,擁有單片機(jī)開發(fā)工作經(jīng)驗(yàn),懂得RF433無線及紅外遙控等相關(guān)知識(shí);
4、熟練使用C語言,有嵌入式開發(fā)工作開發(fā)及智能家居防盜報(bào)警產(chǎn)品經(jīng)驗(yàn)者優(yōu)先。
崗位職責(zé):
1、新產(chǎn)品項(xiàng)目設(shè)計(jì)開發(fā)工作;
2、為相關(guān)部門及項(xiàng)目提供技術(shù)支持;
3、產(chǎn)品售后返修分析,品質(zhì)不斷提升性能改進(jìn);
4、組織對(duì)新研發(fā)產(chǎn)品的制樣、驗(yàn)證、試產(chǎn)、量產(chǎn)等工作的確認(rèn)與審核。
第三篇:嵌入式Linux開發(fā)流程
嵌入式Linux開發(fā)流程
嵌入式 linux開發(fā),根據(jù)應(yīng)用需求的不同有不同的配置開發(fā)方法,但是一般都經(jīng)過以下過程:
建立開發(fā)環(huán)境。操作系統(tǒng)一般 REDHAT-LINUX,版本 7 到9 都可以,選擇定制安裝或全部安裝,通過網(wǎng)絡(luò)下載相應(yīng)的 GCC 交叉編譯器進(jìn)行安裝(比如 arm-linux-gcc、arm-uclibc-gcc),或者安裝產(chǎn)品廠家提供的交叉編譯器。
配置開發(fā)主機(jī)。配置 MINICOM,一般參數(shù)為115200,數(shù)據(jù)位 8位,停止位 1,無奇偶校驗(yàn),軟硬件控制流設(shè)為無。在 WINDOWS 下的超級(jí)終端的配置也是這樣。MINICOM軟件的作用是作為調(diào)試嵌入式開發(fā)板信息輸出的監(jiān)視器和鍵盤輸入的工具;配置網(wǎng)絡(luò),主要是配置 NFS 網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡(jiǎn)化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過程。
建立引導(dǎo)裝載程序BOOTLOADER,從網(wǎng)絡(luò)上下載一些公開源代碼的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據(jù)自己具體芯片進(jìn)行移植修改。有些芯片沒有內(nèi)置引導(dǎo)裝載程序,比如三星的 ARM7、ARM9 系列芯片,這樣就需要編寫燒寫開發(fā)板上 flash 的燒寫程序,網(wǎng)絡(luò)上有免費(fèi)下載的 WINDOWS 下通過JTAG并口簡(jiǎn)易仿真器燒寫 ARM 外圍 flash 芯片的程序。也有 LINUX 下公開源代碼的J-FLASH 程序。如果不能燒寫自己的開發(fā)板,就需要根據(jù)自己的具體電路進(jìn)行源代碼修改。這是讓系統(tǒng)可以正常運(yùn)行的第一步。如果你購(gòu)買了廠商提供的仿真器,當(dāng)然比較容易燒寫flash了,但是其中的核心技術(shù)是無法了解的。這對(duì)于需要迅速開發(fā)應(yīng)用的人來說可以極大地提高開發(fā)速度。
下載別人已經(jīng)移植好的 LINUX 操作系統(tǒng),如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有專門針對(duì)你所使用的CPU移植好的 LINUX 操作系統(tǒng)那是再好不過,下載后再添加自己的特定硬件的驅(qū)動(dòng)程序,進(jìn)行調(diào)試修改,對(duì)于帶 MMU的 CPU可以使用模塊方式調(diào)試驅(qū)動(dòng),對(duì)于 UCLINUX 這樣的系統(tǒng)好像只能編譯進(jìn)內(nèi)核進(jìn)行調(diào)試。
建立根文件系統(tǒng),從下載使用 BUSYBOX 軟件進(jìn)行功能裁減,產(chǎn)生一個(gè)最基本的根文件系統(tǒng),再根據(jù)自己的應(yīng)用需要添加其他的程序。默認(rèn)的啟動(dòng)腳本一般都不會(huì)符合應(yīng)用的需要,所以就要修改根文件系統(tǒng)中的啟動(dòng)腳本,它的存放位置位于 /etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自動(dòng)掛裝文件系統(tǒng)的配置文件/etc/fstab,具體情況會(huì)隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用 mkcramfs、genromfs 等工具產(chǎn)生燒寫映象文件。
建立應(yīng)用程序的 flash 磁盤分區(qū),一般使用JFFS2 或 YAFFS 文件系統(tǒng),這需要在內(nèi)核中提供這些文件系統(tǒng)的驅(qū)動(dòng),有的系統(tǒng)使用一個(gè)線性 flash(NOR 型)512K-32M,有的系統(tǒng)使用非線性 flash(NAND型)8-512M,有的兩個(gè)同時(shí)使用,需要根據(jù)應(yīng)用規(guī)劃 flash的分區(qū)方案。
開發(fā)應(yīng)用程序,可以下載到根文件系統(tǒng)中,也可以放入 YAFFS、JFFS2 文件系統(tǒng)中,有的應(yīng)用程序不使用根文件系統(tǒng),而是直接將應(yīng)用程序和內(nèi)核設(shè)計(jì)在一起,這有點(diǎn)類似于UCOS-II 的方式。
燒寫內(nèi)核、根文件系統(tǒng)、應(yīng)用程序。
發(fā)布產(chǎn)品。
第四篇:嵌入式開發(fā)工程師-簡(jiǎn)歷
【個(gè)人信息】姓名:
身高:
性別:
學(xué)歷:
籍貫:
專業(yè):電子信息工程
聯(lián)系電話:
E-mail:
【求職意向】? 嵌入式開發(fā)工程師或相關(guān)工作,對(duì)LINUX驅(qū)動(dòng)開發(fā)極感興趣
【工作經(jīng)驗(yàn)】? 2009.3----2010.3中山長(zhǎng)寶GPS衛(wèi)星導(dǎo)航有限公司
? 2009.1----2009.3中山世博游藝有限公司
【教育背景】? 2010.3——2010.7廣州粵嵌通信科技股份有限公司(簡(jiǎn)稱粵嵌教育)ARM+Linux培訓(xùn)
? 2005.9——2009.6廣州大學(xué)松田學(xué)院電子信息工程工學(xué)學(xué)士
【項(xiàng)目經(jīng)驗(yàn)】?
?
?
?
? GPS車載終端,GPS個(gè)人定位器(從事一年相關(guān)工作)基于ARM9的嵌入式智能家居系統(tǒng)(QT圖像界面,應(yīng)用程序,驅(qū)動(dòng)等)基于ARM9的嵌入式視頻點(diǎn)播系統(tǒng)(包括本地播放,網(wǎng)絡(luò)播放)ARM9(S3C2440)的嵌入式系統(tǒng)移植(Uboot,Kernel,Rootfs,Driver)LINUX簡(jiǎn)單聊天工具
【相關(guān)技能】
?
?
?
?
?
?
?
?
?
? 英語水平: 四 級(jí) 掌握C、C++編程,有良好的編程風(fēng)格 了解Linux內(nèi)核機(jī)制,熟悉Linux驅(qū)動(dòng)開發(fā) 熟練使用單片機(jī)(如STC系列,SST系列,INTEL系列)熟悉ARM9的硬件結(jié)構(gòu) 熟悉Linux操作系統(tǒng)、交叉編譯環(huán)境,掌握常用腳本編寫 熟悉BootLoader制作,內(nèi)核的剪裁,驅(qū)動(dòng)及根文件系統(tǒng)的移植 熟悉QT編程 , TCP/IP協(xié)議,掌握Linux應(yīng)用編程 了解SQL基礎(chǔ)知識(shí) 熟悉GSM.GPS的使用
【語言水平】? 粵語/國(guó)語流利;英語已通過CET-4,可閱讀專業(yè)相關(guān)資料
項(xiàng)目簡(jiǎn)介
? GPS車載終端,GPS個(gè)人定位器
軟件環(huán)境: KEIL 51
硬件環(huán)境: BENQ M23,M33 通信模塊,51單片機(jī),和GPS模塊
項(xiàng)目描述: 通過MCU把GPS采集的數(shù)據(jù)處理后,通過串過發(fā)送AT指令使GSM
撥通GPRS網(wǎng)絡(luò),再把采集的GPS數(shù)據(jù),按照定義好的協(xié)議上存到監(jiān)
控平臺(tái)
? ARM9(S3C2440)LED流水燈、LCD文字及圖片顯示設(shè)計(jì)
軟件環(huán)境: ADS1.2
硬件環(huán)境:ARM9(2440)開發(fā)板
項(xiàng)目描述: 將設(shè)計(jì)的程序移植到ARM9上,并成功驅(qū)動(dòng)LED、LCD,完成LED
流水燈、LCD文字及圖片顯示項(xiàng)目
? ARM9(S3C2440)嵌入式系統(tǒng)移植
軟件環(huán)境: Linux2.6.24,U-boot,Qtopia
硬件環(huán)境: ARM9(2440)開發(fā)板
項(xiàng)目描述: 在2440上成功完成了U-boot移植,Linux內(nèi)核的剪裁與移植,根文
件系統(tǒng)的制作,并完成了LED、LCD等驅(qū)動(dòng)的移植。
? 基于ARM9的VOD點(diǎn)播系統(tǒng)
軟件環(huán)境: Linux2.6.12,U-boot,Qtopia
硬件環(huán)境: GEC2440開發(fā)板
項(xiàng)目描述: 培訓(xùn)實(shí)戰(zhàn)項(xiàng)目,完成了S3C2440嵌入式系統(tǒng)的整體移植,它基于
QT圖形界面,移植了MPlayer播放器,實(shí)現(xiàn)了VOD(本地和網(wǎng)絡(luò))
多媒體點(diǎn)播,? ARM9(S3C2440)嵌入式智能家居系統(tǒng)
軟件環(huán)境: Linux2.6.12,U-boot,Qtopia
硬件環(huán)境: ARM9(2440)開發(fā)板
項(xiàng)目描述: 本系統(tǒng)主要實(shí)現(xiàn)溫度檢測(cè),紅外檢測(cè),蜂鳴器報(bào)警,步進(jìn)機(jī)轉(zhuǎn)動(dòng)(模擬控
制家電),GSM短信通知等驅(qū)動(dòng),QT圖形界面顯示和應(yīng)用編程.把溫
度傳感器和紅外線采集的數(shù)據(jù),傳給應(yīng)用程序,應(yīng)用程序把數(shù)據(jù)顯示
在QT界面,當(dāng)應(yīng)用程序檢測(cè)到溫度過高或有人闖進(jìn)時(shí),應(yīng)用程序就調(diào)
用蜂鳴器報(bào)警驅(qū)動(dòng),并發(fā)短信通知主人,主人也可以下發(fā)短信控制步
進(jìn)機(jī)轉(zhuǎn)動(dòng)
本人做的LINUX驅(qū)動(dòng)簡(jiǎn)介
? ds18b20溫度傳感器Linux驅(qū)動(dòng)
該驅(qū)動(dòng)為字符型驅(qū)動(dòng)程序,能從ds18b20芯片讀取溫度信息.ds18b20芯片采用了獨(dú)特的1-wire bus技術(shù),只用一根數(shù)據(jù)線即可實(shí)現(xiàn)與cpu芯片的連接(利用了cpu gpio本身的弱上拉電阻)。本驅(qū)動(dòng)程序的重點(diǎn)是實(shí)現(xiàn)字符驅(qū)動(dòng)的讀函數(shù)接口。由于硬件連線簡(jiǎn)單,對(duì)ds18b20的軟件操作較為繁瑣,每一個(gè)操作都要要經(jīng)過以下三個(gè)步驟:(1)芯片初始化(2)芯片選擇(因?yàn)橐痪€總線上可掛載多個(gè)ds18b20, 所以必須通過一定的機(jī)制指明操作的對(duì)象)(3)發(fā)送功能命令(例如,溫度查詢命令)和讀取數(shù)據(jù)。在初始化的步驟中,cpu拉低數(shù)據(jù)線,然后釋放數(shù)
據(jù)線,經(jīng)過一定時(shí)間讀取數(shù)據(jù)線上的值,如為低電平,則表明數(shù)據(jù)上掛載了ds18b20,否則初始化失敗。在芯片選擇的步驟中,由于只掛載了一片ds18b20, 所以只需發(fā)送skip rom命令即可。在發(fā)送功能命令的步驟中,首先發(fā)送溫度查詢命令(convert t), 然后在數(shù)據(jù)線上讀取兩個(gè)字節(jié)的溫度數(shù)據(jù),溫度數(shù)據(jù)按由低位低字節(jié)向高位高字節(jié)的順序發(fā)送,余下的為溫度無關(guān)數(shù)據(jù),可忽略。溫度數(shù)據(jù)的0-10位為數(shù)值位(最小單位為0.0625), 11-15位為擴(kuò)展符號(hào)位。該驅(qū)動(dòng)使用linux的udelay函數(shù)來實(shí)現(xiàn)時(shí)序操作所要求的延時(shí)操作。
? 使用內(nèi)存模擬塊設(shè)備并掛載ext2文件系統(tǒng)(簡(jiǎn)單塊設(shè)備驅(qū)動(dòng))
本驅(qū)動(dòng)程序使用kmalloc分配出一塊內(nèi)存區(qū)域來模擬塊設(shè)備,并在該塊設(shè)備上掛載ext2文件系統(tǒng)。本驅(qū)動(dòng)程序同時(shí)實(shí)現(xiàn)了字符設(shè)備和塊設(shè)備驅(qū)動(dòng)接口。塊設(shè)備的內(nèi)容通過字符驅(qū)動(dòng)的寫函數(shù)由用戶空間寫入。塊設(shè)備接口實(shí)現(xiàn)的重點(diǎn)是其初始化函數(shù)和request函數(shù)的實(shí)現(xiàn)。在初始化函數(shù)中完成以下操作:注冊(cè)塊設(shè)備主設(shè)備號(hào)(register_blkdev),注冊(cè)request函數(shù)的實(shí)現(xiàn)并獲取與之關(guān)聯(lián)的request_queue,設(shè)置request_queue的一些參數(shù)(例如,blk_queue_hardsect_size和blk_queue_max_sectors),分配(alloc_disk)和設(shè)置塊設(shè)備結(jié)構(gòu)體gendisk,注冊(cè)gendisk。在request函數(shù)的實(shí)現(xiàn)中完成以下操作:獲取request_queue中的第一個(gè)request結(jié)構(gòu)體(elv_next_request), 遍歷該request結(jié)構(gòu)體中每一個(gè)bio(rq_for_each_bio)中的每一個(gè)segment(bio_for_each_segment),在循環(huán)體中將每個(gè)segment的數(shù)據(jù)發(fā)送到塊設(shè)備控制器(或從塊設(shè)備控制器中讀入segment中)。遍歷完成后,從request_queue中移除該request結(jié)構(gòu)體(end_that_request_first),重復(fù)以上操作,直到request_queue為空,最后調(diào)用end_that_request_last做一些收尾工作??梢钥吹?,塊設(shè)備的驅(qū)動(dòng)格式較為固定,不像字符驅(qū)動(dòng)那樣靈活。文件系統(tǒng)通過以下方法制作:首先建立一個(gè)2M大小的“空白”文件(dd),然后格式化該文件(mkfs.ext2),最后通過mount命令進(jìn)行掛載,并創(chuàng)建文件系統(tǒng)內(nèi)容。制作好的文件系統(tǒng)通過字符驅(qū)動(dòng)的寫接口寫入驅(qū)動(dòng)內(nèi)存(cat), 最后掛載塊設(shè)備。
? 蜂鳴器驅(qū)動(dòng)
本驅(qū)動(dòng)程序?qū)儆谧址万?qū)動(dòng),由于該蜂鳴器物理硬件連接的是定時(shí)器的TOUT1管腳,只要實(shí)現(xiàn)定時(shí)器1的PWM功能即可,實(shí)現(xiàn)PWM功能,我們需要設(shè)置定時(shí)器的頻率,也就是蜂鳴器的頻率,并設(shè)置占空比.蜂鳴器啟動(dòng)的代碼在IOCTL系統(tǒng)調(diào)用里實(shí)現(xiàn),并把蜂鳴器的響應(yīng)時(shí)間,以參數(shù)形式傳給IOCTL這自己定義的函數(shù).驅(qū)動(dòng)蜂鳴器。
? 紅外感應(yīng)驅(qū)動(dòng)
本驅(qū)動(dòng)程序?qū)儆谧址万?qū)動(dòng),紅外感應(yīng)的原理,簡(jiǎn)單的描述就是當(dāng)有人靠近時(shí),該模塊相應(yīng)的管腳會(huì)產(chǎn)生高電平,沒人靠近時(shí),該管腳為低電平.此工作原理,相當(dāng)于一個(gè)外部中斷,所以只要住一個(gè)帶有外部中斷的字符驅(qū)動(dòng)即可
? GSM驅(qū)動(dòng)(即串口驅(qū)動(dòng))
本驅(qū)動(dòng)程序?qū)儆谧址万?qū)動(dòng),首先用ioremap申請(qǐng)串口相關(guān)控制寄存器,再編寫串口接受和發(fā)送的中斷程序,當(dāng)寄存器UTRSTAT的第0位為真,表示接受到收據(jù),當(dāng)寄存器UTRSTART第2位為1時(shí),表示可以發(fā)送寄存器為空,可以發(fā)送數(shù)據(jù)
【求職感言】? 我對(duì)嵌入式計(jì)算機(jī)行業(yè)抱有熱情,有強(qiáng)烈的求知欲和對(duì)新技術(shù)和新方法的熱
忱,希望能得到一個(gè)良好的平臺(tái)和起點(diǎn),得到鍛煉和提升的機(jī)會(huì)
【業(yè)余愛好】
● 看書,籃球,足球,魔獸爭(zhēng)霸
【自我評(píng)價(jià)】●具備吃苦、耐勞的能力,敢于面對(duì)錯(cuò)誤和承擔(dān)責(zé)任。
第五篇:關(guān)于嵌入式開發(fā)的一點(diǎn)建議
CSDN:很多人都講嵌入式開發(fā)很難,能不能就你學(xué)習(xí)和工作經(jīng)驗(yàn)與大家分享下嵌入式開發(fā)如何開始和深入?作為嵌入式研發(fā)工程師,你認(rèn)為其應(yīng)具備哪些知識(shí)結(jié)構(gòu)和實(shí)戰(zhàn)能力? 卜茂霞:說到嵌入式開發(fā)如何開始和深入,其實(shí)我也沒有特別的方法,在這里僅談下我的個(gè)人見解吧。做嵌入式開發(fā)必須具備良好的C語言功底,匯編雖然不是必須,但懂點(diǎn)更好。其次可以到網(wǎng)上找一個(gè)比較流行的MCU開發(fā)板,比如STM32做為學(xué)習(xí)開發(fā)板,參照示例代碼,自己動(dòng)手編譯燒錄跑程序,比如跑馬燈的程序,深刻了解整個(gè)開發(fā)過程。接下來可以學(xué)習(xí)小型的實(shí)時(shí)操作系統(tǒng),比如UC/OS和RT-Thread等,如果C語言比較好的話可以嘗試了解這個(gè)實(shí)時(shí)操作系統(tǒng)的原理部分,嘗試閱讀其源碼,掌握其使用技巧。而接下來最好是能參與具體的開發(fā)項(xiàng)目,負(fù)責(zé)幾個(gè)模塊,寫寫驅(qū)動(dòng),或做應(yīng)用。
需要強(qiáng)調(diào)的是,每個(gè)過程一定要自己嘗試動(dòng)手,不要停留在書本或官方提供的開發(fā)手冊(cè)上,一定要通過自己的實(shí)踐去驗(yàn)證自己想法,在這個(gè)過程中通過不斷思考與驗(yàn)證,有問題找經(jīng)驗(yàn)豐富的同事或在網(wǎng)上找答案,另外最好能將心得記錄下來(比如說寫CSDN博客),并不斷總結(jié)。這樣持之以恒,不知不覺你就會(huì)發(fā)現(xiàn)已經(jīng)進(jìn)入資深嵌入式開發(fā)工程師的行列了。個(gè)人認(rèn)為嵌入式開發(fā)工程師應(yīng)具備:1.良好的C語言功底。2.至少熟悉一款MCU,其它的技能可以在具體項(xiàng)目中不斷學(xué)習(xí)來補(bǔ)充。