51微控制器作業系統開發中的問題與技巧

2021-03-31 11:14:09 字數 3588 閱讀 3561

51微控制器作業系統開發中的問題與技巧

作 者:■ 東華理工學院 吳光文 周航慈

引 言51系列微控制器是美國intel公司在2023年推出的高效能8位微控制器,在我國的應用非常廣泛。目前,在軟體設計中需要軟體工程師從底層做起,在系統軟體設計方面需要做大量的重複性勞動。如果開發一套基於51系列微控制器的作業系統,那麼使用者只需要編寫各個任務的程式,不必同時將所有任務執行的各種情況記在心中,不但大大減少了程式編寫的工作量,而且減少了出錯的可能性。

1 開發平台的選擇和論證

開發平台的選擇至關重要,因為有時它不光影響進度、產品質量、可維護性等一般問題,還涉及到方案的可實現性。

在本系統中,選擇51系列微控制器作為作業系統的執行平台有以下原因。

首先,51系列微控制器應用非常廣泛,一大批效能優越的51相容微控制器相繼推出。這裡包括:低功耗、高速度和增強型的philips公司的系列產品;完美地將flash(非易失快閃儲存器技術)eeprom與80c51核心結合起來的atmel公司的系列產品;在抗干擾性能,電磁相容和通訊控制匯流排功能上獨樹一幟,其產品常用於工作環境惡劣場合的siemens公司的系列產品以及一些其它公司的產品。既然產品如此豐富,效能如此優越,那麼在處理多工並且對實時性要求嚴格的系統設計中,為了充分挖掘微控制器的潛能(尤其是在實時性方面),也是為了簡化開發的過程,基於51系列微控制器的實時作業系統的需求就十分強烈了。keil公司的rtx51 full就是乙個基於51系列微控制器的有實用價值的實時作業系統,但該作業系統是乙個原始碼不公開的收費軟體。

其次,借助於keil c51的整合開發環境,完全可以開發出適用於51系列微控制器的作業系統**。

keil c51軟體提供豐富的庫函式和功能強大的windows介面整合開發除錯工具。

另外重要的一點, keil c51生成的目標**效率非常高,多數語句生成的彙編**很緊湊,容易理解。在開發大型軟體時,更能體現高階語言的優勢。c編譯器能產生可重入**,而且用c語言可以開啟和關閉中斷。

2 開發51微控制器作業系統應注意的問題

(1)作業系統軟體的**不能太長

因為51系列微控制器的系統硬體資源相對匱乏,如果作業系統的**比應用程式的**還大,甚至使得使用者的應用程式要考慮給作業系統讓出資源,這樣的作業系統即使功能再完善,也不實用。現在流行的嵌入式作業系統就不能應用於51系列微控制器,原因是**太大。開發乙個5000行的基於裸機的應用程式也就是占用7~8kb rom空間,乙個作業系統用掉了幾十kb,佔空間不算,實時性的優勢恐怕也沒了(執行這麼多的指令要時間)。所以,μcos的作者也不支援將他的**移植到51系列微控制器上,這也就不奇怪了。

(2)作業系統不能占用太多的片內ram空間

51系列微控制器只有128個或者256個位元組的片內ram空間,稍微不注意就用完了。如果作業系統把片內的ram使用得所剩無幾,那使用者的應用程式用什麼? 如果說使用者的程式可以把變數定義在片外ram中的話,那麼系統的硬體堆疊放在哪? 眾所周知,51系列微控制器的硬體堆疊不能放在片外,所以要在51系列微控制器上開發作業系統的話就要少用它的片內ram。但是不用片內ram是辦不到的,因為作業系統也要傳遞引數,也要使用堆疊。c51微控制器的c函式傳遞引數是通過暫存器和儲存器的,不能通過堆疊。但是可以通過一些措施使得作業系統**少用片內ram。

(3)解決好函式的重入問題

開發實時佔先式的作業系統,可重入函式是非用不可的。可重入函式可以被乙個以上的任務呼叫,而不必擔心資料被破壞。可重入函式任何時候都可以被中斷,一段時間後又可以執行,而應用資料不會丟失。使得函式具有可重入性必須使得函式能夠滿足下列三個條件之一:

① 不使用共享資源;

② 在使用共享資源時關中斷,使用完畢後再開中斷;

③ 在使用共享資源時申請訊號量,使用完後釋放訊號量。

這些條件在標準c中程式設計很容易實現,但是在keil c51中就比較麻煩。因為標準c是把區域性變數分配到使用者堆疊中(動態分配),而keil c51將區域性變數分配到暫存器或記憶體固定位址(靜態分配),並通過變數覆蓋分析的方法,使多個函式的區域性變數使用相同的記憶體位址以減少記憶體占用。在keil c51中,如果區域性變數分配在暫存器中還好些,如果區域性變數分配在記憶體中就比較麻煩。

(4)堆疊的分配問題

