国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

關(guān)于基于ARM嵌入式軟件設(shè)計(jì)教學(xué)的若干探索

2013-04-02 07:37:06于杰
關(guān)鍵詞:嵌入式軟件斷點(diǎn)內(nèi)核

于杰

(廈門大學(xué)嘉庚學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,福建 漳州 363105)

關(guān)于基于ARM嵌入式軟件設(shè)計(jì)教學(xué)的若干探索

于杰

(廈門大學(xué)嘉庚學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,福建 漳州 363105)

嵌入式軟件設(shè)計(jì)是當(dāng)今社會(huì)需求的一個(gè)熱點(diǎn),也是高校計(jì)算機(jī)專業(yè)教學(xué)的一個(gè)難點(diǎn),長(zhǎng)期以來高校的嵌入式軟件設(shè)計(jì)教學(xué)存在著忽視開源軟件教學(xué)工具,輕視軟件調(diào)試教學(xué),和缺乏軟件設(shè)計(jì)實(shí)例化等問題,本文主要在實(shí)際教學(xué)的基礎(chǔ)上,總結(jié)出若干解決辦法,從而達(dá)到提高嵌入式軟件設(shè)計(jì)教學(xué)水平的目的.

嵌入式;軟件設(shè)計(jì);軟件調(diào)試;開源軟件;項(xiàng)目化;教學(xué)

目前,嵌入式產(chǎn)品已經(jīng)無處不在,通信、信息、數(shù)字家庭和工業(yè)控制等領(lǐng)域,隨處都能見到嵌入式產(chǎn)品.而ARM系列的處理器更是其中的佼佼者,這使得基于ARM的嵌入式系統(tǒng)成為當(dāng)今計(jì)算機(jī)領(lǐng)域最熱門的學(xué)科之一,龐大的嵌入式軟件系統(tǒng)的市場(chǎng)急需大量合格的專業(yè)人才,這無疑為高校的嵌入式軟件設(shè)計(jì)教學(xué)帶來了新的機(jī)遇[1].但與此同此,嵌入式知識(shí)的學(xué)習(xí)非常廣泛,不僅要學(xué)習(xí)程序設(shè)計(jì)的知識(shí),同時(shí)也涉及到數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)組成原理,操作系統(tǒng)和編譯原理等相關(guān)知識(shí),這樣為相應(yīng)的教學(xué)帶來了不小的挑戰(zhàn),如何既能做到聯(lián)系相關(guān)課程的知識(shí),又能突出嵌入式軟件設(shè)計(jì)本身的特點(diǎn),便成為當(dāng)前嵌入式軟件設(shè)計(jì)教學(xué)急需解決的問題.而本文主要總結(jié)了作者在嵌入式軟件設(shè)計(jì)教學(xué)方面的經(jīng)驗(yàn),希望能夠?qū)ζ渌咝5那度胧杰浖O(shè)計(jì)教學(xué)有所啟發(fā).

1 開源軟件和開發(fā)環(huán)境的引入

目前高校傳統(tǒng)的嵌入式軟件教學(xué)主要采用的是ADS、RVDS、以及CodeWarrior等國(guó)外商業(yè)軟件進(jìn)行,這些商業(yè)軟件有著穩(wěn)定可靠、方便易用、可擴(kuò)展性強(qiáng)等諸多優(yōu)點(diǎn),但是由于其商業(yè)性質(zhì)的原因,也不可避免的帶來了,諸如知識(shí)產(chǎn)權(quán),軟件費(fèi)用,以及盜版泛濫等相關(guān)問題,這些問題已經(jīng)嚴(yán)重的影響了嵌入式軟件教學(xué)的進(jìn)一步發(fā)展.把開源軟件長(zhǎng)期排除在外,使開源軟件教育以商業(yè)化培訓(xùn)為主,是少數(shù)人才能接受的“陽春白雪”式高端教育,未能形成開源人才的規(guī)?;囵B(yǎng).對(duì)于國(guó)內(nèi)眾多開源企業(yè)來說,“招不到合適的人才”也成為長(zhǎng)期困擾企業(yè)發(fā)展的瓶頸之一.而把開源軟件和開發(fā)環(huán)境引入高校課堂當(dāng)中,正是對(duì)開源軟件普及型教育的一種體現(xiàn),也是增強(qiáng)計(jì)算機(jī)專業(yè)畢業(yè)生競(jìng)爭(zhēng)力的一種手段.

