亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 59237 | 回復(fù): 1
打印 上一主題 下一主題

手把手教你寫單片機RTOS 第一章&&第二章 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-23 03:25 |只看該作者 |倒序瀏覽

第一章 開發(fā)緣由

一直以來想親手寫出一個小型實時操作系統(tǒng)來,起初編程功力不夠,且對操作系統(tǒng)原理了解甚少,所以遲遲沒能實現(xiàn)。此后筆者抽出大量時間來研究邵貝貝那本uCOSII,多次試驗代碼,逐漸從中屢出一條可行的自行設(shè)計RTOS路線,于是整理下來,讀者感興趣的話可以跟著本書實驗一步一步練下去,這樣您在不知不覺中已經(jīng)學(xué)會編寫RTOS原理并最終寫出屬于你的RTOS來,這樣才能真正體現(xiàn)出本文的價值。

此文將圍繞大家最熟悉的51單片機平臺展開整個RTOS內(nèi)核的開發(fā)工作,意在讓讀者徹底學(xué)會如何寫RTOS,降低RTOS在讀者心中的難度。另外,該書所有代碼均在Cool 51單片機開發(fā)板上調(diào)試通過,目前該RTOS支持51、AVR、STM8S三種平臺,并最終更名為RaySRTOS(光芒操作系統(tǒng))。代碼可以在http://im.blog.chinaunix.net上獲取。若有問題可聯(lián)系作者(光芒電子),或者加入QQ139218853詳細討論。

第二章 RTOS基礎(chǔ)知識

2.1什么是RTOS?

打個比方,若是單片機不跑RTOS,用主循環(huán)+中斷處理程序完成功能(前后臺系統(tǒng)),就好比老板一人開了一家公司,老板一人負責“研發(fā)”、“銷售”、“售后”三種工作(任務(wù))。比如老板正在搞研發(fā),突然來客戶了,老板就要暫停研發(fā)轉(zhuǎn)而去搞“銷售”,銷售完后再回來繼續(xù)研發(fā)(把銷售看成一種中斷)。那比如客戶買的產(chǎn)品出了問題,那老板得暫停研發(fā)去做售后(售后是另一種中斷)。問題就出來了,老板一個人始終無法同時顧及研發(fā)、銷售、售后三個工作,導(dǎo)致公司運營不佳。這里讀者們想到了,可以多顧幾名員工啊?說對了,單片機跑RTOS就是相當于開公司多了很多員工。RTOS就是一個可以將單片機擴展成多個“相對獨立小任務(wù)”的平臺,老板可以顧3名員工,讓3個員工分別負責“研發(fā)”、“銷售”、“售后”三個工作,老板的工作就是負責將3名員工各自的任務(wù)分配好即可。

各個“相對獨立小任務(wù)”宏觀上來看是同時執(zhí)行的,這是RTOS一個顯著特點,可能有人要問“只有一個CPU,怎么能做到同時執(zhí)行多個代碼呢?”巧妙之處就在這里,RTOS在微觀上是在各個“相對獨立小任務(wù)”之間快速切換的,切換速度快到宏觀上感覺小任務(wù)是同時運行的。這個“切換速度”,就是RTOS里邊所說的系統(tǒng)節(jié)拍。

怎么理解“相對獨立小任務(wù)”中“獨立”二字呢?獨立的意思就是各個小任務(wù)之間的執(zhí)行過程是相對獨立的,互不干擾。3名員工的工作是各不相同的,各執(zhí)其責的。但為何要“相對獨立”呢?比方搞研發(fā)的員工沒有開發(fā)出產(chǎn)品,那么銷售就沒東西可賣,售后也相應(yīng)沒事兒做了,要想整體運行正確,則各個任務(wù)必須協(xié)調(diào)好,互相匯報進度。這就是RTOS中的任務(wù)間通信概念。

這三名員工的工作其實是有輕重緩急之分的。前期搞研發(fā)的優(yōu)先級最高,搞出產(chǎn)品后銷售就是主角了,銷售完后呢?售后就要做的更好。要想經(jīng)營好整個公司,老板就要決定哪個員工何時該抓點緊,哪個員工工作可以放慢些,總也有個任務(wù)分配策略。這個分配策略,就是RTOS中的調(diào)度算法。

相信讀者對RTOS有個簡單的概念了吧。RTOS從功能上是將單片機單一的執(zhí)行結(jié)構(gòu)擴展成了多個“相對獨立小任務(wù)”。從開發(fā)角度上由原來的“主循環(huán)+中斷處理程序”思想擴展成了“編寫N個執(zhí)行任務(wù)”思想。為我們開發(fā)復(fù)雜多任務(wù)程序提供了便利。


2.2 RTOS的優(yōu)點與缺點

2.2.1 RTOS優(yōu)點

1提高開發(fā)效率

