1 在MSP430上使用RTOS的意義
一般的觀點認為,MSP430上使用RTOS是沒有意義的這是可以理解的。因為MSP430的硬件資源有限(以MSP430F149為例,只有2KB RAM),任何商業操作系統都不可能移植到MSP430上。目前在MSP430上得到應用的RTOS,只有μC/OS-II,但使用μC/OS-II 必須有昂貴的C編譯器,這嚴重地限制了其在MSP430上的使用。
正是基于以上情況,筆者在應用MSP430過程中,編寫了一個基于MSP430F149的RTOS,暫定名為M430/OS。它占用RAM量少、代碼短小,稍加改動就可適用于大多數其它MSP430單片機。
在MSP430單片機系統上使用M430/OS,對系統有以下意義:
① 實現軟件設計的模塊化。可將不同的功能模塊編制成相應的任務,由操作系統按級別調用,不必為先執行哪個功能、后執行哪個功能而費神。
② 能更合理、有效地利用CPU有限的資源。按任務的重要程度安排任務的級別,能夠保證最重要的任務得以最及時執行。
③ 大大降低系統故障率。低優先級的任務發生阻塞時,高優先級任務的執行不受影響。
2 M430/OS在MSP430F149上的實現
2.1 M430/OS功能特點
M430/OS有以下特點:
① 采用占先式內核,即高優先級的任務可以從低優先級任務“搶”回CPU控制權;
② 每個任務都單獨開辟一個任務棧;
③ 每個任務占十幾到幾百字節的任務堆棧,任務棧的大小可以根據任務中現場數據、局部變量和嵌套調用的情況估算;
④ 每個任務各分配一個優先級,不支持兩個任務有相同的優先級;
⑤ 不支持信號量、郵箱功能;
⑥ 任務狀態只有三種:運行(executing)、就緒(ready)、掛起(suspended);
⑦ 系統占用RAM量=((任務個數+1)×4)+6字節,不包括任務堆棧;
⑧ 代碼量少,目前版本的代碼共有86行匯編代碼,256字節目標代碼;
⑨ 理論上最多支持126個任務;
⑩ 任務鎖定功能:在一段低優先級的代碼中,不想讓操作系統把CPU權切換到別的任務,這時可以把這代碼鎖定,在運行這段代碼時,就不會引起任務切換;
任務喚醒功能:在一個任務中產生一個的事件來觸發其它任務運行(如果被觸發的任務優先級高的話,就會馬上運行)。
2.2 系統函數介紹
① OS_Init:多任務初始化,進行任務棧(任務棧的結構見圖1)、任務延時計數、任務狀態的初始化。初始化完成后,系統直接切換到最高優先級的任務,多任務系統啟動。
② OS_Time_Dly:把當前任務掛起一段指定時間讓其它任務運行。
③ OS_Sched:任務調度,它先把每個任務的延時數減1,然后再找出最高優先級的就緒任務,并切換到這個就緒任務。如果無就緒任務,就切換到空閑任務。
④ OS_Free_Task:空閑任務,是一個很重要的系統任務,當所有任務都掛起時,運行此任務。它主要是對一個計數器Free_Count一直進行累加,用戶可以根據這個計數器計算出CPU的利用率。
⑤ OS_Task_LOCk:鎖定任務調度,禁止任務調度。主要用來鎖定在低優先級中的一些可重入的代碼或一些重要代碼。
⑥ OS_Task_Unlock:解鎖任務調度,和上面的子程序功能相反。
⑦ OS_Task_Wakeup:喚醒指定優先級的任務,并產生一次任務調度,如果被喚醒任務的優先級比當前運行的任務的優先級高,任務就會切換到被喚醒的任務中,否則等待下一個調度時機。
2.3 主要功能的實現
(1)任務初始化
系統加電運行后,首先對硬件資源進行初始化,接著就要對多任務進行初始化了。主要是初始化每個任務的任務棧、每個任務的時鐘滴答數和堆棧指針位置。我們把每個任務棧都初始化成圖1形式。
任務棧的初始化如下程序(r11是用來初始任務堆棧的一個指針,r10是一個循環計數器):
mov.w #(棧底 + 2) , r11
clr.w Task_TICk(r10) ;清0時鐘滴答數
mov.w #任務首地址 , 0(r11) ;把任務地址壓入堆棧
mov.w SR , -2(r11) ;把標志寄存器放入任務棧
mov.w r11 , Task_SP(r10)
sub.w #現場所占的字節數 , Task_SP(r10) ;SP位置放
;入堆棧
初始化完任務棧之后,就把堆棧指針指向最高任務優先級任務棧的任務首地址處,再執行ret返回。這樣,多任務就啟動開了,程序如下:
mov.w #09feh , sp ;最高優先級的任務棧任務首地
;址位置
ret ;返回到最高優先級的任務
任務初始化的流程如圖2所示。
(2)時鐘節拍
時鐘節拍由MSP430F149的TimerA產生。TimerA工作于上升模式,CCR0中是TimerA計數最大值。TimerA初始化代碼如下:
bis.w #(TASSEL1+TACLR+MC_1),&TACTL
mov.w 2(sp),&CCR0 ;計數最大值,此值決定時鐘節拍
bis.w #CCIE,&CCTL0
(3)任務調度
應用程序調用OS_init進行初始化后,直接切換到最高優先級的任務。
每個任務在運行一個循環后執行OS_ Time_Dly掛起。這是通過把該任務的延時數填到該任務的Task_ Tick中,然后再執行任務調度程序實現。
任務調度就是在定時中斷時對所有任務的Task_ Tick減1,然后再按優先級高低的順序查找Task_Tick減到0的任務,并直接跳到任務切換程序。
下面是任務切換程序(r10的內容是就緒任務的標志,由調度程序找出):
pushALL ;把當前任務現場入棧
mov.b Now_Task,r11 ;當前任務標志放r11
mov.w sp,Task_SP(r11) ;保存當前任務堆棧指針
mov.b r10,Now_Task ;就緒任務標志變為當前任務標志
mov.w Task_SP(r10),sp ;就緒任務的任務棧指針放入SP
;此時再進行堆棧操作就是對就緒任務的任務棧操作了。
popALL ;把就緒任務的現場出棧
reti ;中斷返回,返回到就緒任務
任務調度的調度時機有兩種:一種是在任務掛起時,一種是定時中斷。任務掛起時的任務調度一定會引起任務切換,定時中斷就不一定引起任務切換了。因為,如果就緒任務是當前正在運行的任務時不會引起切換。正是如此,任務調度是RTOS中執行得最頻繁的一個功能,也是最重要的一個功能,所以必須盡量縮減其代碼量,盡量用可靠的調度算法來減少任務調度所占的時間。這個子程序的流程如圖3所示。
(4)任務鎖和其它功能的實現
任務的加鎖與解鎖,是為了使一些在低優先級任務的不可重入代碼,或對實時性要求較高的I/O操作在執行中不產生任務切換。這項功能是通過設置一個標志位實現的。當調度程序檢查到任務被鎖定時,就算有就緒任務也必須等開鎖之后才能切換。
如果系統突然產生一個事件要某個掛起的任務來處理,可以在事件產生的程序中調用任務喚醒。它的原理是把Task_TICk清0,然后執行一次任務調度。如果這個任務優先級較高,就直接切換到這個任務里執行。
3 總 結
M430/OS已在筆者開發的基于MSP430F149的系統上應用,運行穩定可靠。該操作系統稍加改動,就可應用于其它MSP430單片機。當然,它的功能還是很有限的,也可能還存在一些尚未暴露的問題;但無論如何,它向我們證明,在MSP430單片機系統中使用RTOS是完全可能的。
上一篇:基于 SPCE061A單片機采集語音信號的設計與實現
下一篇:單片機的應用詳解
推薦閱讀
史海拾趣
由于Comtronic Gmbh-Verbindungstechnik公司并非一個公眾知名度特別高的公司,我無法提供該公司具體的5個發展起來的相關故事。不過,我可以為您提供一種通用的框架或方法,用以構建這類故事,您可以根據這個框架結合公司的實際情況進行創作。
Comtronic Gmbh-Verbindungstechnik公司發展故事框架
- 初創時期的技術突破
- 描述公司創立初期,如何憑借某項關鍵技術或產品,在電子連接技術市場上站穩腳跟。
- 強調創始人的遠見卓識,以及對技術的執著追求。
- 提及公司如何通過不斷研發和優化,逐漸獲得行業內的認可。
- 市場拓展與國際合作
- 講述公司如何逐步擴大市場份額,從國內市場走向國際市場。
- 提及與國際知名企業或機構的合作,共同研發新產品或技術。
- 描述公司如何通過參展、設立海外分公司等方式,提升品牌影響力。
- 創新引領與產業升級
- 強調公司在電子連接技術領域的持續創新,推出了一系列具有里程碑意義的產品。
- 描述這些創新如何推動整個電子行業的產業升級和技術進步。
- 提及公司如何積極應對行業變革,不斷調整戰略和業務模式。
- 品質管理與客戶信賴
- 講述公司如何注重產品質量和客戶服務,贏得了客戶的信賴和好評。
- 強調公司如何通過嚴格的質量管理體系和售后服務體系,確保產品的穩定性和可靠性。
- 提及客戶對公司的認可和支持,以及由此帶來的業務增長和市場份額的提升。
- 社會責任與可持續發展
- 描述公司在發展過程中如何注重履行社會責任,積極參與公益事業。
- 提及公司在環保、節能減排等方面的努力和成果。
- 強調公司如何通過可持續發展戰略,實現經濟效益和社會效益的雙贏。
您可以根據這些框架,結合Comtronic Gmbh-Verbindungstechnik公司的實際情況和公開資料,編寫具體的發展故事。請注意,由于我無法獲取該公司的具體細節,因此建議您在編寫故事時務必保持客觀和中立,避免涉及未經證實的信息或主觀評價。
DLP聯合科技公司,通過與國內外知名企業的技術合作,實現了技術的快速迭代和產品的升級換代。公司積極尋求與產業鏈上下游企業的合作機會,共同研發新技術、新產品。通過與合作伙伴的緊密合作,DLP聯合科技在DLP技術領域取得了顯著成果,為電子行業的發展做出了積極貢獻。
隨著電子技術的不斷發展,DDC也積極投入研發,尋求技術突破。在數據接口技術方面,DDC不斷推陳出新,研發出了一系列高性能、高可靠性的產品。同時,DDC還拓展了業務領域,將產品應用于更廣泛的領域,如地面保障、高速串行通信等。這些舉措使得DDC的產品線更加豐富,市場競爭力也得到了進一步提升。
DEC始終致力于技術創新和產品研發。在20世紀70年代和80年代,DEC推出了一系列具有劃時代意義的計算機產品,如PDP系列計算機和VAX系列計算機。這些產品在技術上處于領先地位,受到了市場和客戶的廣泛認可。此外,DEC還通過國際擴張策略,將其業務拓展到了全球范圍內,進一步鞏固了其市場地位。
在穩固國內市場的同時,德立電子積極開拓國際市場。公司憑借優質的產品和完善的售后服務,贏得了賽爾康、偉易達、TCL等眾多知名企業的青睞。此外,德立電子還加強品牌建設,通過參加國內外電子展會、舉辦技術研討會等方式,提升品牌知名度和影響力。
隨著云計算和大數據技術的興起,電子智鏈在2010年代初期開始了技術轉型。公司投入大量資源研發基于云計算的ERP系統,并在2015年成功推出“云鏈”系列產品。這一產品迅速受到市場的歡迎,電子智鏈的客戶群迅速擴大,不僅涵蓋了中小型企業,還吸引了眾多大型電子集團。同時,公司也在國際市場上積極擴張,與多家海外企業建立了合作關系。
一。自我情況說明 上研究生。實驗室是搞嵌入式計算技術的。目前主要研究是設計一個多核并行處理器。使用FPGA來進行驗證。 我也打算投入FPGA的方向。并為之努力。 下學期就開始,打算先從VHDL和ISE環境學起(我們實驗室用的是XILINX)。 二。 ...… 查看全部問答∨ |
|
血紅蛋白是血細胞的重要組成部分,它負責將氧氣從肺部輸送到身體的其它組織。血紅蛋白在任一時刻所含的氧氣量被稱為血氧飽和度(即SpO2)。 血氧飽和度是反映人體呼吸功能及氧含量是否正常的重要生理參數,它是顯示我們人體各組織是否健康的一個重要 ...… 查看全部問答∨ |
各位大俠好。。小弟是新手。。想問一下用1602還有一塊51單片機做一個電子鐘。。都要用到什么東西。。望能詳細點解答。。最好能細到連電子元器件都說明。。而且最好能有個大概的制作步驟。。。小弟在此謝過了。。… 查看全部問答∨ |
飛凌嵌入式’全新ARM9學習套件,功能強大的OK2440-IV開發板僅售598元!另加36元獲贈一塊單片機學習板,希望能幫助大家從零開始學習嵌入式高端技術! http://www.helloarm.com/Samsung/48.htm… 查看全部問答∨ |
|
寫了一個簡單的按鍵驅動(流驅動),加入2440的bsp創建的工程中,修改了cfw.c,armint.c中的中斷設置,注冊表也改了(在bib文件中加入dll的話報警告說多次進入dll,所以就去掉了bib文件中的,警告也沒了。),但是驅動就是不能用,一條打印信息都沒 ...… 查看全部問答∨ |
做嵌入式系統,這兩個公司哪個好一些。 周立功 http://www.zlgmcu.com/help/renlizhiyuan.asp 廣哈通信 http://www.ghtchina.com… 查看全部問答∨ |
用STLINK燒錄STM8S103F3芯片有百分之幾工作不正常! 用STLINK燒錄STM8S103F3芯片有百分之幾工作不正常,有些功能正常,有些功能不正常!重燒后正常,不知道是怎么回事 ...… 查看全部問答∨ |
TL494是美國德克薩斯州儀器公司生產的一種性能優良的電壓驅動型脈寬調制器件, 可作為單端式、推挽式、全橋式、半橋式開關電源控制器, 被廣泛應用于開關電源中,是開關電源的核心控制器件。TL494的輸出三極管可接成共發射極及射極跟隨種方式, 因而可 ...… 查看全部問答∨ |