為此,筆者根據(jù)本?;贏RM的嵌入式軟件設(shè)計(jì)教學(xué)實(shí)際情況,使用GNU-Make與編譯器配合負(fù)責(zé)代碼的管理.GNU-Make可以支持大多數(shù)PC操作系統(tǒng),包括Windows、Linux、MacOS等,GNU-Make的機(jī)制簡(jiǎn)單易懂且適用于模塊化的系統(tǒng),而且GNU-Make其完全免費(fèi)的特性,更可以在實(shí)驗(yàn)室等環(huán)境大面積的使用,而沒有費(fèi)用問題,這樣就為學(xué)生的學(xué)習(xí)搭建了一個(gè)有效的平臺(tái),而且,該平臺(tái)由于沒有過多的封裝,開放其內(nèi)部的細(xì)節(jié),也適合學(xué)生進(jìn)一步的了解,且具有良好的跨平臺(tái)移植能力,可用于多種教學(xué)和實(shí)驗(yàn)環(huán)境中.

2 軟件調(diào)試的引入與強(qiáng)化

2.1 嵌入式軟件調(diào)試教學(xué)的起因

在大多數(shù)傳統(tǒng)的基于ARM嵌入式軟件設(shè)計(jì)更多的是強(qiáng)調(diào)怎樣進(jìn)行軟件的設(shè)計(jì),希望通過程序設(shè)計(jì)的教學(xué),讓學(xué)生掌握相應(yīng)的知識(shí),但這樣帶來的一個(gè)問題就是學(xué)生會(huì)認(rèn)為軟件開發(fā)的主要過程就是設(shè)計(jì)和編碼的過程而對(duì)調(diào)試和測(cè)試的理解和掌握不夠深刻.初學(xué)者在設(shè)計(jì)編寫程序的時(shí)候,很可能出現(xiàn)各種意料之外的情況,比如突然有一個(gè)錯(cuò)誤報(bào)告,或者給出一個(gè)看似正確但卻并非我們期望的結(jié)果,也可能忽略用戶的命令,甚至長(zhǎng)時(shí)間沒有反應(yīng)等,這些都是需要通過軟件調(diào)試來進(jìn)行解決的.筆者在教學(xué)過程中注意總結(jié)出初學(xué)者易犯的若干種錯(cuò)誤,并給出解決這些錯(cuò)誤的常見調(diào)試方法.

2.2 調(diào)試工具GDB的引入

通過對(duì)調(diào)試工具GDB的引用來向?qū)W生介紹常見的調(diào)試方法和思路,比如調(diào)試中必不可少的內(nèi)容—斷點(diǎn),向?qū)W生講授關(guān)于斷點(diǎn)的細(xì)節(jié),包括設(shè)置、刪除和禁用斷點(diǎn),從一個(gè)斷點(diǎn)移到另一個(gè)斷點(diǎn),查看關(guān)于斷點(diǎn)的詳細(xì)信息等等.而對(duì)于這些調(diào)試最適應(yīng)的算法,當(dāng)非樹的遍歷莫屬,這樣就采用實(shí)例涉及遍歷樹的代碼,重點(diǎn)是介紹當(dāng)?shù)竭_(dá)斷點(diǎn)時(shí)如何方便的顯示樹中節(jié)點(diǎn)的內(nèi)容.再比如由于段錯(cuò)誤而產(chǎn)生的致命運(yùn)行時(shí)錯(cuò)誤,筆者首先介紹了崩潰時(shí)在底層發(fā)生了什么事,包括程序的內(nèi)存分配以及硬件與操作系統(tǒng)的協(xié)同作用.并繼而向?qū)W生介紹核心文件,包括如何創(chuàng)建核心文件,如何使用它們來完成“事后反思”.

