《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業(yè)界動態(tài) > 基于Small RTOS51的數據采集器設計

基于Small RTOS51的數據采集器設計

2008-08-01
作者:未知

?

摘要:介紹如何運用Small RTOS51多任務" title="多任務">多任務操作系統(tǒng)進行嵌入式控制器的軟件設計" title="軟件設計">軟件設計,。首先介紹Small RTOS51多任務操作系統(tǒng),然后介紹基于該操作系統(tǒng)進行數據采集器" title="數據采集器">數據采集器軟件系統(tǒng)的設計,。 ?

??? 關鍵詞:Small RTOS51 多任務操作系統(tǒng) 數據采集器?

?

  隨著嵌入式系統(tǒng)的發(fā)展,,嵌入式軟件設計向軟件平臺靠近,,單片機軟件設計不再是單一線程結構方式,而是逐步采用多任務的設計思想,。實時內核也稱為實時操作系統(tǒng)或RTOS,。它使得實時應用程序的設計、擴展和維護變得更容易,,不需要大的改動就可以增加新的功能,。通過應用程序分割成若干獨立的任務,RTOS使得應用程序的設計過程大為簡化,。使用可剝奪性內核時,,所有時間要求苛刻的事件都得到了盡可能快捷、有效的處理,。通過有效的服務,,如信號量" title="信號量">信號量、郵箱、隊列,、延時,、超時等,RTOS使得資源得到更好的利用,。?

  目前8位單片機在嵌入式系統(tǒng)中,,應用還是最廣泛的。51多任務系統(tǒng)中,,Keil C51 所帶的RTX51 Full 太大(6KB多),,且需要外部RAM,又無源代碼,,很多時候不實用,。RTX51 Tiny雖然小(900多字節(jié)),,但是任務沒有優(yōu)先級和中斷管理,,也無源代碼,也不太實用,。而uC/OSII雖有源代碼,,但是它太大,又需要外部RAM,,所有函數又必須是重入函數,,用在51這類小片內RAM的單片機上有點勉強。Small RTOS為小RAM系統(tǒng)設計,,RAM需求小,,比較適合51這種資源比較少的系統(tǒng)上。?

1 數據采集器系統(tǒng)設計?

??? 1.1 數據采集器原理?

  數據采集器是將采集到的電表脈沖信號轉換為電能量數據整理保存,,并與上行設備通信傳輸到管理單元進行電表數據的統(tǒng)一管理,。?

??? 1.2 硬件設計?

  主控制器采用AT89C52芯片,利用7032將脈沖信號采樣,,經過CPU的處理將數據存儲到EEPROM芯片中,,數據通過紅外信道上傳到掌上電腦中。系統(tǒng)框圖如圖1所示,。?

2 Small RTOS51多任務操作系統(tǒng)?

  Small RTOS是一個源代碼公開的多任務實時操作系統(tǒng),,Small RTOS 51是其在8051系列處理器上的移植(使用Keil C51)。Small RTOS可以簡化那些復雜而且時間要求嚴格的工程的軟件設計工作,。?

Small RTOS有以下的特點,。?

① 公開源代碼。只要遵循許可協(xié)議,,任何人可以免費獲得源代碼,。?

② 可移植。盡量把與CPU相關部分壓縮到最小,與CPU無關部分用ANSI C編寫,。?

③ 可固化,。Small RTOS為嵌入式系統(tǒng)設計,如果有固化手段,,它可以嵌入到產品中成為產品的一部分,。?

④ 占先式,。Small RTOS可以管理17個任務,,用戶最多可以使用16個任務,每個任務優(yōu)先級不同,。?

⑤ 中斷管理,。中斷可以使正在執(zhí)行的任務掛起。如果優(yōu)先級更高的任務被中斷喚醒,,則高優(yōu)先級的任務在中斷嵌套全部退出后立即執(zhí)行,。中斷嵌套層數可達255 層。如果需要,,可以禁止中斷嵌套管理,。?

⑥ RAM需求小。Small RTOS為小RAM系統(tǒng)設計,,因而RAM需求小,,相應的,系統(tǒng)服務也少,。?

目前,,Small RTOS的最新版本為1.20.0??梢赃M行任務的建立,、刪除、動態(tài)內存分配等操作,。?

3 任務分解設計?

  數據采集器主要包括采集處理,、顯示處理、按鍵處理,、通信處理等模塊,,由中斷處理相應采集脈沖信號和串口" title="串口">串口通信。因此,,將任務分解為按鍵顯示處理,、接收數據、命令處理,、發(fā)送數據,、采樣濾波處理、系統(tǒng)檢測6個任務。?

  主程序進行系統(tǒng)初始化以后,,順序建立6個任務,,進入CPU休眠狀態(tài)。各個任務運行后,,首先進入任務休眠狀態(tài),,等待相應任務的喚醒。任務被喚醒以后,,進行相應處理,,再次進入休眠狀態(tài)。這樣,,可以減少任務切換,,減輕系統(tǒng)負擔。

  任務框圖如圖2所示,,主程序流程如圖3所示,。

  脈沖到來時,引發(fā)相應外部中斷,,由中斷處理程序處理后,,置相應信號量,然后喚醒采樣濾波處理任務,。采樣濾波處理任務將數據整理后,,存儲到外部存儲器中。?

  串口數據到來時,,引發(fā)串口中斷,,串口中斷處理程序喚醒數據接收任務。數據接收任務完成數據包的接收,,并根據通信數據包的特點進行錯誤處理,。數據包被正確接收后,喚醒命令處理任務,。命令處理任務判斷數據包的校驗和,,若正確就處理相應的命令。命令處理完成以后,,將回應數據打包,,然后喚醒發(fā)送數據任務,將數據通過串口發(fā)送出去,。?

  每個任務均采用以下結構,。?

while(1)?

{?

OSWait(K_SIG, 0); // 任務睡眠,等待任務喚醒處理過程?

}?

任務的喚醒用OSTaskResume(TASK_ID)完成,。?

  串口接收和發(fā)送處理采用隊列模式,,設立發(fā)送和接收兩個緩沖區(qū),,獨立的進出隊列處理。數據解包和數據打包采用單獨處理方式,,這樣單獨處理通信協(xié)議,,以利于今后協(xié)議的改動。?

  串口緩沖I/O模塊的程序見本刊網站www.dpj.com.cn,。?

  系統(tǒng)節(jié)拍設置:將OS_TICKS_PER_SEC設為20,,即系統(tǒng)時鐘節(jié)拍為每秒20次。定義定時器0的中斷時間設為50ms,。?

#define m_Fosc 11059200L?

#define m_TIME 65536L - (m_Fosc / (OS_TICKS_PER_SEC *?

12L))?

void InitTimer0(void) {?

TMOD = (TMOD & 0xF0) | 0x01;?

TH0 = m_TIME / 256;?

TL0 = m_TIME % 256;?

ET0 = 1;?

TF0 = 0;?

}?

  TestSys任務定時檢測各任務的回應,,若長時間沒有回應,則啟動復位功能,,熱啟動整個系統(tǒng),,以保證系統(tǒng)的可靠性,。?

  由于單片機采用AT89C52,,片內RAM為256,使用DS12887中的一部分RAM作為擴展,。隊列長度各為15個字節(jié)時,,程序經過9級優(yōu)化后,RAM占用140字節(jié),,XRAM占用106字節(jié),。由于系統(tǒng)RAM很小,因此,,沒有使用信號量和消息進行數據傳輸,。在其它應用時,可以根據系統(tǒng)資源進行信號量和消息的使用,,這樣可以更有效地使任務運行,。?

4 ?

  在嵌入式系統(tǒng)中,使用RTOS是大勢所趨,,因為在大多數情況下編程效率比執(zhí)行效率重要,。利用Small RTOS多任務系統(tǒng)設計,可以使51單片機發(fā)揮的更有效,,并且今后的軟件維護和改進更方便,,更可靠。?

?

?

《基于Small RTOS51的數據采集器設計》一文由3edu教育網www.3edu.net摘錄,,版權歸作者所有,轉載請注明出處!?

本站內容除特別聲明的原創(chuàng)文章之外,,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點,。轉載的所有的文章,、圖片,、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者,。如涉及作品內容,、版權和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。