欢迎来到天天文库
浏览记录
ID:5275689
大小:147.32 KB
页数:10页
时间:2017-12-07
《note:about super simple tasker》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Note:AboutSuperSimpleTaskerPage1of10Note:AboutSuperSimpleTasker註:這篇純粹是寫給自己看的「讀書心得」,圖是依據原文重畫過的:)前言從很久以前就有人試圖在單晶片上實現multi-tasking,原因無他,就是希望可以在產品上整合更多的功能,甚至站長過去用過的FxxA就是把主題放在multi-tasking,試圖從硬體來解決這個問題。站長的偶像台灣大牛先生也在不同場合強調過multi-tasking技巧的重要性,他本人也在一個冷門到爆的論壇透漏了他的不傳之秘。台灣出版的單晶片書籍多如過江之鯽,但是提到multi
2、-tasking技巧的書籍幾乎沒有!就算是原文書站長也只看過兩本有提到:PATTERNSFORTIME-TRIGGEREDEMBEDDEDSYSTEMS:Buildingreliableapplicationswiththe8051familyofmicrocontrollersbyMichaelJ.PontC&8051Hardware,ModularProgrammingandandMultitasking2ndeditionbyThomasW.Schultz以上的作法都是time-slicingbased,以切割時間的方式來達成多工,這些作法缺乏RTOS一個很重要的
3、性質-preemptive。time-slicing的作法只能用分配較多的時間給某個task來勉強逼近,但是一般傳統的RTOS例如MicroC/OS-II在事件發生時會「立即」切換到進入readystate中priority最高的task。不過,傳統RTOS移植到單晶片卻有一些困難,首先就是cost,例如MicroC/OS-II雖然是一次賣斷,但是授權上限制你只能用在單一產品上,光是這樣就要花幾十萬台幣,更別提完全買斷的價格根本就是天價,我看台灣沒幾間公司會去花這種錢吧(台灣電子公司的思維是:養了軟體工程師已經花了很多$$,怎可能再花錢買軟體?)http://godsp
4、eedlee.myweb.hinet.net/sst.htm?MywebPageId=20141113945056247962014-03-11Note:AboutSuperSimpleTaskerPage2of10好吧,我知道書上有附sourcecode,官網也很大方的提供了各種CPU移植好的版本,昧著良心直接拿來作產品也行,不過你還是會碰到麻煩,你會發現你很難把它移植到一個只有32KBFlash、8KBSRAM的單晶片上。因為這些傳統RTOS的設計是每個task擁有自己的stack,如下圖:task一多記憶體的消耗就會很快,可能還沒寫什麼東西記憶體就不夠用了,就算你
5、很小心的規劃stacksize,拿掉一些用不到的功能(例如mutex,eventflags,messagequeue...),你還是會覺得這玩意實在太肥了!而且拿掉這麼多功能那當初幹嘛花那麼多金錢時間porting?SuperSimpleTasker(SST)http://godspeedlee.myweb.hinet.net/sst.htm?MywebPageId=20141113945056247962014-03-11Note:AboutSuperSimpleTaskerPage3of10沒有更好的方法了嗎???前鎮子站長總算看到一個令人拍案叫絕的作法,2003年
6、RobertWard在EmbeddedSystemConference上發表了一篇PracticalReal-TimeTechniques,之後又跟MiroSamek博士在EmbeddedSystemDesign雜誌合作發表了一篇BuildASuperSimpleTasker(簡稱SST)。兩篇文章的內容大同小異,其中SST的內容比較完整,而且用C語言實做(之前RobertWard用C++),有完整可執行的examplecode,所以這裡以SST為主。SST在觀念上的突破就是把interrupt也視為一種preemptive的行為,ISR也視為一種比一般taskprio
7、rity更高的task:http://godspeedlee.myweb.hinet.net/sst.htm?MywebPageId=20141113945056247962014-03-11Note:AboutSuperSimpleTaskerPage4of10更有意思的是SST用nestinterrupt的方式進行taskswitch,直接在ISRstackframe上執行task,在過去傳統的RTOS中,ISR做taskswitch僅是搬移TCB(TaskControlBlock),載入programcounter、stackpoi
此文档下载收益归作者所有