李創(chuàng)?翁紹捷
摘要:“嵌入式系統(tǒng)及應(yīng)用”是自動化、測控技術(shù)與儀器等相關(guān)專業(yè)的重要專業(yè)基礎(chǔ)課程,主要講授嵌入式微處理器、嵌入式操作系統(tǒng)和嵌入式系統(tǒng)設(shè)計技術(shù)。在以往的課程教學(xué)過程中,理論課和實驗課內(nèi)容之間脫節(jié),容易出現(xiàn)教學(xué)效率低下、學(xué)生難以掌握和無法學(xué)以致用的情況。針對存在的問題,本文提出將基于Proteus和uC/OS-II的嵌入式仿真平臺引入到教學(xué)過程中,提出“理論講授—實驗驗證”并行展開的教學(xué)模式,通過“邊學(xué)邊用”的方式激發(fā)學(xué)生的學(xué)習(xí)熱情,強(qiáng)調(diào)學(xué)生分析問題、解決問題能力的提高,強(qiáng)化設(shè)計技能訓(xùn)練。教學(xué)實踐表明,所設(shè)計的仿真平臺和提出的教學(xué)方法有效地提高了課程的教學(xué)效果和質(zhì)量。
關(guān)鍵詞:嵌入式系統(tǒng)及應(yīng)用;Proteus;uC/OS-II;仿真平臺
中圖分類號:G642.0 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-0079(2014)36-0154-03
“嵌入式系統(tǒng)及應(yīng)用”課程是高等教育院校電氣信息類專業(yè)一門很重要的專業(yè)基礎(chǔ)課程,具有實踐性、應(yīng)用性很強(qiáng)的特點。[1,2]掌握該門課程內(nèi)容能有效地提高學(xué)生分析、解決問題的能力,增強(qiáng)實踐動手能力,也能培養(yǎng)學(xué)生的自主創(chuàng)新能力和探索精神。但是根據(jù)多年的教學(xué)實踐和教學(xué)效果問卷調(diào)查結(jié)果反饋情況,學(xué)生普遍反映該課程知識點分散、指令集難記、嵌入式操作系統(tǒng)過于復(fù)雜、理論課內(nèi)容難以指導(dǎo)實驗課內(nèi)容、了解課程的重要性但不知道如何應(yīng)用等問題;而教師則反映在講授過程中較難調(diào)動學(xué)生的學(xué)習(xí)熱情、理論課聽課率低、分組實驗效果不佳等問題。造成這種情況的原因有多個方面:“嵌入式系統(tǒng)及應(yīng)用”課程的課時數(shù)較少使得學(xué)生對課程內(nèi)容掌握不足,但更主要是由于課程實踐性強(qiáng)、實驗內(nèi)容和理論課內(nèi)容之間聯(lián)系不強(qiáng)所導(dǎo)致的。
為了改進(jìn)本課程的教學(xué)效果,使學(xué)生真正掌握嵌入式系統(tǒng)開發(fā)和設(shè)計技術(shù),海南大學(xué)機(jī)電工程學(xué)院進(jìn)行了長期摸索,開展“電工電子系列課程教學(xué)創(chuàng)新團(tuán)隊建設(shè)”項目,利用英國Labcenter Electronics公司的Proteus軟件,搭建了基于Proteus和uC/OS-II的嵌入式仿真平臺,將其引入到課堂教學(xué)和實驗教學(xué)中。經(jīng)過兩年的教學(xué)實踐和教學(xué)效果調(diào)查,學(xué)生對教學(xué)效果反映良好,課程設(shè)計水平和動手能力得到了極大提高。
一、Proteus-uC/OS-II仿真平臺的設(shè)計
1.Proteus與uC/OS-II介紹
英國Labcenter Electronics公司推出的Proteus是一款硬件仿真EDA軟件Proteus的優(yōu)勢體現(xiàn)在虛擬系統(tǒng)建模(Virtual System Modelling,VSM)系統(tǒng),支持基于ARM7、8051、PIC、AVR等系列微處理器的數(shù)字、模擬協(xié)同仿真,并支持源代碼級在線調(diào)試。[3]Proteus是一個完整的嵌入式軟、硬件設(shè)計仿真平臺,為開發(fā)真實的嵌入式系統(tǒng)提供了前期測試和驗證平臺。[4]
uC/OS-II是美國Jean J. Labrosse設(shè)計的輕量級嵌入式操作系統(tǒng),是一個可移植、可裁剪的基于優(yōu)先級的搶占式多任務(wù)實時內(nèi)核,已經(jīng)移植到幾乎所有知名的微處理器上。uC/OS-II已經(jīng)通過聯(lián)邦航空局(FAA)商用航行器認(rèn)證,主要采用ANSI-C編寫,源代碼量大約在6000-7000行,與CPU硬件相關(guān)部分采用匯編語言編寫,執(zhí)行效率高,占用ROM空間小。[5]uC/OS-II的上述特點使得其特別適用于嵌入式產(chǎn)品開發(fā)和嵌入式系統(tǒng)教學(xué)中。
2.Proteus-uC/OS-II仿真平臺的設(shè)計
針對“嵌入式系統(tǒng)及應(yīng)用”課程的全部知識點,筆者利用Proteus精心設(shè)計了基于NXP公司LPC2124處理器的仿真平臺,包括LCD接口(LM4229,240×120點陣)與ZLG/GUI移植、4×4鍵盤接口、A/D轉(zhuǎn)換接口、I2C接口、、UART接口、SPI接口、外部中斷接口、GPIO接口(LED顯示)等典型外設(shè)接口。利用ARM公司的ADS 1.2和Keil uVision4 for ARM集成開發(fā)工具,采用“應(yīng)用程序-驅(qū)動程序-底層代碼”的自上而下的軟件結(jié)構(gòu),將uC/OS-II操作系統(tǒng)移植到Proteus仿真平臺中,并對學(xué)生開放所有設(shè)計源代碼,方便課堂內(nèi)外講解和調(diào)試。Proteus仿真平臺的結(jié)構(gòu)圖如圖1所示:
教學(xué)過程中使用的軟件版本具有8個功能,支持鍵盤對應(yīng)的數(shù)字鍵輸入和鍵盤的方向鍵選擇輸入。仿真平臺的8個功能如表1所示。功能設(shè)計的原則是幫助學(xué)生明確嵌入式系統(tǒng)設(shè)計“自上而下”的概念和體系,盡量將外設(shè)功能情況實時地通過LCD顯示和串口顯示,以直觀的方式說明處理器和外設(shè)運(yùn)行情況,加強(qiáng)教學(xué)的趣味性和實用性。
表1 仿真平臺功能
功能1:ADC轉(zhuǎn)換實驗 功能5:SPI接口數(shù)碼管實驗
功能2:I2C讀寫實驗 功能6:外部中斷實驗
功能3:GUI菜單、曲線繪制實驗 功能7:uC/OS-II統(tǒng)計功能實驗
功能4:UART讀寫與Shell實驗 功能8:uC/OS-II信號量、郵箱實驗
將uC/OS-II移植到Proteus仿真平臺,在軟件中創(chuàng)建4個任務(wù):LED1顯示任務(wù)TaskLED1、LED3顯示任務(wù)TaskLED3、處理器休眠任務(wù)TaskPowerDown、鍵盤處理任務(wù)TaskKeyBoard。通過LED1和LED3指示操作系統(tǒng)運(yùn)行情況,在TaskPowerDown任務(wù)中對GUI界面進(jìn)行刷新和處理器低功耗操作,在TaskKeyBoard中掃描鍵盤動作,使用函數(shù)指針指向表1中的8個功能代碼入口地址,通過按鍵直接選擇任意功能進(jìn)行運(yùn)行。
仿真平臺正常運(yùn)行后,顯示如圖2所示的GUI界面和串口調(diào)試信息。
在軟件設(shè)計過程中,充分考慮了系統(tǒng)的軟硬件可擴(kuò)展性,提供給學(xué)生的軟件代碼書寫規(guī)范,函數(shù)和變量命名風(fēng)格統(tǒng)一,采用大量的宏定義(#define)和條件編譯,保證了硬件管腳接線變化時能方便地修改ARM處理器的GPIO管腳配置。
以LED1連接在P0.28引腳為例,采用如下代碼對LED1的連接和行為進(jìn)行描述:
#define LED1 28
#define LED1_ON() IOCLR = 1< #define LED1_OFF() IOSET = 1< 連接LED1管腳的初始化代碼如下: #if LED1 < 16 PINSEL0 &= ~(3<<(2*LED1)); #else PINSEL1 & =~(3<<(2*(LED1-16))); #endif IO0DIR |= (1< 所有外設(shè)引腳均采用這種方式進(jìn)行初始化和行為描述,因此可以在TargetInit函數(shù)中僅對必要的外設(shè)(如串行口、RTC時鐘)進(jìn)行初始化,在各任務(wù)代碼中對使用的外設(shè)進(jìn)行獨立的初始化。這種代碼風(fēng)格符合學(xué)生的使用習(xí)慣和教學(xué)實際需要,無需在多個*.c文件之間來回進(jìn)行函數(shù)查找和代碼修改。 二、Proteus-uC/OS-II仿真平臺在實驗教學(xué)中的應(yīng)用 “嵌入式系統(tǒng)及應(yīng)用”課程的核心體現(xiàn)在硬件和軟件的結(jié)合上。但傳統(tǒng)的理論教學(xué)中,ARM7TDMI處理器架構(gòu)和RISC指令集是教學(xué)的重點和難點,這部分內(nèi)容一般安排在外設(shè)接口和操作系統(tǒng)教學(xué)之前;而實驗教學(xué)一般以點亮一個LED開始,按照GPIO、串行口、定時器、外部中斷的順序講授ARM處理器的內(nèi)部寄存器。在實際教學(xué)中發(fā)現(xiàn),處理器架構(gòu)和指令集內(nèi)容過于抽象,降低了學(xué)生的學(xué)習(xí)熱情,造成教學(xué)進(jìn)度緩慢、學(xué)生對知識點掌握不到位等情況,極大地影響了課堂教學(xué)效果和實驗效果。 1.基于仿真平臺的嵌入式操作系統(tǒng)教學(xué) 筆者將設(shè)計的Proteus-uC/OS-II仿真平臺引入到教學(xué)中,從操作系統(tǒng)的運(yùn)行機(jī)制、實現(xiàn)原理上進(jìn)行宏觀講解,然后對應(yīng)用軟件的結(jié)構(gòu)進(jìn)行分解介紹,最后深入到操作系統(tǒng)源代碼和ARM移植代碼的分析和講解。這種教學(xué)方式完整地覆蓋了嵌入式系統(tǒng)軟硬件設(shè)計的流程和理論知識點,也能讓學(xué)生在入門階段形成“自上而下”的設(shè)計思路,徹底擺脫傳統(tǒng)的“前-后臺”設(shè)計思想的限制,對嵌入式操作系統(tǒng)和嵌入式處理器的架構(gòu)和內(nèi)部狀態(tài)寄存器集有更深刻的了解,為以后從事嵌入式系統(tǒng)軟硬件開發(fā)打下堅實的基礎(chǔ)。 uC/OS-II是輕量級的嵌入式操作系統(tǒng),其源代碼僅有7000行左右,在裁剪了郵箱、隊列、信號量等功能后,OS_Core.c和OS_task.c文件源代碼結(jié)構(gòu)清晰,特別適合在教學(xué)中進(jìn)行源代碼級分析。OS_TCB鏈表結(jié)構(gòu)和最低優(yōu)先級查找算法是uC/OS-II的精華知識點,對后續(xù)學(xué)習(xí)信號量、郵箱、互斥等鏈表結(jié)構(gòu)具有舉一反三的作用。下面詳細(xì)列舉基于LED1和LED3任務(wù)的uC/OS-II任務(wù)切換教學(xué)過程: 在TaskStart任務(wù)中創(chuàng)建TaskLED1和TaskLED3任務(wù),要求LED1每秒閃爍一次,LED3每秒閃爍5次。因此,需要分別在TaskLED1和TaskLED3中分別調(diào)用OSTimeDlyHMSM(0,0,1,0)和OSTimeDlyHMSM(0,0,0,50),使得任務(wù)延時并交出CPU控制權(quán)。在教學(xué)中,依次分析OSInit、OSTaskCreate和OSStart的源代碼,根據(jù)鏈表斷開和插入操作,對OSTCBCur、OSTCBFreeList、OSTCBHighRdy和OSTCBList四個指針的內(nèi)容進(jìn)行討論,使學(xué)生掌握操作系統(tǒng)在建立用戶任務(wù)后OSTCBTbl數(shù)組的鏈表結(jié)構(gòu)。同時,在建立用戶任務(wù)TaskLED1和TaskLED3的過程中,對OS_core.c的任務(wù)就緒表OSRdyTbl、映射表OSMapTbl的內(nèi)容變化進(jìn)行分析,掌握uC/OS-II優(yōu)先級查表算法“以空間換處理時間”的核心思想。在理論課教學(xué)中,首先通過源代碼和流程圖分析,使得學(xué)生對uC/OS-II的內(nèi)部數(shù)據(jù)結(jié)構(gòu)有一個初步了解,然后在Proteus平臺,通過Keil uVision4的聯(lián)調(diào)方式,以單步運(yùn)行的方式,結(jié)合軟件流程圖走向,在Keil中觀察相關(guān)變量的內(nèi)容變化,學(xué)生就能比較容易地掌握uC/OS-II的數(shù)據(jù)結(jié)構(gòu)和任務(wù)級任務(wù)切換的概念。在這個過程中所涉及到的軟件中斷、定時器中斷等內(nèi)容則在后續(xù)理論課程中進(jìn)行講授。 2.基于仿真平臺的外設(shè)接口知識點教學(xué) 在學(xué)生從應(yīng)用的角度,掌握了uC/OS-II的任務(wù)創(chuàng)建、信號量等知識點之后,進(jìn)入到ARM處理器外設(shè)接口的知識點學(xué)習(xí)階段。在課堂教學(xué)中,對于表1中所列的功能1-功能6的各外設(shè)功能,按照GPIO、UART、定時器、I2C、SPI、外部中斷的知識點順序在課堂上講解ARM處理器的內(nèi)部寄存器和對應(yīng)的功能。利用Proteus仿真平臺中的Debug功能和Keil的聯(lián)調(diào)功能,實時查看不同配置時相關(guān)外設(shè)寄存器的內(nèi)容,對仿真效果進(jìn)行在線分析和調(diào)試,加深學(xué)生對外設(shè)寄存器的理解。 3.基于仿真平臺的ARM處理器底層結(jié)構(gòu)知識點教學(xué) 在獨立講授Proteus-uC/OS-II仿真平臺的功能1 – 功能8之后,進(jìn)入到uC/OS-II操作系統(tǒng)的移植代碼部分。這部分知識點與ARM7TDMI處理器架構(gòu)和RISC指令集密切相關(guān)。通過在課堂上依次講授ARM處理器啟動代碼、OS_cpu_a.s、OS_cpu_a.c源代碼分析和軟件中斷等內(nèi)容。以中斷級任務(wù)切換函數(shù)OSIntCtxSw的講授過程為例: OS_TASK_SW是任務(wù)級任務(wù)切換函數(shù),引起0x00號軟中斷,并最終會跳轉(zhuǎn)到OSIntCtxSw執(zhí)行,OSIntCtxSw也是中斷級任務(wù)切換函數(shù)的入口地址。對OSIntCtxSw的理解,實際上是要理解各個任務(wù)的堆棧設(shè)置。一個任務(wù)正常運(yùn)行,是運(yùn)行在user模式下,根據(jù)ARM7的體系結(jié)構(gòu),user模式的所有寄存器和system模式下的所有寄存器使用同一個物理地址。其他模式R13,R14不同物理地址,F(xiàn)IQ模式R8-R14不同物理地址。其他模式相比user/sys模式,多一個SPSR寄存器,用于保存發(fā)生中斷時的CPSR的備份。因此,當(dāng)發(fā)生任務(wù)切換,需要保存當(dāng)前任務(wù)的所有寄存器,即R0-R14。
利用Keil軟件的聯(lián)調(diào)功能,對uC/OS-II的啟動過程、任務(wù)級任務(wù)切換和中斷級任務(wù)切換等過程在Proteus仿真平臺進(jìn)行單步Debug調(diào)試,配合ARM處理器內(nèi)部寄存器的內(nèi)容加深對指令集和處理器架構(gòu)的理解。
4.基于仿真平臺的現(xiàn)場教學(xué)實踐
在教學(xué)準(zhǔn)備階段,教師事先根據(jù)知識點準(zhǔn)備好Proteus仿真模型,課堂上講解完相關(guān)知識點后,對Proteus仿真結(jié)果進(jìn)行分析,學(xué)生結(jié)合串行口顯示、LCD顯示和內(nèi)部寄存器內(nèi)容,可以看到真實的運(yùn)行現(xiàn)象和結(jié)果,增強(qiáng)了教學(xué)的直觀性、生動性和趣味性。
目前,高年級的學(xué)生均擁有筆記本電腦,可以要求學(xué)生將電腦帶進(jìn)課堂,利用Proteus軟件與教師同步運(yùn)行仿真平臺,觀察ARM處理器的內(nèi)部寄存器、存儲器和變量的內(nèi)容變化,觀察外設(shè)電路的工作狀態(tài)。此外,在課堂上教師可以提供一些具有典型錯誤的代碼,采用啟發(fā)式和自主式的方式,要求學(xué)生在課堂上修改源代碼和調(diào)試,加深對嵌入式系統(tǒng)設(shè)計與開發(fā)的理解。通過在課堂上現(xiàn)場指導(dǎo)學(xué)生對實例進(jìn)行修改、編程和調(diào)試,觀察仿真運(yùn)行情況,使學(xué)生及時理解相關(guān)知識點,領(lǐng)會抽象和復(fù)雜的概念,積累軟硬件設(shè)計、調(diào)試的經(jīng)驗,達(dá)到“學(xué)以致用”的目的。
由于理論課程時間相對較短,嵌入式系統(tǒng)設(shè)計需要開發(fā)者擁有一定的經(jīng)驗和投入大量的時間,而學(xué)生獨立開展設(shè)計工作的能力相對較弱,為了使得學(xué)生充分體驗嵌入式系統(tǒng)設(shè)計過程,筆者對課程設(shè)計進(jìn)行了精心準(zhǔn)備和選題,選取軟硬件兼顧、工作量的題目,要求學(xué)生在課余時間完成Proteus仿真,如基于GPRS Modem的遠(yuǎn)程無線數(shù)據(jù)傳輸系統(tǒng)、溫濕度監(jiān)測系統(tǒng)、直流電機(jī)控制系統(tǒng)等。在學(xué)期期中階段開始課程設(shè)計準(zhǔn)備工作和指導(dǎo)工作,定期跟蹤設(shè)計進(jìn)度,要求學(xué)生在期末階段完成Proteus仿真模型和軟件設(shè)計;對于部分動手能力較強(qiáng)的學(xué)生,則要求完成印刷電路板作品,體會Proteus仿真模型和實際軟硬件開發(fā)的不同,總結(jié)模型與真實電路的差異,將Proteus作為輔助設(shè)計工具和前期調(diào)試驗證工具。
三、結(jié)束語
筆者將Proteus-uC/OS-II仿真平臺應(yīng)用于“嵌入式系統(tǒng)及應(yīng)用”課程的理論教學(xué)中,采用“操作系統(tǒng)-外設(shè)接口-底層結(jié)構(gòu)”的自上而下的體系結(jié)構(gòu)對課程的理論知識點進(jìn)行了分解,通過課堂演示和課堂內(nèi)調(diào)試,使學(xué)生及時有效地掌握相關(guān)知識點。在課程的期中階段,開展基于Proteus的課程設(shè)計,使學(xué)生深刻體會嵌入式系統(tǒng)設(shè)計和開發(fā)的全過程,同時認(rèn)識到Proteus仿真模型和實際電路的區(qū)別,在實際應(yīng)用中積累設(shè)計經(jīng)驗和調(diào)試經(jīng)驗。通過近兩年將Proteus-uC/OS-II仿真平臺引入到《嵌入式系統(tǒng)及應(yīng)用》教學(xué)全過程的實踐,學(xué)生普遍反映該課程趣味性高,有利于學(xué)生實踐和創(chuàng)新能力的提高。在教學(xué)過程中,有部分同學(xué)借助將筆者提供的仿真平臺,自行購買元器件,使用印刷電路板對仿真平臺進(jìn)行了實現(xiàn),也有部分學(xué)生將該仿真平臺在其他ARM開發(fā)板上進(jìn)行了實現(xiàn)。借助于Proteus-uC/OS-II仿真平臺,學(xué)生在各種電子大賽,智能車、創(chuàng)新課題和畢業(yè)設(shè)計中取得了優(yōu)異的成績。
參考文獻(xiàn):
[1]李春光,謝光前.以項目為導(dǎo)向的嵌入式系統(tǒng)實踐教學(xué)研究[J].中國電力教育,2014,(4):183-184.
[2]錢誠,彭馨馨.計算機(jī)應(yīng)用專業(yè)嵌入式系統(tǒng)課程教學(xué)探討[J].中國電力教育,2014,(8):144-145.
[3]陳知紅,王錦蘭.Proteus 仿真軟件在電工學(xué)中的應(yīng)用[J].實驗技術(shù)與管理,2014,31(2):93-95.
[4]張?zhí)m紅,陸廣平.基于 Proteus 仿真的單片機(jī)教學(xué)的研究與實踐[J].中國電力教育,2014,(5):76-77.
[5]邵貝貝.嵌入式實時操作系統(tǒng)uC/OS-II[M].北京:北京航空航天大學(xué)出版社,2003.
(責(zé)任編輯:劉麗娜)