高 歌
(濟(jì)寧學(xué)院 產(chǎn)業(yè)學(xué)院,山東 曲阜 273155)
隨著現(xiàn)代工業(yè)的快速發(fā)展,單片機(jī)(Micro controller Unit,簡(jiǎn)稱MCU)技術(shù)迅速發(fā)展,在工業(yè)控制、智能家用電器、通訊和軍事等眾多領(lǐng)域得到了越來(lái)越廣泛的應(yīng)用,社會(huì)對(duì)掌握該技術(shù)的人才需求越來(lái)越大?!皢纹瑱C(jī)原理及應(yīng)用”課程作為自動(dòng)化類專業(yè)的基礎(chǔ)課程,要求學(xué)生不僅需要掌握單片機(jī)大量的理論知識(shí),還要進(jìn)行理論和實(shí)踐相結(jié)合,才能更深入地理解單片機(jī)知識(shí)。實(shí)驗(yàn)教學(xué)作為課程教學(xué)的一個(gè)教學(xué)環(huán)節(jié)在整個(gè)教學(xué)中具有重要的作用,它不僅可以使學(xué)生加深對(duì)理論知識(shí)的理解,還能夠培養(yǎng)他們的動(dòng)手操作能力,開(kāi)拓他們的思維[1]153-154。
單片機(jī)課程實(shí)驗(yàn)教學(xué)中,由于MCU資源有限,單片機(jī)的實(shí)驗(yàn)教學(xué)面臨著很大的挑戰(zhàn),如何在有限的資源下提高M(jìn)CU的工作效率變得十分重要。實(shí)驗(yàn)教學(xué)中需要在提高性能和效率的前提下盡可能降低功率,按照當(dāng)前研究來(lái)看,大多數(shù)MCU實(shí)驗(yàn)的思路都是通過(guò)提高工作效率來(lái)盡快完成當(dāng)前任務(wù),然后使單片機(jī)進(jìn)入低功率狀態(tài),這樣不僅能夠減少資源的浪費(fèi),還能從整體上提高效率。提高嵌入式單片機(jī)的性能是當(dāng)前研究人員廣泛關(guān)注的課題之一,不同的架構(gòu)和系統(tǒng)功能的內(nèi)部運(yùn)行方式往往存在一些細(xì)微差別,而這些差別會(huì)影響到系統(tǒng)的表現(xiàn)。
論文以飛思卡爾Kinetis K系列MCU為例,分析影響系統(tǒng)性能的因素,通過(guò)在實(shí)驗(yàn)中提高M(jìn)CU運(yùn)行效率來(lái)對(duì)系統(tǒng)的性能進(jìn)行優(yōu)化,確保學(xué)生提高對(duì)MCU的認(rèn)識(shí)和理解,能夠獲得更好的實(shí)驗(yàn)教學(xué)效果。Kinetis K系列芯片是2010年Freescale公司推出的基于ARM?CortexTM-M4內(nèi)核的芯片,MCU的基本結(jié)構(gòu)示意圖[2]如圖1所示。
圖1 MCU的基本結(jié)構(gòu)圖
Kinetis K系列的系統(tǒng)主要由Kinesis內(nèi)核總線、SRAM靜態(tài)存儲(chǔ)器、系統(tǒng)緩存、閃存控制器(FMC)、交叉開(kāi)關(guān)(AXBS)組成。經(jīng)過(guò)多年的發(fā)展,Kinetis K系列逐漸成熟,簡(jiǎn)化結(jié)構(gòu)框圖[3]如圖2所示。
圖2 Kinetis K系列的簡(jiǎn)化結(jié)構(gòu)框圖
Kinesis K系列的系統(tǒng)架構(gòu)是影響單片機(jī)整體性能最重要的因素之一。內(nèi)核總線中,系統(tǒng)總線周期的時(shí)序取決于訪問(wèn)類型。系統(tǒng)總線的數(shù)據(jù)訪問(wèn)在內(nèi)核無(wú)附加延時(shí),而指令訪問(wèn)則會(huì)在內(nèi)核增加一個(gè)等待狀態(tài)。Kinetis系統(tǒng)的存儲(chǔ)器映像匯總了地址在0x2000_0000以下的主要存儲(chǔ)器區(qū)域,使得從外部存儲(chǔ)器執(zhí)行代碼時(shí)發(fā)揮最大性能[4]2。
SRAM靜態(tài)存儲(chǔ)器是負(fù)責(zé)存儲(chǔ)代碼和數(shù)據(jù)的區(qū)域,內(nèi)核端口可通過(guò)CODE總線和系統(tǒng)總線訪問(wèn)SRMA,MCU片上的非內(nèi)核主機(jī)也可通過(guò)后門端口訪問(wèn)SRAM,所有Kinetis K系列器件都含有兩個(gè)片上SRAM塊。第一個(gè)塊(SRAM_L)映射于CODE總線,第二個(gè)塊(SRAM_U)則映射于系統(tǒng)總線。由于SRAM控制器處理的訪問(wèn)端口比SRAM塊要多,因此SRAM控制器具有內(nèi)部的仲裁邏輯。仲裁過(guò)程通過(guò)MCM_CR中的字段進(jìn)行控制,給每個(gè)SRAM塊預(yù)留了可編程的仲裁模式。
Kinetis器件中含有可顯著提高性能的系統(tǒng)緩存,系統(tǒng)緩存實(shí)際上包含兩個(gè)獨(dú)立的8KB高速緩存塊。第一個(gè)8KB緩存用于CODE總線訪問(wèn),第二個(gè)8KB緩存用于系統(tǒng)總線訪問(wèn)。高速緩存的設(shè)置通過(guò)使用預(yù)定義的地址區(qū)域進(jìn)行配置。系統(tǒng)緩存的存在,使得在從外部存儲(chǔ)器執(zhí)行代碼時(shí),速度優(yōu)勢(shì)尤為明顯。
閃存控制器(FMC)是閃存塊和系統(tǒng)的接口。在典型配置中,內(nèi)核總線和系統(tǒng)總線的時(shí)鐘速度比閃存時(shí)鐘的速度要快得多。FMC具有的一些特性可用來(lái)加速閃存訪問(wèn),FMC緩存和預(yù)取推理緩沖器可使FMC響應(yīng)閃存訪問(wèn)時(shí)無(wú)附加等待狀態(tài)。只要請(qǐng)求的信息在緩存和預(yù)取緩沖器中可用,FMC的響應(yīng)無(wú)附加等待狀態(tài)。
交叉開(kāi)關(guān)是微控制器的主要總線互連結(jié)構(gòu)。交叉開(kāi)關(guān)負(fù)責(zé)處理總線主控器和從端口之間的連接,當(dāng)多個(gè)主控器同時(shí)嘗試訪問(wèn)同一從端口時(shí),還負(fù)責(zé)處理主控器之間的仲裁。
在單片機(jī)(MCU)實(shí)驗(yàn)教學(xué)過(guò)程中,作為課堂教學(xué)的一個(gè)教學(xué)環(huán)節(jié),通常是教師提供實(shí)驗(yàn)程序,學(xué)生在規(guī)定的時(shí)間內(nèi)按照規(guī)定的步驟完成實(shí)驗(yàn)內(nèi)容。學(xué)生在實(shí)驗(yàn)中很少涉及實(shí)際的電路編程內(nèi)容,導(dǎo)致學(xué)生對(duì)設(shè)計(jì)類實(shí)驗(yàn)無(wú)從下手,不知道如何進(jìn)行系統(tǒng)設(shè)計(jì)。在實(shí)驗(yàn)教學(xué)中,通常存在以下問(wèn)題:
1.實(shí)驗(yàn)教學(xué)內(nèi)容與最新技術(shù)的整合不足。隨著技術(shù)的快速發(fā)展,實(shí)驗(yàn)教學(xué)需要與最新的技術(shù)和平臺(tái)進(jìn)行整合,以提供更全面、實(shí)用和前沿的教學(xué)內(nèi)容。對(duì)于一些老舊的Kinetis單片機(jī)型號(hào),可能無(wú)法利用最新技術(shù)進(jìn)行教學(xué)和開(kāi)發(fā),因此需要合理地利用一些隱藏式的功能來(lái)提高教學(xué)效果。
2.實(shí)驗(yàn)教學(xué)案例相對(duì)缺乏。對(duì)于初學(xué)者來(lái)說(shuō),缺乏實(shí)際的教學(xué)案例可能導(dǎo)致理論知識(shí)與實(shí)際應(yīng)用脫節(jié)。所以需要提供豐富的教學(xué)案例,來(lái)幫助學(xué)生更好地理解和應(yīng)用Kinetis系列單片機(jī)的功能和特點(diǎn)。
3.教學(xué)過(guò)程中互動(dòng)與實(shí)踐環(huán)節(jié)相對(duì)較少。在課程實(shí)驗(yàn)教學(xué)中,應(yīng)注重互動(dòng)與實(shí)踐環(huán)節(jié)的設(shè)計(jì)。缺乏互動(dòng)和實(shí)踐的環(huán)節(jié)可能導(dǎo)致學(xué)生對(duì)Kinetis系列單片機(jī)的理解和應(yīng)用存在局限性,無(wú)法真正掌握相關(guān)技能。
針對(duì)實(shí)驗(yàn)教學(xué)中存在問(wèn)題,以Kinetis K系列單片機(jī)為例,通過(guò)盡可能多地使用SRAM_L塊存儲(chǔ)關(guān)鍵代碼和數(shù)據(jù)、使用MUC系統(tǒng)緩存、閃存控制器(FMC)中固有的閃存加速特性、合理使用代碼優(yōu)化功能、采用DMA傳輸大塊數(shù)據(jù)、采用錯(cuò)誤檢測(cè)和冗余設(shè)計(jì)等措施來(lái)優(yōu)化系統(tǒng),提高單片機(jī)的性能和可靠性,提高實(shí)驗(yàn)教學(xué)效果和實(shí)驗(yàn)效率。
所有Kinetis K系列單片機(jī)都設(shè)置有兩個(gè)片上SRAM塊。第一個(gè)塊(SRAM_L)映射于CODE總線,第二個(gè)塊(SRAM_U)則映射于系統(tǒng)總線。訪問(wèn)存儲(chǔ)器本身僅需一個(gè)周期,但由于指令訪問(wèn)系統(tǒng)總線時(shí)在內(nèi)核延時(shí)一個(gè)時(shí)鐘周期,所以SRAM_U的指令訪問(wèn)至少需要兩個(gè)時(shí)鐘周期。SRAM_L是唯一能存放代碼也能存放數(shù)據(jù)的存儲(chǔ)器,并且始終保證內(nèi)核訪問(wèn)僅需一個(gè)周期。因此,盡可能多地使用SRAM_L塊具有很大意義,它是存放關(guān)鍵代碼的良好區(qū)域。
SRAM_L和SRAM_U是Kinetis K系列單片機(jī)內(nèi)部的兩個(gè)獨(dú)立的RAM區(qū)域,它們的地址空間是連續(xù)的,但是訪問(wèn)方式不同。SRAM_U是通過(guò)系統(tǒng)總線訪問(wèn)的,SRAM_L是通過(guò)代碼總線訪問(wèn)的。這意味著SRAM_U可以更快地存儲(chǔ)和讀取數(shù)據(jù),而SRAM_L可以更快地執(zhí)行代碼[5]5。
Kinetis K系列單片機(jī)提供了修改SRAM_L和SRAM_U配置的方法,具體可以通過(guò)采取以下步驟來(lái)實(shí)現(xiàn):
1.修改鏈接器配置文件(ICF文件),定義SRAM_L和SRAM_U的起始和結(jié)束地址,以及相應(yīng)的內(nèi)存區(qū)域[6]3。如:
define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFC000;
define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
define symbol __region_RAM2_start__ = 0x20000000;
define symbol __region_RAM2_end__ = 0x20003FFF;
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
define region RAM2_region = mem:[from __region_RAM2_start__ to __region_RAM2_end__];
place in RAM2_region {section MY_RAM2};
2.在程序文件中,使用特殊的關(guān)鍵字或?qū)傩詠?lái)指定變量或函數(shù)的存儲(chǔ)位置。如,在IAR編譯器中,可以使用@符號(hào)來(lái)進(jìn)行絕對(duì)定位[7]3。
uint8_t buffer[1024]@“MY_RAM2”;//將buffer數(shù)組放在SRAM_U中
void my_function(void)@“MY_RAM2”;//將my_function函數(shù)放在SRAM_U中
3.在對(duì)變量和函數(shù)進(jìn)行定義時(shí)不要超過(guò)16KB,否則會(huì)導(dǎo)致編譯器報(bào)錯(cuò)。如果需要使用大于16KB的數(shù)組或結(jié)構(gòu)體,可以將它們分割成兩個(gè)或多個(gè)小于16KB的部分,并分別放在SRAM_L和SRAM_U中。
因此,通過(guò)步驟1-3的自由組合,可以配置SRAM_L和SRAM_U的具體地址和內(nèi)存區(qū)域,將重要的指令存儲(chǔ)在代碼執(zhí)行較快的SRAM_L中,并且將超過(guò)16KB的數(shù)組或結(jié)構(gòu)體分割,存儲(chǔ)在數(shù)據(jù)訪問(wèn)較快的SRAM_U中,從而提高單片機(jī)程序的運(yùn)行效率。
緩存是一種高速的內(nèi)存,它可以存儲(chǔ)單片機(jī)頻繁訪問(wèn)的代碼或數(shù)據(jù),從而減少對(duì)慢速的外部存儲(chǔ)器(如Flash或SDRAM)的訪問(wèn)[8]35。Kinetis K系列單片機(jī)內(nèi)部集成了一個(gè)4KB的系統(tǒng)緩存(System Cache),它可以用于加速對(duì)Flash和FlexRAM(可作為EEPROM使用)的訪問(wèn)。系統(tǒng)緩存可以配置為四種模式之一:禁用模式、寫(xiě)回模式、寫(xiě)通過(guò)模式、只讀模式。
論文設(shè)計(jì)了一個(gè)互動(dòng)和實(shí)踐結(jié)合的實(shí)驗(yàn),來(lái)引導(dǎo)學(xué)生了解如何優(yōu)化系統(tǒng)緩存,提高訪問(wèn)速度。根據(jù)系統(tǒng)提供的現(xiàn)有功能,讓學(xué)生在系統(tǒng)緩存四種模式之下分別運(yùn)行同樣的測(cè)試程序,并對(duì)比不同緩存模式下測(cè)試程序?qū)lash和FlexRAM的訪問(wèn)速度,自行總結(jié)出最優(yōu)選擇。
實(shí)驗(yàn)設(shè)計(jì)思路為:首先,創(chuàng)建一個(gè)新的工程,添加系統(tǒng)緩存驅(qū)動(dòng)程序和頭文件,編寫(xiě)主函數(shù)和測(cè)試函數(shù),分別用于初始化系統(tǒng)緩存和測(cè)試對(duì)Flash和FlexRAM的訪問(wèn)速度。其次,編譯并下載程序到開(kāi)發(fā)板上,分別設(shè)置系統(tǒng)緩存為禁用模式、寫(xiě)回模式、寫(xiě)通過(guò)模式和只讀模式,觀察并記錄串口終端上顯示的結(jié)果。再次,將四種緩存模式下對(duì)Flash和FlexRAM的訪問(wèn)時(shí)間進(jìn)行比較和分析。最后,總結(jié)出系統(tǒng)緩存對(duì)單片機(jī)性能的影響。
通過(guò)實(shí)驗(yàn),可得到如下結(jié)果:
1.禁用模式。在這種模式下,系統(tǒng)緩存沒(méi)有起到任何作用,所有對(duì)Flash和FlexRAM的訪問(wèn)都直接通過(guò)總線進(jìn)行,因此訪問(wèn)速度最慢。根據(jù)實(shí)驗(yàn)代碼,假設(shè)每次讀取一個(gè)字(4字節(jié)),那么訪問(wèn)Flash和FlexRAM各需要1000次,總共需要2000次。假設(shè)總線頻率為60MHz,那么每次訪問(wèn)需要16.67ns,那么總共需要33.34μs[9]。
相關(guān)部分代碼如下:
......
cache_mode=kCacheDisableMode;//設(shè)置緩存模式為禁用模式
CACHE_DRV_Init(cache_mode);//初始化系統(tǒng)緩存,并設(shè)置其工作模式
print_string(“Cache mode:Disable ”);//打印緩存模式
test_flash();//測(cè)試對(duì)Flash的訪問(wèn)速度
test_flexram();//測(cè)試對(duì)FlexRAM的訪問(wèn)速度
......
2.寫(xiě)回模式。在這種模式下,系統(tǒng)緩存被啟用,并且當(dāng)緩存行被替換時(shí),它會(huì)將修改過(guò)的數(shù)據(jù)寫(xiě)回到Flash或FlexRAM中。這種模式可以提高對(duì)Flash和FlexRAM的讀取速度,但也會(huì)增加對(duì)Flash和FlexRAM的寫(xiě)入時(shí)間。根據(jù)實(shí)驗(yàn)代碼,假設(shè)每次讀取一個(gè)字(4字節(jié)),那么訪問(wèn)Flash和FlexRAM各需要1000次,總共需要2000次。假設(shè)系統(tǒng)緩存命中率為80%,那么緩存命中時(shí)的訪問(wèn)時(shí)間為0.1ns,緩存未命中時(shí)的訪問(wèn)時(shí)間為16.67ns,總共需要6.68μs。但是,由于系統(tǒng)緩存是寫(xiě)回模式,當(dāng)緩存行被替換時(shí),還需要將其寫(xiě)回到Flash或FlexRAM中。假設(shè)每次寫(xiě)入一個(gè)字(4字節(jié)),那么寫(xiě)入Flash和FlexRAM各需要250次(假設(shè)每個(gè)緩存行有4個(gè)字),總共需要500次。假設(shè)寫(xiě)入Flash和FlexRAM的時(shí)間分別為100μs和10μs,那么總共需要55000μs。因此,寫(xiě)回模式下的總時(shí)間為55006.68μs[10]13。
相關(guān)代碼如下:
......
cache_mode=kCacheWriteBackMode;//設(shè)置緩存模式為寫(xiě)回模式
CACHE_DRV_Init(cache_mode);//初始化系統(tǒng)緩存,并設(shè)置其工作模式
print_string(“Cache mode:Write Back ”);//打印緩存模式
test_flash();//測(cè)試對(duì)Flash的訪問(wèn)速度
test_flexram();//測(cè)試對(duì)FlexRAM的訪問(wèn)速度
......
3.寫(xiě)通過(guò)模式。在這種模式下,系統(tǒng)緩存被啟用,并且當(dāng)緩存行被修改時(shí),它會(huì)同時(shí)更新Flash或FlexRAM中的數(shù)據(jù)。這種模式可以提高對(duì)Flash和FlexRAM的讀取速度,但也會(huì)增加對(duì)Flash和FlexRAM的寫(xiě)入時(shí)間。根據(jù)實(shí)驗(yàn)代碼,假設(shè)每次讀取一個(gè)字(4字節(jié)),那么訪問(wèn)Flash和FlexRAM各需要1000次,總共需要2000次。假設(shè)系統(tǒng)緩存命中率為80%,那么緩存命中時(shí)的訪問(wèn)時(shí)間為0.1ns,緩存未命中時(shí)的訪問(wèn)時(shí)間為16.67ns,總共需要6.68μs。但是,由于系統(tǒng)緩存是寫(xiě)通過(guò)模式,當(dāng)緩存行被修改時(shí),還需要同時(shí)更新Flash或FlexRAM中的數(shù)據(jù)。假設(shè)每次修改一個(gè)字(4字節(jié)),那么修改Flash和FlexRAM各需要1000次,總共需要2000次。假設(shè)修改Flash和FlexRAM的時(shí)間分別為100us和10us,總共需要220000μs。因此,寫(xiě)通過(guò)模式下的總時(shí)間為220006.68μs[11]。
相關(guān)代碼如下:
......
cache_mode = kCacheWriteThroughMode;//設(shè)置緩存模式為寫(xiě)通過(guò)模式
CACHE_DRV_Init(cache_mode);//初始化系統(tǒng)緩存,并設(shè)置其工作模式
print_string(“Cache mode:Write Through ”);//打印緩存模式
test_flash();//測(cè)試對(duì)Flash的訪問(wèn)速度
test_flexram();//測(cè)試對(duì)FlexRAM的訪問(wèn)速度
......
4.只讀模式。在這種模式下,系統(tǒng)緩存被啟用,但只用于讀取Flash或FlexRAM中的數(shù)據(jù),不允許寫(xiě)入。這種模式可以最大程度地提高對(duì)Flash和FlexRAM的讀取速度,而不會(huì)增加對(duì)Flash和FlexRAM的寫(xiě)入時(shí)間。根據(jù)實(shí)驗(yàn)代碼,假設(shè)每次讀取一個(gè)字(4字節(jié)),那么訪問(wèn)Flash和FlexRAM各需要1000次,總共需要2000次。假設(shè)系統(tǒng)緩存命中率為80%,那么緩存命中時(shí)的訪問(wèn)時(shí)間為0.1ns,緩存未命中時(shí)的訪問(wèn)時(shí)間為16.67ns。那么總共需要6.68μs。由于系統(tǒng)緩存是只讀模式,不會(huì)對(duì)Flash或FlexRAM進(jìn)行任何寫(xiě)入操作,因此不會(huì)產(chǎn)生額外的時(shí)間開(kāi)銷,只讀模式下的總時(shí)間為6.68μs[12]。
相關(guān)代碼如下:
......
cache_mode = kCacheReadMode;//設(shè)置緩存模式為只讀模式
CACHE_DRV_Init(cache_mode);//初始化系統(tǒng)緩存,并設(shè)置其工作模式
print_string(“Cache mode:Read Only ”);//打印緩存模式
test_flash();//測(cè)試對(duì)Flash的訪問(wèn)速度
test_flexram();//測(cè)試對(duì)FlexRAM的訪問(wèn)速度
......
綜上,四種模式下訪問(wèn)Flash和FlexRAM的時(shí)間如表1所示,顯然當(dāng)使用系統(tǒng)緩存時(shí),能夠減少對(duì)Flash和FlexRAM的讀時(shí)間,但是由于寫(xiě)回模式和寫(xiě)通過(guò)模式下需要對(duì)Flash和FlexRAM進(jìn)行寫(xiě)操作,反而極大的增加了操作的總時(shí)間。因此,如果需要提高系統(tǒng)運(yùn)行效率,應(yīng)當(dāng)設(shè)置系統(tǒng)緩存為只讀模式。
表1 四種模式下訪問(wèn)Flash和FlexRAM的時(shí)間
此外,還有一些常見(jiàn)的單片機(jī)性能優(yōu)化方法,主要包括:
1.預(yù)先對(duì)數(shù)據(jù)傳送和代碼位置進(jìn)行計(jì)劃,選擇合適的總線和外設(shè)來(lái)傳輸數(shù)據(jù),以避免沖突和延遲。選擇合適的存儲(chǔ)器來(lái)存放代碼,以提高執(zhí)行速度和效率,選擇合適的緩存模式可以優(yōu)化閃存和SRAM的訪問(wèn)。
2.充分利用閃存控制器(FMC)中固有的閃存加速特性。利用FMC提供的FlexMemory功能,將部分閃存作為EEPROM使用。這樣可以在不增加外部存儲(chǔ)器的情況下,實(shí)現(xiàn)數(shù)據(jù)的非易失性存儲(chǔ)和快速訪問(wèn)。FlexMemory還支持分區(qū)功能,可以根據(jù)應(yīng)用需求靈活地配置EEPROM和閃存的大小。利用FMC提供的安全訪問(wèn)功能,保護(hù)閃存中的敏感數(shù)據(jù)或代碼。FMC可以設(shè)置不同的訪問(wèn)權(quán)限,如只讀、只寫(xiě)、讀寫(xiě)或禁止訪問(wèn),以及不同的訪問(wèn)范圍,如字節(jié)、頁(yè)或扇區(qū)。FMC還支持閃存保護(hù)單元(FPU),可以對(duì)閃存中的特定區(qū)域進(jìn)行加密或解密。
3.合理使用代碼優(yōu)化功能。編譯器通常為優(yōu)化速度或空間提供了一個(gè)選擇,表面上看來(lái),優(yōu)化速度是優(yōu)化性能的最佳方案,但事實(shí)并非總是如此。如果對(duì)空間的優(yōu)化可以為SRAM塊中的模式代碼留有余地,或者更利于在緩存中容納函數(shù),那么優(yōu)化空間可能更利于提升系統(tǒng)性能。實(shí)驗(yàn)可以設(shè)置相應(yīng)的開(kāi)關(guān)選項(xiàng),以確定最佳的編譯器設(shè)置。如,在IAR Embedded Workbench中,可以通過(guò)Project->Options->C/C++ Compiler->Optimizations來(lái)設(shè)置優(yōu)化級(jí)別和相關(guān)選項(xiàng)。在Keil MDK中,可以通過(guò)Project->Options for Target->C/C+±>Optimizations來(lái)設(shè)置優(yōu)化級(jí)別和相關(guān)選項(xiàng)[13]。
4.采用DMA傳輸大塊數(shù)據(jù)。DMA傳輸數(shù)據(jù)比內(nèi)核的效率更高。使用DMA還可釋放內(nèi)核,便于內(nèi)核執(zhí)行其他任務(wù)(更加并行化)。在Kinetis K系列單片機(jī)中,有一個(gè)eDMA(增強(qiáng)型直接內(nèi)存訪問(wèn))模塊,它可以支持多達(dá)16個(gè)DMA通道,每個(gè)通道可以配置不同的觸發(fā)源、傳輸屬性和中斷選項(xiàng)。eDMA模塊可以與I2C(串行總線)模塊配合使用,實(shí)現(xiàn)I2C讀取或?qū)懭氪髩K數(shù)據(jù)的功能[14]60-65。
5.采用錯(cuò)誤檢測(cè)和冗余設(shè)計(jì)等措施來(lái)優(yōu)化系統(tǒng)可靠性,如使用校驗(yàn)算法定期檢查存儲(chǔ)器中的數(shù)據(jù)是否錯(cuò)誤。錯(cuò)誤檢測(cè)和冗余設(shè)計(jì)是兩種常用的可靠性優(yōu)化措施,它們可以提高系統(tǒng)的容錯(cuò)能力和抗干擾能力。具體來(lái)說(shuō),錯(cuò)誤檢測(cè)是指通過(guò)一定的算法或電路,檢測(cè)系統(tǒng)中是否存在錯(cuò)誤或異常,并及時(shí)報(bào)告或糾正。冗余設(shè)計(jì)是指在系統(tǒng)中增加額外的元件或功能,以備原有的元件或功能出現(xiàn)故障時(shí)替代使用。
以上單片機(jī)性能優(yōu)化的思路,就是下一步實(shí)驗(yàn)教學(xué)的改進(jìn)方向,希望能在以后的工作中持續(xù)深化。
論文通過(guò)優(yōu)化實(shí)驗(yàn)教學(xué)方法,整合新技術(shù)和平臺(tái),并提供實(shí)際實(shí)驗(yàn)案例,改進(jìn)了教學(xué)環(huán)節(jié),提高了高校實(shí)驗(yàn)教學(xué)的趣味性和實(shí)用性,達(dá)到了較好的教學(xué)目的。在實(shí)驗(yàn)案例的設(shè)計(jì)上,通過(guò)引導(dǎo)學(xué)生編寫(xiě)測(cè)試程序驗(yàn)證不同設(shè)置下的單片機(jī)運(yùn)行效率,使學(xué)生們直觀地了解了系統(tǒng)性能優(yōu)化的方法、過(guò)程和意義,從而提升了教學(xué)效果。
濟(jì)寧學(xué)院學(xué)報(bào)2023年6期