2.3 錯(cuò)誤代碼的解決

使用GDB工具進(jìn)行調(diào)試的前提是代碼的成功編譯,但是在實(shí)際的軟件開發(fā)當(dāng)中,學(xué)生經(jīng)常會(huì)遇到代碼不能編譯的情況,那么這時(shí)候,GDB調(diào)試工具將變得無能為力,因此一些常見的處理這種問題的方法也需要介紹給學(xué)生,比如如何處理缺少必要的庫造成的連接失敗問題,比如如何處理編譯器指出第x行有語法錯(cuò)誤,而事實(shí)上第x行完全正確,真正的錯(cuò)誤在前面的某一行.而這些過程中學(xué)生們會(huì)發(fā)現(xiàn)他們以前學(xué)過的確認(rèn)原則,二分法搜索原則非但不再抽象,晦澀,反而是一種有效的解決問題的方法和手段[2].

3 以系統(tǒng)移植為重點(diǎn)的實(shí)例化教學(xué)

現(xiàn)有的嵌入式教材大體可以分為兩類,一類教材泛泛而談:ARM、MIPS、x86等各種體系結(jié)構(gòu)處理器均做了介紹;uC/OS、Linux、WinCE等各種操作系統(tǒng)也是一一羅列其特色,但這種教材對(duì)于學(xué)生來說,更多的是走馬觀花的查閱,很難掌握嵌入式的基礎(chǔ)知識(shí),更無法了解基于某一款處理器的基本開發(fā)過程.另一類教材通常是由嵌入式系統(tǒng)實(shí)驗(yàn)設(shè)備廠家提供的,基本就是數(shù)據(jù)手冊(cè)加實(shí)驗(yàn)手冊(cè),學(xué)生使用這種教材往往只見樹木不見森林,也很難系統(tǒng)掌握嵌入式系統(tǒng)的基本理論和概念[3].

筆者在從事基于ARM的嵌入式軟件設(shè)計(jì)教學(xué)工作中,根據(jù)自己的授課經(jīng)驗(yàn),總結(jié)出一套實(shí)例化的教學(xué)方法,由于嵌入式程序開發(fā)平臺(tái)(PC機(jī))和運(yùn)行平臺(tái)(嵌入式設(shè)備)的不同,所以所有的嵌入式開發(fā)遇到的第一個(gè)問題,毫無疑問的就是軟件的移植,所以筆者的實(shí)例化教學(xué)也是圍繞著軟件移植而展開的.

首先是Bootloader的移植,介紹了Bootloader相關(guān)知識(shí)、移植方法及要注意的事項(xiàng).之后以U-boot為例,詳細(xì)的分析了U-boot代碼,并修改U-boot代碼,使之支持Norflash和Nandflash、Nandflash啟動(dòng)、DM9000網(wǎng)卡和YAFFS文件系統(tǒng).通過本實(shí)例的學(xué)習(xí),學(xué)生將會(huì)對(duì)嵌入式通用的Bootloader有一個(gè)大體的了解,并且可以熟練的移植U-boot和使用U-boot.

其次是內(nèi)核的移植,對(duì)Linux內(nèi)核組成和目錄進(jìn)行講解,分析Linux內(nèi)核的Makefile,解釋了Makefile的編譯流程,之后講解如何對(duì)內(nèi)核進(jìn)行剪裁配置,使之支持YAFFS、RTC時(shí)鐘、LCD和DM9000等,最終實(shí)現(xiàn)了在ARM平臺(tái)上的內(nèi)核移植,這樣學(xué)生將對(duì)Linux內(nèi)核有一個(gè)更深入的了解,學(xué)會(huì)如何進(jìn)行內(nèi)核的剪裁和內(nèi)核的移植,同時(shí)以Busybox為基礎(chǔ)進(jìn)行嵌入式開發(fā)板文件系統(tǒng)的移植,這樣學(xué)生通過對(duì)文件系統(tǒng)的選擇,對(duì)嵌入式系統(tǒng)特點(diǎn)有更深入的了解,也將熟練的掌握如何配置一個(gè)文件系統(tǒng)并對(duì)其進(jìn)行移植.