RTOS使單片機開發(fā)多任務(wù)程序變得簡單直觀,用戶只關(guān)心任務(wù)分配即可,比如我們要做一個電子時鐘的程序,完全可以把“數(shù)碼管刷新”、“秒計時”、“按鍵檢測“、”調(diào)節(jié)時間程序”分為4個任務(wù),這樣程序會編寫容易而且維護方便。

2運行效率高

我們平時編程用到延時是很常見的,在RTOS里面延時OS_Delay()和普通程序的Delay()是完全不一樣的。普通的程序延時僅僅是CPU執(zhí)行循環(huán)代碼,是不是感覺做了很多無用功?在RTOS里邊,延時其實是主動將CPU讓給其他任務(wù)代碼,等到延時時間一到,再將CPU“拽”回來。

3移植方便

各種平臺之間程序大體風格是不變的,得益于RTOS的標準框架,使得程序整體代碼風格趨于一致化,這將使程序移植變得簡單可靠。

2.2.2 RTOS缺點

1需要占用額外的資源

單片機使用RTOS,由于要在各個任務(wù)代碼之間進行快速切換,以達到“同時”運行的目的,執(zhí)行調(diào)度函數(shù)最增加CPU負荷。

2使單片機中斷響應(yīng)變差

一般微型RTOS在切換任務(wù)時候需要關(guān)閉系統(tǒng)總中斷,否則會錯誤的操作堆棧,這段時間是不響應(yīng)任何中斷的。從而使單片機在中斷響應(yīng)上要慢一些。

 

2.3單片機跑RTOS有必要嗎?

這估計是愛好者們爭論最多的了,既然看到了RTOS的利與弊,我們應(yīng)當正確對待RTOS在單片機開發(fā)中的位置。

因為RTOS需要單片機提供額外的RAM ROM運行,并且會增加一些CPU負荷,如果一個單片機在項目上有很大余量,那么可以選擇使用RTOS來做。如果單片機本身資源就很緊張,那就得不償失了,不僅RTOS跑不起來,連基本功能代碼都放不下了。

本文要在51上寫一個小型RTOS,主要為了學(xué)習RTOS原理用,以后讀者從51編程轉(zhuǎn)ARM學(xué)習會容易很多。筆者曾將該RTOS移植在AVRSTM8上,占用200B ram 1KB rom,運行良好。

2.4 RTOS的一些基本概念

2.4.1 任務(wù)(TASK)

任務(wù)(Task)是RTOS中最重要的操作對象,每個任務(wù)在RTOS調(diào)用下由CPU分時運行。

2.4.2 調(diào)度(Sched)

調(diào)度是RTOS的核心,調(diào)度就是RTOS使CPU在各個任務(wù)之間進行切換,達到宏觀上同時執(zhí)行的效果,調(diào)度也稱為“上下文切換”。

2.4.3 搶占和協(xié)作

21ic上有一個經(jīng)典例子比喻,“你(小工)在用廁所,經(jīng)理在外面排第一,老板在外面排第二。如果是前后臺,不管是誰,都必須按排隊的次序使用廁所;如果是協(xié)作式,那么可以等你用完廁所,老板就要比經(jīng)理先進入;如果是占先式,只要有更高級的人在外面等,那么廁所里無論是誰,都要第一時間讓出來,讓最高級別的人先用!

2.4.4 系統(tǒng)節(jié)拍

RTOS調(diào)度時候是一直在各個TASK之間切換的,切換的快慢就是系統(tǒng)節(jié)拍,如果系統(tǒng)節(jié)拍是100Hz,那么每秒TASK會被RTOS切換100次(不算主動切換次數(shù))。

2.4.5 中斷級調(diào)度和任務(wù)級調(diào)度

中斷級調(diào)度就是由系統(tǒng)節(jié)拍引起的被動的調(diào)度,在當前執(zhí)行任務(wù)即使還未釋放CPU時也會發(fā)生的。任務(wù)級調(diào)度是任務(wù)主動去釋放CPU而發(fā)生的調(diào)度。

2.4.6 任務(wù)堆棧

每個任務(wù)(TASK)執(zhí)行都有自己的一個任務(wù)堆棧,存放著自己的入口,各個寄存器值、中間執(zhí)行結(jié)果等。各個任務(wù)的任務(wù)環(huán)境都是獨立私有的,互不干擾。比如TASK1有自己的堆棧Task1Stack[20]TASK2有自己的堆棧Task2Stack[20],兩個堆棧內(nèi)容是不一樣的。

RTOS基本術(shù)語還有很多,就不一一羅列了,筆者盡量用簡練的語言來讓讀者學(xué)會單片機RTOS的概念,爭取也寫出自己的RTOS。

論壇徽章:
0
2 [報告]
發(fā)表于 2018-06-28 14:27 |只看該作者
nkjjkgkljhl
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP