摘 要: 針對(duì)Cortex-M3內(nèi)核的STM32處理器平臺(tái),,成功移植μC/OS操作系統(tǒng),并引入FatFs開(kāi)源軟件,,構(gòu)建了FAT32通用文件系統(tǒng),。以溫度采集與記錄系統(tǒng)為實(shí)例,通過(guò)對(duì)μC/OS操作系統(tǒng),、FAT文件系統(tǒng),、TF卡等相關(guān)技術(shù)的分析,實(shí)現(xiàn)了面向TF卡存儲(chǔ)媒介的大容量存儲(chǔ)系統(tǒng),,將實(shí)時(shí)溫度按時(shí)間關(guān)系存儲(chǔ)至TF卡,。
關(guān)鍵詞: μC/OS-II;TF卡,;FatFs文件系統(tǒng)模塊
0 引言
隨著嵌入式微處理器功能的不斷增強(qiáng),,嵌入式系統(tǒng)廣泛應(yīng)用于音頻、視頻,、故障記錄,、數(shù)據(jù)記錄等大批量數(shù)據(jù)存儲(chǔ)的場(chǎng)合,傳統(tǒng)的由單片機(jī)構(gòu)成的系統(tǒng)簡(jiǎn)單的對(duì)存儲(chǔ)媒介按地址,、按字節(jié)的讀/寫(xiě)已然不能滿足人們的實(shí)際需求,。基于RTOS的存儲(chǔ)系統(tǒng)在宕機(jī),、斷電等異常發(fā)生時(shí),,可以保證數(shù)據(jù)的完整性以及能夠快速地恢復(fù)正常工作。為了與現(xiàn)行PC平臺(tái)共享數(shù)據(jù),,嵌入式系統(tǒng)迫切需要采用通用文件系統(tǒng)來(lái)實(shí)現(xiàn)大批量數(shù)據(jù)的管理[1],。因此,本文以基于μC/OS操作系統(tǒng)的TF卡存儲(chǔ)系統(tǒng)的設(shè)計(jì)為研究對(duì)象,,具有很好的實(shí)際意義,。
本文基于μC/OS操作系統(tǒng)平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了以PT100鉑電阻為溫度傳感器,、以STM32F107VCT6微處理器為核心的硬件平臺(tái),,實(shí)現(xiàn)環(huán)境溫度采集和實(shí)時(shí)時(shí)鐘功能,并在PC上顯示實(shí)時(shí)溫度以及將溫度數(shù)據(jù)按時(shí)間關(guān)系存儲(chǔ)至TF卡文件中,。系統(tǒng)實(shí)現(xiàn)框圖如圖1所示,。
1 溫度傳感器
本文采用溫度傳感器PT100測(cè)溫。PT100是鉑熱電阻,,當(dāng)PT100在0℃時(shí)阻值為100 ?贅,,它的阻值會(huì)隨著溫度的增加呈規(guī)律性的變化。在-50℃~+600℃范圍內(nèi),,PT100具有其他任何溫度傳感器無(wú)法比擬的優(yōu)勢(shì),。PT100驅(qū)動(dòng)電路如圖2所示,。
在0≤t<65℃時(shí),PT100鉑熱電阻阻值與輸出電壓V的關(guān)系為V=k×R+b,。在第一次使用PT100時(shí),,需要校準(zhǔn)PT100。校準(zhǔn)過(guò)程如下:
?。?)在PT100插件處插上100 Ω電阻,,獲取AD值記為Vm。
?。?)在PT100插件處插上125 Ω電阻,,獲取AD值記為Vn。
?。?)根據(jù)數(shù)據(jù)(100,,Vm)和(125,Vn)求取k,、b系數(shù),。
(4)軟件實(shí)現(xiàn)將k,、b系數(shù)值存儲(chǔ)至EEPROM中,。
在使用PT100測(cè)試溫度時(shí),根據(jù)轉(zhuǎn)換的AD電壓值與k,、b系數(shù)獲取PT100阻值R,。然后利用式(1)求取溫度值:
T=sqrt(4×Pt_B×(R/Pt_R0)+Pt_A×Pt_A-4×Pt_B)-Pt_A)/(2×Pt_B)(1)
其中,Pt_A=0.003 908 3,,Pt_B=-0.000 000 577 5,,Pt_R0=100,單位為℃,。
2 μC/OS-II操作系統(tǒng)
μC/OS-II是以任務(wù)為核心的實(shí)時(shí)操作系統(tǒng),μC/OS-II V2.52可以管理64個(gè)任務(wù),,任務(wù)管理包括:創(chuàng)建任務(wù),、掛起任務(wù)、刪除任務(wù),、喚醒任務(wù),、改變?nèi)蝿?wù)優(yōu)先級(jí)和獲取任務(wù)狀態(tài)。每個(gè)任務(wù)都有唯一的優(yōu)先級(jí),,優(yōu)先級(jí)號(hào)越低,,任務(wù)的優(yōu)先級(jí)越高,任務(wù)越重要,。在任一給定的時(shí)刻,,任務(wù)的狀態(tài)已知,,且為以下5種狀態(tài)中的一種,各任務(wù)狀態(tài)切換如圖3所示,。
?。?)睡眠狀態(tài):任務(wù)駐留在程序空間中,還沒(méi)有交給μC/OS操作系統(tǒng)內(nèi)核管理,。
?。?)就緒狀態(tài):任務(wù)一旦建立,就處于就緒狀態(tài),,準(zhǔn)備運(yùn)行,。若新建的任務(wù)優(yōu)先級(jí)比正運(yùn)行的任務(wù)優(yōu)先級(jí)高,則內(nèi)核提供任務(wù)切換服務(wù),,新任務(wù)運(yùn)行,。
(3)運(yùn)行狀態(tài):已經(jīng)建立的,、就緒狀態(tài)中優(yōu)先級(jí)別最高的任務(wù)進(jìn)入運(yùn)行狀態(tài),。任何時(shí)刻只能有一個(gè)任務(wù)處于運(yùn)行狀態(tài)。
?。?)等待狀態(tài):正在運(yùn)行的任務(wù)通過(guò)調(diào)用OSTimeDly()和OSTimeDlyHMSM()函數(shù)實(shí)現(xiàn)延時(shí),,等待延遲時(shí)間到;運(yùn)行中的任務(wù)可能需要等待某一事件的發(fā)生,,從而進(jìn)入等待狀態(tài),。
(5)中斷服務(wù)狀態(tài):運(yùn)行中的任務(wù)被中斷,,從而進(jìn)入中斷服務(wù)狀態(tài)[2],。
有時(shí),任務(wù)或中斷與任務(wù)之間需要傳遞信息,,這種信息傳遞稱為任務(wù)間的通信,。μC/OS-II支持3種通信方式:信號(hào)量、消息郵箱,、消息隊(duì)列,,它們統(tǒng)稱為事件。每個(gè)事件由獨(dú)立的事件控制塊ECB控制,,ECB定義了事件類型,,包含了當(dāng)前正在等待事件發(fā)生的任務(wù)號(hào)等信息。μC/OS-II還具有時(shí)間管理與內(nèi)存管理等功能,。
3 TF卡與FatFs文件系統(tǒng)
當(dāng)嵌入式產(chǎn)品需要擴(kuò)展系統(tǒng)容量用來(lái)存儲(chǔ)數(shù)據(jù)時(shí),,目前常用的有U盤(pán)、Flash芯片,、TF卡等,,其中最適合單片機(jī)系統(tǒng)的莫過(guò)于TF卡了,,它不僅支持最大容量32 GB,還支持SPI接口,,且能在TF卡上實(shí)現(xiàn)文件系統(tǒng)[3],。
FatFs Module是一種完全免費(fèi)開(kāi)源的FAT文件系統(tǒng)模塊,專門(mén)為小型嵌入式系統(tǒng)設(shè)計(jì),。FatFs的編寫(xiě)遵循ANSIC,,并且完全與磁盤(pán)I/O層分開(kāi),經(jīng)簡(jiǎn)單的修改便可移植到多種嵌入式處理器上[4],。FatFs系統(tǒng)框圖如圖4所示,。
FatFs具有清晰的層次結(jié)構(gòu),應(yīng)用層提供規(guī)范的API接口函數(shù),,用戶可直接調(diào)用這些函數(shù)實(shí)現(xiàn)讀文件(f_read),、寫(xiě)文件(f_write)、打開(kāi)文件(f_open)和一些文件夾操作等,,所以即使不理解FatFs Module的內(nèi)部結(jié)構(gòu)以及復(fù)雜的FatFs協(xié)議,,用戶也可以通過(guò)這些API完成對(duì)文件的所有操作。
FatFs Module層為中間層,,為FatFs核心內(nèi)容,,主要實(shí)現(xiàn)了FAT協(xié)議。在移植過(guò)程中,,不需要修改此部分內(nèi)容,。
底層是應(yīng)用層與磁盤(pán)介質(zhì)的接口,在移植過(guò)程中需要修改此部分,,包括存儲(chǔ)媒介讀寫(xiě)接口I/O驅(qū)動(dòng)以及文件操作的時(shí)間RTC等,。最少只需要編寫(xiě)3個(gè)底層驅(qū)動(dòng)函數(shù):
(1)文件系統(tǒng)初始化函數(shù)
DSTATUS disk_initialize(BYTE drv)
?。?)文件系統(tǒng)讀驅(qū)動(dòng)
DRESULT disk_read(BYTE drv,,BYTE*buff,DWORD sector,,BYTE count)
?。?)文件系統(tǒng)寫(xiě)驅(qū)動(dòng)
DRESULT disk_write(BYTE drv,const BYTE*buff,,DWORD sector,BYTE count)
用戶根據(jù)具體的硬件平臺(tái)填充相關(guān)函數(shù),,即可完成移植,。
4 調(diào)試與結(jié)果
將SD卡中2014-10-28日15:0:0~15:10:0的數(shù)據(jù)繪制成折線圖,如圖5所示,。
5 結(jié)論
本文基于μC/OS-II操作系統(tǒng)平臺(tái)設(shè)計(jì)并實(shí)現(xiàn)了以PT100鉑電阻為溫度傳感器,、以STM32F107VCT6微處理器為核心的硬件平臺(tái),,實(shí)現(xiàn)了環(huán)境溫度采集和實(shí)時(shí)時(shí)鐘功能,并在PC上顯示實(shí)時(shí)溫度以及將溫度數(shù)據(jù)按時(shí)間關(guān)系存儲(chǔ)至TF卡文件中[5],。
由于該系統(tǒng)缺少與用戶交互界面,,因此系統(tǒng)缺乏一定的靈活性。今后的工作就是實(shí)現(xiàn)PC與MCU的雙向通信,,選擇在STM32平臺(tái)上移植GUI,,提供給用戶更多的選擇。當(dāng)然,,通過(guò)交互界面,,用戶可以一目了然地了解某一時(shí)段的環(huán)境溫度變化情況等。完善系統(tǒng)功能和提高采集數(shù)據(jù)精度仍是今后的主要工作,。
參考文獻(xiàn)
[1] 李世奇,,董浩斌,李榮生.基于FatFs文件系統(tǒng)的SD卡存儲(chǔ)器設(shè)計(jì)[J].測(cè)控技術(shù),,2011,,30(12):79-81.
[2] 于鵬飛.嵌入式存儲(chǔ)設(shè)備上文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連交通大學(xué),2007.
[3] LABROSSE J J.嵌入式實(shí)時(shí)操作系統(tǒng)?滋C/OS-II[M].邵貝貝,,譯.北京:北京航空航天大學(xué)出版社,,2003.
[4] 張?jiān)疲輹酝?,肖迎?基于ARM的嵌入式文件系統(tǒng)研究與設(shè)計(jì)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,,2010,19(3):299-231.
[5] 楊建光.基于μC/OS-II的溫度控制系統(tǒng)的研制[D].天津:中國(guó)民航大學(xué),,2007.