再次是驅(qū)動(dòng)程序的移植,首先對(duì)Linux設(shè)備驅(qū)動(dòng)進(jìn)行了介紹和分類,講解了設(shè)備驅(qū)動(dòng)程序的移植步驟,以Hello world、led和按鍵三個(gè)實(shí)例介紹了Linux設(shè)備驅(qū)動(dòng)的移植過程,之后講解了如何完善串口、USB、聲卡和SD卡的驅(qū)動(dòng).通過這些的學(xué)習(xí),學(xué)生將會(huì)明白Linux設(shè)備驅(qū)動(dòng)的重要性,學(xué)會(huì)如何寫一個(gè)簡(jiǎn)單的Linux設(shè)備驅(qū)動(dòng)并將此驅(qū)動(dòng)編譯進(jìn)內(nèi)核,或者以模塊方式加載到內(nèi)核中,之后學(xué)生將學(xué)會(huì)如何完善Linux已有的一些驅(qū)動(dòng)程序.

最后是應(yīng)用程序的移植,先對(duì)嵌入式GUI進(jìn)行簡(jiǎn)單的介紹,并對(duì)常見的一些GUI進(jìn)行交叉編譯和安裝,之后進(jìn)行音頻解碼器madplay的移植、數(shù)據(jù)庫SQLite的移植和Webserver的移植,通過這些學(xué)習(xí),學(xué)生將掌握應(yīng)用程序移植的關(guān)鍵,達(dá)到舉一反三的目的,嘗試移植更多的應(yīng)用程序.由于現(xiàn)在Android系統(tǒng)的火爆和市場(chǎng)對(duì)Android人才的大量需求,筆者也加入了對(duì)Android系統(tǒng)的移植講解.

總結(jié),通過上述教學(xué)方法的實(shí)施,學(xué)生的學(xué)習(xí)目標(biāo)更加的確定,并使得學(xué)生對(duì)理論學(xué)習(xí)熱情和主動(dòng)性都有所提高,加強(qiáng)了學(xué)生的動(dòng)手能力,這些經(jīng)歷可能會(huì)改變一個(gè)人的學(xué)習(xí)和工作習(xí)慣,也許對(duì)學(xué)生來說是受益終身的.另外,由于學(xué)生在大學(xué)期間已經(jīng)有了一些項(xiàng)目開發(fā)的基礎(chǔ),從文檔寫作到涉及編碼的過程都得到了鍛煉,因此學(xué)生很容易找到工作,就業(yè)之后,也能非常順利的實(shí)現(xiàn)過渡.

〔1〕文全剛.嵌入式linux操作系統(tǒng)原理與應(yīng)用[M].北京航空航天大學(xué)出版社,2011.

〔2〕張?jiān)?軟件調(diào)試的藝術(shù)[M].人民郵電出版社,2009.

〔3〕李寧,宋薇,庫少平.項(xiàng)目化嵌入式教學(xué)方法研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(2):5-8.

G642

A

1673-260 X(2013)10-0240-02

猜你喜歡
嵌入式軟件斷點(diǎn)內(nèi)核
萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
一類無限可能問題的解法
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
實(shí)時(shí)嵌入式軟件的測(cè)試技術(shù)
全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
電子制作(2017年17期)2017-12-18 06:40:56
主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
丹阳市| 开化县| 福建省| 揭东县| 津市市| 舒城县| 普兰店市| 马龙县| 昆明市| 鹤山市| 兴隆县| 永胜县| 兰坪| 河津市| 莱阳市| 通许县| 安福县| 崇义县| 卢氏县| 泗水县| 安阳市| 九台市| 连山| 萨迦县| 临西县| 金秀| 湛江市| 开鲁县| 博白县| 闵行区| 旬邑县| 九江县| 罗平县| 永和县| 蕲春县| 勐海县| 宜丰县| 新干县| 日照市| 金溪县| 玉环县|