第一篇:個(gè)人簡(jiǎn)歷CC++和ARM和Linux和C (7)
個(gè)人簡(jiǎn)歷
個(gè)人基本情況姓名:xxxx性別:男出生日期:19xxxx 03民族:漢
籍貫:xxxx春學(xué)歷:本科
外語(yǔ)水平:CET-4畢業(yè)學(xué)校:xxxx技術(shù)學(xué)院
畢業(yè)時(shí)間:20xxxx 7聯(lián)系電話:1xxxx 2056
E-MAIL:xxxx 111@hotmail.com
求職意向
嵌入式開(kāi)發(fā)工程師
專業(yè)技能? 掌握嵌入式Linux C文件I/O、多進(jìn)程和多線程,進(jìn)程間通信(IPC),socket
編程,熟悉TCP,UDP,I/O多路復(fù)用等網(wǎng)絡(luò)編程。
? 掌握Linux下常用字符設(shè)備驅(qū)動(dòng),了解塊、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)。
? 熟悉啟動(dòng)程序Bootloader編寫(xiě)、Linux內(nèi)核裁減、內(nèi)核移植、交叉編譯、根
文件系統(tǒng)制作等整個(gè)流程。
? 熟悉ARM處理器體系結(jié)構(gòu)、編程環(huán)境、指令集、匯編與C及C++ 混合編程等。? 熟悉Android的Driver->HAL->JNI->Framework->APP架構(gòu),如led、sensor
架構(gòu)等。
? 熟悉C、C++、Qt、Sqlite,有良好的編程風(fēng)格和工作習(xí)慣。
? 了解ucosII操作系統(tǒng)的移植及API應(yīng)用。
? 具備良好的溝通交流能力和英文資料閱讀能力。
項(xiàng)目經(jīng)驗(yàn)? 項(xiàng)目1:基于QT的局域網(wǎng)聊天軟件
主要技術(shù):C++(QT)、tcp、udp、sqlite
開(kāi)發(fā)工具:QT4.6、sqliteadmin、photoshop9.0
項(xiàng)目描述:服務(wù)器端通過(guò)數(shù)據(jù)庫(kù)管理所有注冊(cè)用戶的信息,并實(shí)時(shí)顯示新注 冊(cè)和用戶上下線時(shí)的信息(上下線信息會(huì)廣播給所有在線用戶,客戶端會(huì)顯 示XX用戶上線或下線了),在新用戶注冊(cè)或是用戶登錄的時(shí)候,會(huì)對(duì)用戶 信息進(jìn)行驗(yàn)證(核對(duì)數(shù)據(jù)庫(kù)已有信息),反饋給客戶端各種出錯(cuò)信息(用戶 不存在請(qǐng)注冊(cè)、密碼錯(cuò)誤、用戶已經(jīng)存在等信息),只有當(dāng)驗(yàn)證通過(guò)時(shí)客戶 端才會(huì)顯示好友列表窗口,用戶可以選擇任何在線好友進(jìn)行聊天操作(通過(guò)
服務(wù)器轉(zhuǎn)發(fā))。服務(wù)器端還提供密碼找回功能和實(shí)時(shí)廣播功能。
職責(zé)描述:負(fù)責(zé)服務(wù)器端與客戶端全部程序的編寫(xiě)。
? 項(xiàng)目2:基于Android平臺(tái)智能家居
開(kāi)發(fā)工具:ARM-cortexA8-S5PC100開(kāi)發(fā)板、ARM-cortex M0開(kāi)發(fā)板、Android
2.1、Eclipse、Keil、GNU工具、根文件系統(tǒng)采用ramdisk、用戶文件系統(tǒng)采用yaffs2。
功能A:通過(guò)多個(gè)M0獲取多個(gè)房間的情況,包括溫度、濕度、光感、加速度等??梢钥刂泼總€(gè)房間的設(shè)備,比如風(fēng)扇、電燈、報(bào)警器等。
房間有門禁,有人刷卡時(shí)可以在A8終端顯示刷卡人證件信息。
自動(dòng)加載刪除房間節(jié)點(diǎn)。
個(gè)人主要負(fù)責(zé):
M0終端的溫濕度等數(shù)據(jù)采集,發(fā)給相應(yīng)的A8主機(jī),并可以接收A8主機(jī)發(fā)來(lái)的命令來(lái)控制風(fēng)扇,燈等??梢圆捎寐銠C(jī)程序或ucosII實(shí)時(shí)操作系統(tǒng)來(lái)實(shí)現(xiàn)。功能B:實(shí)現(xiàn)對(duì)LED燈檢測(cè)與控制,對(duì)蜂鳴器的控制,對(duì)按鍵的檢測(cè),對(duì)RTC的讀取與設(shè)置,對(duì)溫度、ADC值、方向傳感器模擬值的讀取與處理。
個(gè)人主要負(fù)責(zé):
ADC驅(qū)動(dòng):采用ADC子系統(tǒng),可以防止與觸摸屏發(fā)生沖突。以及它的HAL層,其它借助Android的傳感器系統(tǒng)實(shí)現(xiàn)。
LM75驅(qū)動(dòng):采用I2C子系統(tǒng),可以實(shí)時(shí)讀取溫度。
LED和RTC:兩個(gè)簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)。
證書(shū)? ARM嵌入式工程師認(rèn)證證書(shū)
? 恩智浦技術(shù)認(rèn)證證書(shū)
? Atmel嵌入式工程師認(rèn)證證書(shū)? 大學(xué)英語(yǔ)四級(jí)
培訓(xùn)經(jīng)歷? 2012.02--2012.06 華清遠(yuǎn)見(jiàn)嵌入式學(xué)院嵌入式 Linux 開(kāi)發(fā)工程師 教育背景? 2002.09--2006.07 xxxx學(xué)院化學(xué)工程與工藝
自我評(píng)價(jià)
個(gè)性穩(wěn)重,責(zé)任感強(qiáng),具有團(tuán)隊(duì)意識(shí)。吃苦耐勞,為人誠(chéng)實(shí),與人友善。自
學(xué)能力強(qiáng),喜歡研讀專業(yè)書(shū)籍,并應(yīng)用到實(shí)際工作中。崇拜Android之父Andy Rubin,并有志成為一名Geek。
第二篇:嵌入式linu學(xué)習(xí)心得
嵌入式Linux學(xué)習(xí)心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄
cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級(jí)目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息
mkdir:創(chuàng)建目錄
fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復(fù)制命令,例子cp 文件名 /home/dir/
mv: 移動(dòng)或改名,如mv sonf.confsonf.txt(改名)移動(dòng):mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個(gè)命令的幫助,man 命令
2、各系統(tǒng)目錄的功能
drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。
/boot/gruff.conf: 啟動(dòng)引導(dǎo)程序
/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開(kāi)頭)、字符設(shè)備(c開(kāi)頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個(gè)硬盤,hdb代表第二個(gè)硬盤。Hdb2代表第二塊硬盤的第二個(gè)分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動(dòng)方式下必須啟動(dòng)的進(jìn)程。Inittab文件中有6個(gè)啟動(dòng)level,wait中對(duì)應(yīng)著6個(gè)level的目錄,respawn代表當(dāng)一個(gè)進(jìn)程被意外終止了,但會(huì)自動(dòng)啟動(dòng)的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個(gè)rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個(gè)vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫(kù)文件,后綴為so的文件代表動(dòng)態(tài)鏈接庫(kù)。
/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。
/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過(guò)來(lái),mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應(yīng)用程序
/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號(hào)。每個(gè)進(jìn)程號(hào)目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號(hào)。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息
對(duì)于Linux的設(shè)備驅(qū)動(dòng)程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。
/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。
/usr: 安裝系統(tǒng)時(shí)很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫(kù)文件,src包含Linux2.4的內(nèi)核源碼
/var:存放是臨時(shí)變量
3、
第三篇:ARM學(xué)習(xí)心得
ARM linux學(xué)習(xí)心得(zt)
2008-08-13 13:55
由于很多人總問(wèn)這個(gè)問(wèn)題,所以這里做一個(gè)總結(jié)文檔供大家參考。
這里必須先說(shuō)明,以下的步驟都是針對(duì)Linux系統(tǒng)的,并不面向WinCE。也許你會(huì)注意到,現(xiàn)在做嵌入式的人中,做linux研究的人遠(yuǎn)比做WinCE的人多,很多產(chǎn)家提供的資料也是以linux為主。我一直很難理解,其實(shí)WinCE的界面比linux的界面好看多了,使用起來(lái)也很方便,更為重要的是,WinCE的開(kāi)發(fā)和Windows下的開(kāi)發(fā)基本一樣,學(xué)起來(lái)簡(jiǎn)單得多,但是學(xué)linux或者使用linux做嵌入式的人就是遠(yuǎn)比WinCE多。在和很多工作的人交流時(shí)我了解到,他們公司從沒(méi)考慮使用WinCE,因?yàn)槌杀靖?,都是使用linux進(jìn)行開(kāi)發(fā)。我讀研究生的的實(shí)驗(yàn)室中也沒(méi)有使用WinCE的,大都研究linux,也有少部分項(xiàng)目使用vxwork,但是就沒(méi)有聽(tīng)說(shuō)過(guò)使用WinCE的,原因就是開(kāi)源!當(dāng)然現(xiàn)在WinCE6.0聽(tīng)說(shuō)也開(kāi)源,不過(guò)在成本和資源上linux已經(jīng)有了無(wú)人能擋的優(yōu)勢(shì)。與此相對(duì)應(yīng)的是,越來(lái)越多的電子廠商已經(jīng)開(kāi)始使用linux開(kāi)發(fā)產(chǎn)品。舉個(gè)例子,Google近期開(kāi)發(fā)的智能手機(jī)操作系統(tǒng)Android其實(shí)就是使用linux-2.6.23內(nèi)核進(jìn)行改進(jìn)得到的。
第一,學(xué)習(xí)基本的裸機(jī)編程。
對(duì)于學(xué)硬件的人而言,必須先對(duì)硬件的基本使用方法有感性的認(rèn)識(shí),更必須深刻認(rèn)識(shí)該硬件的控制方式,如果一開(kāi)始就學(xué)linux系統(tǒng)、學(xué)移植那么只會(huì)馬上就陷入一個(gè)很深的漩渦。我在剛剛開(kāi)始學(xué)ARM的時(shí)候是選擇ARM7(主意是當(dāng)時(shí)ARM9還很貴),學(xué)ARM7的時(shí)候還是保持著學(xué)51單片機(jī)的思維,使用ADS去編程,第一個(gè)實(shí)驗(yàn)就是控制led。學(xué)過(guò)一段時(shí)間ARM的人都會(huì)笑這樣很笨,實(shí)際上也不是,我倒是覺(jué)得有這個(gè)過(guò)程會(huì)好很多,因?yàn)闊o(wú)論做多復(fù)雜的系統(tǒng)最終都會(huì)落實(shí)到這些最底層的硬件控制,因此對(duì)這些硬件的控制有了感性的認(rèn)識(shí)就好很多了
學(xué)習(xí)裸機(jī)的編程的同時(shí)要好好理解這個(gè)硬件的構(gòu)架、控制原理,這些我稱他為理解硬件。所謂的理解硬件就是說(shuō),理解這個(gè)硬件是怎么組織這么多資源的,這些資源又是怎么由cpu、由編程進(jìn)行控制的。比如說(shuō),s3c2410中有AD轉(zhuǎn)換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來(lái)控制,這些寄存器都有一個(gè)地址,那么這些地址是什么意思?又怎么通過(guò)寄存器來(lái)控制這些外圍設(shè)備的運(yùn)轉(zhuǎn)?還有,norflash內(nèi)部的每一個(gè)單元在這個(gè)芯片的內(nèi)存中都有一個(gè)相應(yīng)的地址單元,那么這些地址與剛剛說(shuō)的寄存器地址又有什么關(guān)系?他們是一樣的嗎?而與norflash相對(duì)應(yīng)的nandflash內(nèi)部的儲(chǔ)存單元并不是線性排放的,那么s3c2410怎么將nandflash的地址映射在內(nèi)存空間上進(jìn)行使用?或者簡(jiǎn)單地說(shuō)應(yīng)該怎么用nandflash?再有,使用ADS進(jìn)對(duì)ARM9行編程時(shí)都需要使用到一個(gè)初始化的匯編文件,這個(gè)文件究竟有什么用?他里面的代碼是什么意思?不要這個(gè)可以嗎?
諸如此類都是對(duì)硬件的理解,理解了這些東西就對(duì)硬件有很深的理解了,這對(duì)以后更深一步的學(xué)習(xí)將有很大的幫助,如果跳過(guò)這一步,我相信越往后學(xué)越會(huì)
覺(jué)得迷茫,越覺(jué)得這寫(xiě)東西深不可測(cè)。因?yàn)?,你的根基沒(méi)打好。
不過(guò)先聲明一下,本人并沒(méi)有使用ADS對(duì)ARM9進(jìn)行編程,我是學(xué)完ARM7后直接就使用ARM9學(xué)linux系統(tǒng)的,因此涉及使用ADS對(duì)ARM9進(jìn)行編程的問(wèn)題我很難回答^_^,自己去研究研究吧。
對(duì)于這部分不久將提供一份教程,這個(gè)教程中的例程并不是我為我們所代理的板子寫(xiě)的,是我在我們學(xué)院實(shí)驗(yàn)室拿的,英培特為他們自己的實(shí)驗(yàn)箱寫(xiě)的,不過(guò)很有借鑒意義,可以作為一份有價(jià)值的參考。
第二,使用linux系統(tǒng)進(jìn)行一些基本的實(shí)驗(yàn)。
在買一套板子的時(shí)候一般會(huì)提供一些linux的試驗(yàn)例程,好好做一段時(shí)間這個(gè)吧,這個(gè)過(guò)程也是很有意義的,也是為進(jìn)一步的學(xué)習(xí)積累感性認(rèn)識(shí),你能想象一個(gè)從沒(méi)有使用過(guò)linux系統(tǒng)的人能學(xué)好linux的編程嗎?好好按照手冊(cè)上的例程做一做里面的實(shí)驗(yàn),雖然有點(diǎn)娃娃學(xué)走路,有點(diǎn)弱智,但是我想很多高手都會(huì)經(jīng)歷這個(gè)過(guò)程。
在這方面我們深藍(lán)科技目前沒(méi)有計(jì)劃提供相應(yīng)的例程,主要是開(kāi)發(fā)板的提供商會(huì)提供很豐富的例程,我們不做重復(fù)工作,只提供他們沒(méi)有的、最有價(jià)值的東西給大家。
第三,研究完整的linux系統(tǒng)的的運(yùn)行過(guò)程。
所謂完整的linux系統(tǒng)包括哪些部分呢?
三部分:bootloader、linux kernel(linux內(nèi)核)、rootfile(根文件系統(tǒng))。那么這3部分是怎么相互協(xié)作來(lái)構(gòu)成這個(gè)系統(tǒng)的呢?各自有什么用呢?三者有什么聯(lián)系?怎么聯(lián)系?系統(tǒng)的執(zhí)行流程又是怎么樣的呢?搞清楚這個(gè)問(wèn)題你對(duì)整個(gè)系統(tǒng)的運(yùn)行就很清楚了,對(duì)于下一步制作這個(gè)linux系統(tǒng)就打下了另一個(gè)重要的根基。介紹這方面的資料網(wǎng)上可以挖掘到幾噸,自己好好研究吧。第四,開(kāi)始做系統(tǒng)移植。
上面說(shuō)到完整的linux有3部分,而且你也知道了他們之間的關(guān)系和作用,那么現(xiàn)在你要做的便是自己動(dòng)手學(xué)會(huì)制作這些東西。
當(dāng)然我不可能叫你編寫(xiě)這些代碼,這不實(shí)現(xiàn)。事實(shí)上這個(gè)3者都能在網(wǎng)下載到相應(yīng)的源代碼,但是這個(gè)源代碼不可能下載編譯后就能在你的系統(tǒng)上運(yùn)行,需要很多的修改,直到他能運(yùn)行在你的板子上,這個(gè)修改的過(guò)程就叫移植。在進(jìn)行移植的過(guò)程中你要學(xué)的東西很多,要懂的相關(guān)知識(shí)也很多,等你完成了這個(gè)過(guò)程你會(huì)發(fā)現(xiàn)你已經(jīng)算是一個(gè)初出茅廬的高手了。
在這個(gè)過(guò)程中如果你很有研究精神的話你必然會(huì)想到看源代碼。很多書(shū)介紹你
怎么閱讀linux源代碼,我不提倡無(wú)目的地去看linux源代碼,用許三多的話說(shuō),這沒(méi)有意義。等你在做移植的時(shí)候你覺(jué)得你必須去看源代碼時(shí)再去找基本好書(shū)看看,這里我推薦一本好書(shū)倪繼利的《linux內(nèi)核的分析與編程》,這是一本針對(duì)linux-2.6.11內(nèi)核的書(shū),說(shuō)得很深,建議先提高自己的C語(yǔ)言編程水平再去看。
至于每個(gè)部分的移植網(wǎng)上也可以找到好多噸的資料,自己研究研究吧,不過(guò)要提醒的是,很多介紹自己經(jīng)驗(yàn)的東西都或多或少有所保留,你按照他說(shuō)的去做總有一些問(wèn)題,但是他不會(huì)告訴你怎么解決,這時(shí)就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保證能解決你的問(wèn)題,因?yàn)槲椅幢赜龅竭^(guò)你的問(wèn)題,不過(guò)我相信能給你一點(diǎn)建議,也許有助你解決問(wèn)題。
這一步的最終目的是,從源代碼的官方主頁(yè)上(都是外國(guó)的,悲哀)下載標(biāo)準(zhǔn)的源代碼包,然后進(jìn)行修改,最終運(yùn)行在板子上。
盜用阿基米德的一句話:“給我一根網(wǎng)線,我能將linux搞定”。
第五,研究linux驅(qū)動(dòng)程序的編寫(xiě)。
移植系統(tǒng)并不是最終的目的,最終的目的是開(kāi)發(fā)產(chǎn)品,做項(xiàng)目,這些都要進(jìn)行驅(qū)動(dòng)程序的開(kāi)發(fā)。
Linux的驅(qū)動(dòng)程序可以說(shuō)是五花八門,linux2.4和linux2.6的編寫(xiě)有相當(dāng)大的區(qū)別,就是同為linux2.6但是不同版本間的驅(qū)動(dòng)程序也有區(qū)別,因此編寫(xiě)linux的驅(qū)動(dòng)程序變都不是那么容易的事情,對(duì)于最新版本的驅(qū)動(dòng)程序的編寫(xiě)甚至還沒(méi)有足夠的參考資料。那么我的建議就是使用、移植一個(gè)不算很新的版本內(nèi)核,這樣到時(shí)學(xué)驅(qū)動(dòng)的編程就有足夠的資料了。
這部分的推薦書(shū)籍可以參考另一篇文章《推薦幾本學(xué)習(xí)嵌入式linux的書(shū)籍》。第六,研究應(yīng)用程序的編寫(xiě)。
做作品做項(xiàng)目除了編寫(xiě)驅(qū)動(dòng)程序,最后還要編寫(xiě)應(yīng)用程序。現(xiàn)在的趨勢(shì)是圖形應(yīng)用程序的開(kāi)發(fā),而圖形應(yīng)用程序中用得最多的還是qt/e函數(shù)庫(kù)。我一直就使用這個(gè)函數(shù)庫(kù)來(lái)開(kāi)發(fā)自己的應(yīng)用程序,不過(guò)我希望你能使用國(guó)產(chǎn)的MiniGUI函數(shù)庫(kù)。盜用周杰倫的廣告詞就是“支持國(guó)產(chǎn),支持MiniGUI”。MiniGUI的編程比較相似Windows下的VC編程,比較容易上手,效果應(yīng)該說(shuō)是相當(dāng)不錯(cuò)的,我曾使用過(guò)來(lái)開(kāi)發(fā)ARM7的程序。不過(guò)MiniGUI最大的不好就是沒(méi)有像qtopia這樣的圖形操作平臺(tái),這大大限制了他的推廣,我曾經(jīng)幻想過(guò)與北京飛漫公司(就是MiniGUI的版權(quán)擁有者)合作使用MiniGUI函數(shù)庫(kù)開(kāi)發(fā)像qtopia這樣的圖形操作平臺(tái),不過(guò)由于水平有限這只能是幻想了,呵呵。
完成這一步你基本就學(xué)完了嵌入式linux的全部?jī)?nèi)容了。
還有一個(gè)小小的經(jīng)驗(yàn)想和大家分享。我在學(xué)習(xí)嵌入式linux的過(guò)程中很少問(wèn)人,客觀原因是身邊的老師、同學(xué)師兄都沒(méi)有這方面的高手,主觀原因是我不喜歡問(wèn)人,喜歡自己研究解決問(wèn)題。這樣做有個(gè)好處,就是可以提高自己解決問(wèn)題的能力,因?yàn)樽鲞@些東西總有很多問(wèn)題你難以理解,別人也沒(méi)有這方面的經(jīng)驗(yàn),也不是所有問(wèn)題都有人給你答案,這時(shí)必須要自己解決問(wèn)題,這樣,個(gè)人的解決問(wèn)題能力就顯得非常關(guān)鍵了。因此我的建議就是一般的問(wèn)題到網(wǎng)上搜索一下,確實(shí)找不到答案了就問(wèn)問(wèn)高手,還是不行了就自己去研究,不要一味去等別人幫你解決問(wèn)題。
記住,問(wèn)題是學(xué)習(xí)的最好機(jī)會(huì)。
第四篇:arm心得.
心得體會(huì)(許晶)
本次實(shí)習(xí)時(shí)間是一周,我們組所選的題目是直流電動(dòng)機(jī)轉(zhuǎn)速控制設(shè)計(jì),其要求有:硬件部分要求在LPC2100系列ARM的最小系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)通過(guò)按鍵控制直流電動(dòng)機(jī)速度的驅(qū)動(dòng)電路,要求通過(guò)LPC2100內(nèi)置的PWM發(fā)生器控制直流電動(dòng)機(jī);并將電動(dòng)機(jī)速度通過(guò)串口送至PC機(jī)。軟件部分要求設(shè)計(jì)以上功能的脫機(jī)運(yùn)行程序,并在試驗(yàn)室調(diào)試通過(guò)。我負(fù)責(zé)的是硬件部分。首先我將系統(tǒng)分為兩部分。一是電動(dòng)機(jī)控制驅(qū)動(dòng)電路;二是ARM最小系統(tǒng)。在電動(dòng)機(jī)驅(qū)動(dòng)中,直流電機(jī)控制使用了H橋驅(qū)動(dòng)電路,控制口線為P0.21、P0.22。在ARM最小系統(tǒng)中,分為5部分:電源電路、復(fù)位電路、JTAG接口電路、RS232串口電路、時(shí)鐘電路。
在制作原理圖中,我查閱了實(shí)驗(yàn)指導(dǎo)書(shū)和課本。我所選用的是2114板子。因?yàn)長(zhǎng)PC2114是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的16/32位ARM7TDMI-STM CPU的微控制器,并帶有128/256 k字節(jié)(kB)嵌入的高速Flash存儲(chǔ)器。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。對(duì)代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16位Thumb模式將代碼規(guī)模降低超過(guò)30%,而性能的損失卻很小。
在這個(gè)過(guò)程中,我注意到了許多問(wèn)題。通過(guò)最小系統(tǒng)的制圖,我對(duì)一些問(wèn)題逐漸了解,不像剛開(kāi)始學(xué)習(xí)一樣,感覺(jué)什么也不懂,硬裝知識(shí)。我畫(huà)了5部分,這幾個(gè)部分讓我對(duì)書(shū)上的內(nèi)容更加深了學(xué)習(xí)。如:時(shí)鐘電路中,我就把時(shí)鐘系統(tǒng)和晶體振蕩兩節(jié)課程,重新學(xué)習(xí)。
而在軟件設(shè)計(jì)中,在我的搭檔編程完之后,我也對(duì)程序進(jìn)行了研究。在主程序中,我們用的是i、j表示速度與方向,正轉(zhuǎn)為“+”、反轉(zhuǎn)為“—”;最小速度為1,最大速度為4。先讓電機(jī)正向慢慢的加速,加到正傳的最大速后,在按下就變成反轉(zhuǎn),然后在依次加速,往返循環(huán),直至沒(méi)有按鍵按下。所運(yùn)用的是,調(diào)節(jié)PWM的占空比就能達(dá)到電機(jī)的速度調(diào)節(jié)。
我們組在硬件中遇到的問(wèn)題并不多,主要是在畫(huà)各部分原理圖時(shí)找器件很不熟練,不能很快的找到。這說(shuō)明我不經(jīng)常用軟件。其實(shí)這個(gè)軟件制圖很方便,各種器件幾乎都能找到,找不到時(shí)也可以在上面畫(huà)圖。
軟件中,程序在編譯正確后,下載方面出現(xiàn)了許多問(wèn)題,如連接不上;不能生成hex文件等。其實(shí)這些問(wèn)題,都是因?yàn)槲覀儗?duì)軟件不熟悉所造成的。在我們多次調(diào)試、鏈接之后,終于完成。
經(jīng)過(guò)一周實(shí)習(xí),是我對(duì)ARM系統(tǒng)有了更深刻的認(rèn)識(shí)。因?yàn)榍捌诖蠹叶颊夜ぷ鞯脑颍也](méi)有特別認(rèn)真的學(xué)習(xí),而這次的實(shí)習(xí),可以讓我重新再次拿起課本,認(rèn)真學(xué)習(xí)。并且使我感觸最深的是,由于嵌入系統(tǒng)的廣泛應(yīng)用,我應(yīng)該更好的去學(xué)習(xí)它、掌握它。像掌握辦公自動(dòng)化一樣,成為必不可少的技術(shù)。
第五篇:ARM學(xué)習(xí)方法
ARM學(xué)習(xí)方法
一步一步學(xué)習(xí)uCOS和ARM體系結(jié)構(gòu)的心得
學(xué)習(xí)必備條件:
1、一塊開(kāi)發(fā)板——例如44B0開(kāi)發(fā)板,建議初學(xué)者不要去購(gòu)買那些ARM9體系結(jié)構(gòu)的,因?yàn)樽鳛槌鯇W(xué)者來(lái)說(shuō)ARM9體系的東西是很復(fù)雜的,買塊ARM7的就可以了(先入門,然后再提高);
2、學(xué)習(xí)必備書(shū)籍
《Pointer on C》中文名字叫《C和指針》(美)里科|譯者:徐波 前提你的了解C指針吧(這本書(shū)時(shí)非常經(jīng)典的書(shū)籍,完全可以看中文版的,作者翻譯的非常到位)
《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》--邵貝貝翻譯的(不能不承認(rèn)邵貝貝是一個(gè)非常好的翻譯者)
《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》--楊宗德
對(duì)于英文不好的朋友可以購(gòu)買《ARM體系結(jié)構(gòu)與編程》--杜春蕾(該書(shū)其實(shí)還是有很多翻譯錯(cuò)誤的,大家在看的時(shí)候要注意一下,但是不可否認(rèn)的是這本書(shū)到目前為止算得上是我見(jiàn)過(guò)最好的講解關(guān)于ARM體系結(jié)構(gòu)的書(shū)籍了)
對(duì)于英文過(guò)關(guān)的兄弟姐妹可以直接看
《ARM+Architecture+Reference+Manual(2nd+Edition)》
3、有條件的兄弟姐妹可以選購(gòu)一個(gè)仿真器 JLINK V8全功能版(這個(gè)的感謝中國(guó)的優(yōu)秀工程師,是他們把原價(jià)1999多的JLINK變成了幾十元錢的東西
4、開(kāi)發(fā)環(huán)境--MDK350或者IARARM
如果要熟悉這些開(kāi)發(fā)環(huán)境,就需要好好讀一些這些開(kāi)發(fā)環(huán)境的手冊(cè)資料,不好意思,這個(gè)就只有英文的了。
以上4個(gè)條件具備下來(lái),可能也不會(huì)超過(guò)500元錢。
下面來(lái)講講我的學(xué)習(xí)經(jīng)歷:
我剛開(kāi)始學(xué)習(xí)的時(shí)候,自己走了不少?gòu)澛?,這里就省略不說(shuō)了。
第一步:在開(kāi)發(fā)板上跑跑簡(jiǎn)單程序
因?yàn)槟阌虚_(kāi)發(fā)板,所以你就先在網(wǎng)上找一下對(duì)應(yīng)開(kāi)發(fā)板上的ARM芯片的datasheet,你都不先搞懂芯片的手冊(cè),又談何讓自己實(shí)現(xiàn)很多功能呢。
熟讀數(shù)據(jù)手冊(cè)后,就盡可能的在開(kāi)發(fā)板上實(shí)現(xiàn)芯片對(duì)應(yīng)的每個(gè)功能,像GPIO實(shí)驗(yàn),UART通訊,I2C,ADC,DAC,PWM,RTC,SPI等等。自己寫(xiě)自己的程序,然后在開(kāi)發(fā)板上好好實(shí)踐一下。
當(dāng)每個(gè)功能模塊都實(shí)現(xiàn)以后,建議你讓你的開(kāi)發(fā)板實(shí)驗(yàn)一下多個(gè)功能復(fù)合使用,比如用UART打印出ADC的值什么的。
第二步:學(xué)習(xí)uCOS
鑒于你已經(jīng)購(gòu)買了《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》,除開(kāi)以下三個(gè)文件:
1、OS_CPU_C.c2、OS_CPU.H,3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編)
這三個(gè)文件的處理機(jī)制暫時(shí)可以不用先了解怎么做的,怎么移植的,以后再說(shuō)
第一次讀這本書(shū)時(shí),搞清楚什么是任務(wù),什么是前后臺(tái),為什么要在系統(tǒng)中加入嵌入式操作系統(tǒng)。
第二次讀這本書(shū)時(shí),詳細(xì)了解他的TCB(Task Control Block)和ECB(Event Control
Block)的數(shù)據(jù)結(jié)構(gòu),搞清楚整個(gè)uCOS的實(shí)現(xiàn)機(jī)制(這里不要先就去看uCOS的移植,這樣只會(huì)讓你云里霧里的)
第三次讀這本書(shū)是,詳細(xì)了解信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和時(shí)間標(biāo)志組
鑒于你又購(gòu)買了《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》,你 可以想在VC++ 6.0開(kāi)發(fā)環(huán)境下實(shí)現(xiàn)對(duì)信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和事件標(biāo)志組的上機(jī)實(shí)驗(yàn)代碼。
如果還是不能了解uCOS怎么工作的,建議你多看幾遍(我可是足足看了6、7遍了,書(shū)都翻得脫頁(yè)了。汗說(shuō)明我很笨,希望各位看官都比我聰明,呵呵)
第三步:建立對(duì)uCOS的初步認(rèn)識(shí)
在網(wǎng)上下載對(duì)應(yīng)你的開(kāi)發(fā)板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(當(dāng)然有的開(kāi)發(fā)板已經(jīng)提供了這樣的基礎(chǔ)實(shí)驗(yàn))
在你的開(kāi)發(fā)板上跑跑uCOS,建立起自己對(duì)于uCOS在ARM7開(kāi)發(fā)板上的認(rèn)識(shí)。
在你所購(gòu)買的ARM7開(kāi)發(fā)板上編寫(xiě)一個(gè)自己跑uCOS得任務(wù)(這里先不要去搞中斷,初學(xué)者對(duì)于uCOS下的中斷程序設(shè)計(jì)根本就搞不清楚)
第四步:熟悉ARM體系結(jié)構(gòu)
因?yàn)槭腔贏RM7的移植,建議英文不好的去看看這本書(shū)《ARM體系結(jié)構(gòu)與編程》(雖然這本書(shū)的作者在翻譯時(shí)有很多操作,但是還是建議初學(xué)者去購(gòu)買來(lái)好好看看),對(duì)于英文好的直接在網(wǎng)上下載《ARM+Architecture+Reference+Manual(2nd+Edition)》看就可以了
在看這個(gè)《ARM體系結(jié)構(gòu)與編程》或
《ARM+Architecture+Reference+Manual(2nd+Edition)》時(shí),務(wù)必注意多看幾次,了解以下幾個(gè)方面的知識(shí):
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、異常模式及進(jìn)入異常時(shí)ARM如何處理
4、一定能熟悉ARM中的匯編指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各個(gè)模式下,這些寄存器的映射。熟悉以后,再來(lái)自己做uCOS的移植了。
第五步:uCOS移植
當(dāng)然在自己編寫(xiě)代碼做移植uCOS之前,有必要看看別人的移植代碼。
其實(shí)對(duì)于uCOS的移植,我們只需要編寫(xiě)關(guān)鍵的三個(gè)文件,文件如下:
1、OS_CPU_C.c(堆棧初始化操作OSTaskStkInit函數(shù))
2、OS_CPU.H:完成在該芯片下的數(shù)據(jù)定義,比如什么unsigned char 之類的,注意一下OS_STK和OS_CPU_SR的定義,定義下關(guān)中斷和開(kāi)中斷的方式,有三個(gè)只能選擇1個(gè),ARM芯片一般是定義為第三種方式
3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編),這個(gè)文件的內(nèi)容就多了,要做以下幾個(gè)函數(shù)的重寫(xiě):
1、OSStartHighRdy函數(shù)
2、任務(wù)級(jí)的任務(wù)切換函數(shù)OSCtxSw,3、中斷級(jí)的任務(wù)切換OSIntCtxSw,其實(shí)只要寫(xiě)好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的時(shí)候記者要把保存當(dāng)前任務(wù)的寄存器去掉就可以了。第六步:測(cè)試自己的uCOS移植代碼
第七步:在自己寫(xiě)的uCOS移植代碼中跑跑任務(wù)。
[分享]ARM初學(xué)者學(xué)習(xí)ARM的步驟
很多人學(xué)完單片機(jī)就想學(xué)arm,但不知如何去學(xué)~現(xiàn)在列出一下學(xué)習(xí)這方面的步驟-----基于linux系統(tǒng)的學(xué)習(xí)步驟如下:(一步步來(lái)哦:)
其實(shí)這也只是個(gè)基礎(chǔ),以后實(shí)際做項(xiàng)目了還要去學(xué)很多
1、Linux 基礎(chǔ)
安裝Linux操作系統(tǒng)
Linux文件系統(tǒng)
Linux常用命令
Linux啟動(dòng)過(guò)程詳解
熟悉Linux服務(wù) 能夠獨(dú)立安裝Linux操作系統(tǒng)
能夠熟練使用Linux系統(tǒng)的基本命令
認(rèn)識(shí)Linux系統(tǒng)的常用服務(wù) 安裝Linux操作系統(tǒng)
Linux基本命令實(shí)踐
設(shè)置Linux環(huán)境變量
定制Linux的服務(wù) Shell 編程基礎(chǔ)使用vi編輯文件
使用Emacs編輯文件
使用其他編輯器
2、Shell 編程基礎(chǔ)
Shell簡(jiǎn)介
認(rèn)識(shí)后臺(tái)程序
Bash編程熟悉Linux系統(tǒng)下的編輯環(huán)境
熟悉Linux下的各種Shell
熟練進(jìn)行shell編程熟悉vi基本操作
熟悉Emacs的基本操作
比較不同shell的區(qū)別
編寫(xiě)一個(gè)測(cè)試服務(wù)器是否連通的shell腳本程序
編寫(xiě)一個(gè)查看進(jìn)程是否存在的shell腳本程序
編寫(xiě)一個(gè)帶有循環(huán)語(yǔ)句的shell腳本程序
3、Linux 下的 C 編程基礎(chǔ)
linux C語(yǔ)言環(huán)境概述
Gcc使用方法
Gdb調(diào)試技術(shù)
Autoconf
Automake
Makefile
代碼優(yōu)化 熟悉Linux系統(tǒng)下的開(kāi)發(fā)環(huán)境
熟悉Gcc編譯器
熟悉Makefile規(guī)則編寫(xiě)Hello,World程序
使用 make命令編譯程序
編寫(xiě)帶有一個(gè)循環(huán)的程序
調(diào)試一個(gè)有問(wèn)題的程序
4、嵌入式系統(tǒng)開(kāi)發(fā)基礎(chǔ)
嵌入式系統(tǒng)概述
交叉編譯
配置TFTP服務(wù)
配置NFS服務(wù)
下載Bootloader和內(nèi)核
嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程
熟悉嵌入式系統(tǒng)概念以及開(kāi)發(fā)流程
建立嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境制作cross_gcc工具鏈
編譯并下載U-boot
編譯并下載Linux內(nèi)核
編譯并下載Linux應(yīng)用程序
4、嵌入式系統(tǒng)移植
Linux內(nèi)核代碼
平臺(tái)相關(guān)代碼分析
ARM平臺(tái)介紹
平臺(tái)移植的關(guān)鍵技術(shù)
移植Linux內(nèi)核到 ARM平臺(tái) 了解移植的概念
能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到 ARM9開(kāi)發(fā)板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念
嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程
Linux系統(tǒng)的文件和設(shè)備
與文件相關(guān)的系統(tǒng)調(diào)用
配置超級(jí)終端和MiniCOM 能夠熟悉進(jìn)行串口通信熟悉文件I/O 編寫(xiě)串口通信程序
編寫(xiě)多串口通信程序
6、嵌入式系統(tǒng)中多進(jìn)程程序設(shè)計(jì)
Linux系統(tǒng)進(jìn)程概述
嵌入式系統(tǒng)的進(jìn)程特點(diǎn)
進(jìn)程操作
守護(hù)進(jìn)程
相關(guān)的系統(tǒng)調(diào)用了解Linux系統(tǒng)中進(jìn)程的概念
能夠編寫(xiě)多進(jìn)程程序編寫(xiě)多進(jìn)程程序
編寫(xiě)一個(gè)守護(hù)進(jìn)程程序
sleep系統(tǒng)調(diào)用任務(wù)管理、同步與通信 Linux任務(wù)概述 任務(wù)調(diào)度
管道
信號(hào)
共享內(nèi)存
任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機(jī)制
熟悉進(jìn)程間通信的幾種方式
熟悉嵌入式Linux中的任務(wù)間同步與通信
編寫(xiě)一個(gè)簡(jiǎn)單的管道程序?qū)崿F(xiàn)文件傳輸
編寫(xiě)一個(gè)使用共享內(nèi)存的程序
7、嵌入式系統(tǒng)中多線程程序設(shè)計(jì)
線程的基礎(chǔ)知識(shí)
多線程編程方法
線程應(yīng)用中的同步問(wèn)題了解線程的概念
能夠編寫(xiě)簡(jiǎn)單的多線程程序編寫(xiě)一個(gè)多線程程序
8、嵌入式 Linux 網(wǎng)絡(luò)編程
網(wǎng)絡(luò)基礎(chǔ)知識(shí)
嵌入式Linux中TCP/IP網(wǎng)絡(luò)結(jié)構(gòu)
socket 編程
常用 API函數(shù)
分析Ping命令的實(shí)現(xiàn)
基本UDP套接口編程
許可證管理
PPP協(xié)議
GPRS 了解嵌入式Linux網(wǎng)絡(luò)體系結(jié)構(gòu)
能夠進(jìn)行嵌入式Linux環(huán)境下的socket 編程
熟悉UDP協(xié)議、PPP協(xié)議
熟悉GPRS 使用socket 編寫(xiě)代理服務(wù)器
使用socket 編寫(xiě)路由器
編寫(xiě)許可證服務(wù)器
指出TCP和UDP的優(yōu)缺點(diǎn)
編寫(xiě)一個(gè)web服務(wù)器
編寫(xiě)一個(gè)運(yùn)行在 ARM平臺(tái)的網(wǎng)絡(luò)播放器
9、GUI 程序開(kāi)發(fā)
GUI基礎(chǔ)
嵌入式系統(tǒng)GUI類型
編譯QT
進(jìn)行QT開(kāi)發(fā)熟悉嵌入式系統(tǒng)常用的GUI
能夠進(jìn)行QT編程使用QT編寫(xiě)“Hello,World”程序調(diào)試一個(gè)加入信號(hào)/槽的實(shí)例
通過(guò)重載QWidget 類方法處理事件
10、Linux 字符設(shè)備驅(qū)動(dòng)程序
設(shè)備驅(qū)動(dòng)程序基礎(chǔ)知識(shí)
Linux系統(tǒng)的模塊
字符設(shè)備驅(qū)動(dòng)分析
fs_operation結(jié)構(gòu)
加載驅(qū)動(dòng)程序了解設(shè)備驅(qū)動(dòng)程序的概念
了解Linux字符設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)
能夠編寫(xiě)字符設(shè)備驅(qū)動(dòng)程序編寫(xiě)Skull驅(qū)動(dòng)
編寫(xiě)鍵盤驅(qū)動(dòng)
編寫(xiě)I/O驅(qū)動(dòng)
分析一個(gè)看門狗驅(qū)動(dòng)程序
對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中字符設(shè)備驅(qū)動(dòng)的不同 Linux 塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序工作原理
典型的塊設(shè)備驅(qū)動(dòng)程序分析
塊設(shè)備的讀寫(xiě)請(qǐng)求隊(duì)列了解Linux塊設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)
能夠編寫(xiě)簡(jiǎn)單的塊設(shè)備驅(qū)動(dòng)程序比較字符設(shè)備與塊設(shè)備的異同編寫(xiě)MMC卡驅(qū)動(dòng)程序
分析一個(gè)文件系統(tǒng)
對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中塊設(shè)備驅(qū)動(dòng)的不同
11、文件系統(tǒng)
虛擬文件系統(tǒng)
文件系統(tǒng)的建立
ramfs內(nèi)存文件系統(tǒng)
proc文件系統(tǒng)
devfs 文件系統(tǒng)
MTD技術(shù)簡(jiǎn)介
MTD塊設(shè)備初始化
MTD塊設(shè)備的讀寫(xiě)操作了解Linux系統(tǒng)的文件系統(tǒng)了解嵌入式Linux的文件系統(tǒng)
了解MTD技術(shù)
能夠編寫(xiě)簡(jiǎn)單的文件系統(tǒng)為 ARM9開(kāi)發(fā)板添加 MTD支持移植JFFS2文件系統(tǒng)
通過(guò)proc文件系統(tǒng)修改操作系統(tǒng)參數(shù)
分析romfs 文件系統(tǒng)源代碼
創(chuàng)建一個(gè)cramfs 文件系統(tǒng)