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