基于Cortex―M3的自動氣象站設計
數(shù)據(jù)采集各模塊的關鍵技術指標見表1,其中溫濕度、氣壓使用平均算法,風速使用滑動平均算法。本文引用地址:http://cafeforensic.com/article/159309.htm
平均算法:測量一分鐘,每分鐘取樣6次,去掉一個最大值和最小值,剩下4個值取算術平均。
滑動平均算法:當采集速率每秒一次(t=1),平均期間T=3s,連續(xù)測量120s,代入下面公式計算:
式中:n個樣本值的平均值,:n-1個樣本值的平均值,Yn:第n個樣本值,t:采樣時間,T:平均期間(s)。
3 軟件設計
3.1 基于Cortex—M3的μc/os—II移植
μc/os—II是一種典型的具有可剝奪型內(nèi)核的基于任務優(yōu)先級調(diào)度的實時操作系統(tǒng),可同時管理多達64個任務,由于Cortex—M3不支持32位的ARM指令集,而只支持Thumb-2指令集,這種不向后兼容的方式使Cortex—M3之前平臺使用的ARM匯編語言程序都不能直接移植到Cort ex—M3上,筆者從μc/os—II和Cortex—M3的內(nèi)核結構研究著手,對μc/os—II內(nèi)核中INCLUDES.H、OS_CFG.H、OS_CPU.H、OS_CPU_ C.C、OS_CPU_A.ASM五個與應用程序和處理器相關的文件進行修改,在INCLUDES.H中增加了與STM32處理器相關的外設寄存器定義和內(nèi)存映射的頭文件,在OS_CFG.H中完成對μc/os—II內(nèi)核構造部分的配置工作,在OS_CPU.H中完成與編譯器相關數(shù)據(jù)類型的定義、任務堆棧數(shù)據(jù)類型的定義,以及任務堆棧方向的設定工作,在OS_CPU_C.C中根據(jù)Cortex—M3內(nèi)核結構完成系統(tǒng)任務堆棧結構設計,由于在C環(huán)境下無法對Cortex—M3的寄存器進行操作,所以需要在OS_CPU_A.ASM匯編環(huán)境中完成對臨界區(qū)函數(shù)、上下任務切換函數(shù)以及中斷服務子程序中的任務切換函數(shù)的設計工作,在完成以上修改后還需在c環(huán)境下增加系統(tǒng)時鐘配置和中斷函數(shù)為μc/os—II提供一個周期性信號源,在STM32中系統(tǒng)時鐘是由SysTick定時器來提供的。
3.2 μc/os—II任務設計
在μc/os—II架構下整體設計中需要建立7個任務,如圖2所示,由于統(tǒng)計任務主要作用是計算當前CPU的利用率,需要消耗相當?shù)?a class="contentlabel" href="http://cafeforensic.com/news/listbylabel/label/STM32">STM32內(nèi)部資源,所以為節(jié)約系統(tǒng)資源在這里需要把系統(tǒng)配置OS_TASK_STAT_EN設置為0,禁止使用統(tǒng)計任務,空閑任務是必須的,在沒有其它任務進入就緒狀態(tài)時投入運行,當系統(tǒng)開始運行前自動建立,優(yōu)先級自動配置為最低。由于系統(tǒng)要求在開始多任務調(diào)度前必須新建一個任務,所以我們建立了一個開始任務,開始仟務作用就是新建另外5個任務,包括:溫濕度采集任務、氣壓數(shù)據(jù)采集任務、風速采集任務、數(shù)據(jù)存儲任務、數(shù)據(jù)發(fā)送任務,完成這5個任務建立后開始任務就會自己掛起。完成對任務設計后還需要對任務的優(yōu)先級進行設置,空閑任務優(yōu)先級設置為最低,風速采集任務頻率最高為1s/次,所以優(yōu)先級應設置為最高,溫濕度和氣壓采集任務頻率相同為10s/次,設置優(yōu)先級應低于風速采集任務,數(shù)據(jù)存儲和發(fā)送任務應該都在前面幾個數(shù)據(jù)采集任務完成后,所以設置優(yōu)先級應該更低一些,開始任務由于在新建任務后被掛起并不參與任務調(diào)度,所以優(yōu)先級可以設置為次于空閑任務的最低級。
3.3 系統(tǒng)整體調(diào)試
在主函數(shù)中需要進行初始化工作,主要完成STM32時鐘系統(tǒng)和μc/os—II時鐘系統(tǒng)配置,初始化操作系統(tǒng)后新建開始任務TaskStart后操作系統(tǒng)開始運行,在系統(tǒng)剛開始進行任務調(diào)度時由于只有空閑任務和開始任務參與任務調(diào)度,開始任務優(yōu)先級最高所以執(zhí)行開始任務,在開始任務中又新建氣壓測量任務(TaskPre)、溫濕度測量任務(TaskTem)、風速測量任務(TaskV)、數(shù)據(jù)存儲任務(TaskFlash)、數(shù)據(jù)發(fā)送任務(TaskSim),完成任務新建后開始任務被掛起進入休眠狀態(tài),不再參與任務調(diào)度,根據(jù)事先設計好的優(yōu)先級系統(tǒng)總是執(zhí)行優(yōu)先級最高的任務,風速測量任務優(yōu)先級最高,掛起時間一到總能得到處理器的使用權,當測量完畢后任務自動掛起不參與任務調(diào)度,類似的情況,溫濕度測量、氣壓測量完成各自測量數(shù)據(jù)并完成數(shù)據(jù)處理器后也自動掛起,并把標志為置1表示測量工作完成,數(shù)據(jù)存儲任務和數(shù)據(jù)發(fā)送任務根據(jù)判斷標志位決定是否進行數(shù)據(jù)存儲和數(shù)據(jù)發(fā)送工作,其主函數(shù)和開始任務主要代碼如下:
斷路器相關文章:斷路器原理
高壓真空斷路器相關文章:高壓真空斷路器原理 漏電開關相關文章:漏電開關原理 土壤濕度傳感器相關文章:土壤濕度傳感器原理 溫濕度控制器相關文章:溫濕度控制器原理 漏電斷路器相關文章:漏電斷路器原理
評論