佔先式作業系統的主要任務就是進行任務的排程,通過對任務的實時排程來完成系統的功能。任務排程過程中,不可避免的發生任務對系統資源的搶占問題,因為系統中cpu只有乙個,而每個任務都認為自己是cpu的絕對占用者,每乙個任務都是乙個死迴圈。任務間進行切換的依據就是各自的優先順序,乙個高優先順序的任務可以通過任務排程函式或者中斷退出函式等來中止正在執行的任務。被中斷的任務只有自己的優先順序在當前就緒任務表中最高時,才能從被中斷處繼續執行。這就需要為每個任務分配任務堆疊,來儲存任務的環境變數。由於每個任務在不同時刻被中斷時需要儲存的環境變數數目不同,所以任務堆疊空間的分配問題也是一門學問。

3 一些解決問題的技巧

(1)片內ram占用問題的解決

任務堆疊最好不要放在片內,如果把任務堆疊放在片內的話,使用者應用程式可使用的資源就非常有限,應用程式的功能也會受到限制。這就是為什麼某些把任務堆疊放在片內的基於51系列微控制器的實時作業系統只能用來做些演示實驗,但並不實用。乙個有實用價值的基於51系列微控制器的實時作業系統必須在512位元組以上的ram環境中執行。隨著整合技術的發展,現在已經出現了很多帶有輔助ram的51系列微控制器,這類微控制器把片外的ram整合到晶元內,使用movx指令來訪問這些ram。如果使用者不想通過三匯流排來擴充套件片外ram的話,可以選用這種帶有輔助ram的微控制器。此外,因為作業系統要用到一些全域性變數,鑑於處理的速度問題又不想把它們全部的放在片外,那就可以根據這些全域性變數應用的頻繁程度來決定把哪些移到片外,哪些留在片內。別小看這幾個位元組的節約,在51系列微控制器上效果會很明顯。筆者認為在這種資源相對匱乏的微控制器上,開發作業系統的最高境界應該是開發乙個綠色的作業系統,使用者在應用作業系統時可以用的系統資源應該和基於裸機程式設計差不多。

(2)重入問題的解決

應該盡量使有重入性要求的函式的引數傳遞通過暫存器來完成,這樣可以用一般的方法來編寫函式,使得函式具有重入性。如果實在是暫存器不夠用的話,可以動用硬體堆疊來儲存這些區域性變數。

(3)堆疊分配問題的解決

鑑於各個任務對於任務堆疊大小的要求不同,即使同乙個任務在不同的時刻被中斷,它對堆疊大小的要求也不相同的情況,可以將任務堆疊多分配出乙個位元組,用來統計任務堆疊中有效資料的個數。微控制器的片內ram中,堆疊的棧底也做乙個標誌,當任務切換時,把當前任務放在堆疊中的環境變數從棧底到棧頂全部拷貝到任務的堆疊中,然後把將要執行任務的任務堆疊中的所有資料恢復到棧底標誌開始的地方。任務堆疊和硬體堆疊之間的資料拷貝如圖1所示。

其中,stack(i)和stack(j)都是指標陣列stack[max_tasks]中的元素,num=sp-stkstart,圖1中所要進行的操作步驟是:①將系統硬體堆疊中的內容放到當前任務的堆疊中;②把將要執行的任務的堆疊內容移到系統的硬體堆疊中,並將硬體堆疊中的內容彈出到各個暫存器。這個過程就完成了任務的切換。

結 語本文介紹了在基於51系列微控制器的嵌入式作業系統開發中,可能遇到的幾個問題和它們的解決辦法。這些想法都是筆者在學習和實踐中得來的,相信能夠對從事相同工作的人員有一定啟發。

參考文獻

1 jean j.labrosse. 源**公開的實時嵌入式作業系統. 邵貝貝譯. 北京:中國電力出版社,2001

2 陳明計, 周立功, 等. 嵌入式實時作業系統**all rtos51原理及應用. 北京:北京航空航天大學出版社,2004

3 探矽工作室. 嵌入式系統開發聖經. 北京:中國青年出版社,2002

(收稿日期:2004-07-14)

51微控制器作業系統開發中的問題與技巧

51微控制器作業系統開發中的問題與技巧 作 者 東華理工學院 吳光文 周航慈 引 言51系列微控制器是美國intel公司在1980年推出的高效能8位微控制器,在我國的應用非常廣泛。目前,在軟體設計中需要軟體工程師從底層做起,在系統軟體設計方面需要做大量的重複性勞動。如果開發一套基於51系列微控制器的...

51微控制器開發中的小問題

1 問題 acc 和a 有什麼區別?例如 add a,acc 問題分析處理 在這裡a和acc值得都是累加器acc e0h 只不過a為暫存器定址,而acc為直接定址代表e0h,因為彙編指令裡沒有add a,a 而有add a,dir,所以就會有mov a,acc 於2008年9月28日星期日解決 暫存...

51微控制器 51系列微控制器的開發模板

這個是微控制器開發的模板,下面給些注釋和思路,開發的時候其實是經常使用的,之前也不懂,參加藍橋杯之後學習到的,如果有時間和機會,會結合前輩的這些思路,再寫個stm32和嵌入式下的開發模板,這個很有利於專案的設計開發。說明 適用於stc15f2k60s2微控制器,其他的類似,只需要改動相關的定時器設定...