作者:鳳舞天 對(duì)很多只具有MCU51,Cortex基礎(chǔ)的網(wǎng)友來(lái)說(shuō),學(xué)習(xí)RTOS是一件痛苦的事情,以u(píng)COS為例,博主以前看過(guò)2遍,雖然有些概念,但因?yàn)樯婕皟?nèi)容較多,理解不深,加上沒(méi)做項(xiàng)目,過(guò)段時(shí)間就忘記了。這次為了做msPLC系統(tǒng):一種網(wǎng)絡(luò)化PLC,需要解決網(wǎng)絡(luò)通訊,特意引入RTOS實(shí)現(xiàn)任務(wù)分離,所以把目前資料最為廣泛的uCOS與博主自己設(shè)計(jì)的“實(shí)用單片機(jī)系統(tǒng)MS5”結(jié)合起來(lái),uCOS具備RTOS的多任務(wù),并且資料豐富,MS5博主自己開(kāi)發(fā)的,最為熟悉,并且在單任務(wù)下代碼簡(jiǎn)潔,功能齊全,尤其是對(duì)時(shí)間分割管理、消息機(jī)制、界面設(shè)計(jì)上,都有一定的模式,所以可以理解為基于MS5下,把單任務(wù)變成多任務(wù)處理,比較完美的結(jié)合。 uCOS可以認(rèn)為是比較標(biāo)準(zhǔn)的一種RTOS,就RTOS來(lái)說(shuō),它不算復(fù)雜,但對(duì)于絕大部分只有單任務(wù)設(shè)計(jì)經(jīng)驗(yàn)的嵌入式人員,已經(jīng)足夠復(fù)雜,主要有幾點(diǎn)原因: 1、剛接觸RTOS思想,對(duì)很多名詞,功能、變量都不熟悉,這些一多就混淆了 2、文件結(jié)構(gòu)、頭文件定義復(fù)雜,條件編譯、函數(shù)指針、結(jié)構(gòu)體過(guò)多 3、外圍函數(shù)過(guò)多,任務(wù)核心不突出 基于以上三點(diǎn),本人以普通嵌入式人員的思維,做以下幾點(diǎn)精簡(jiǎn): 1、去掉一般項(xiàng)目不常用的函數(shù),比如信號(hào)量事件(SEM)、開(kāi)關(guān)量事件(MUX)、標(biāo)記事件(FLAG)、內(nèi)存管理(MEM),只保留消息郵箱(MBox)和消息隊(duì)列(MQ)。 2、精簡(jiǎn)頭文件,按常規(guī)寫(xiě)法修改,去掉不必要的條件編譯 3、去掉統(tǒng)計(jì)任務(wù)(StatTask)和空閑任務(wù)(IdleTask),系統(tǒng)內(nèi)部精簡(jiǎn)掉相關(guān)的變量,加入MS5,作為它的IdleTask,設(shè)置為最低優(yōu)先級(jí)。 4、加入MBox和MQ例子,讓其可以在Keil的Debug的UART1窗口下直接調(diào)試模擬。 初學(xué)者基于精簡(jiǎn)版本的uCOS,對(duì)照書(shū)本,學(xué)起來(lái)應(yīng)該更容易,起碼不會(huì)有強(qiáng)烈的排斥心里,在理解了uCOS內(nèi)核后,再看完整的源碼,就非常容易。 msOS今后將基于MS5為基礎(chǔ),引入其他免費(fèi)公開(kāi)的RTOS的一些優(yōu)點(diǎn),比如FreeRTOS和RT-Thread,形成自己的風(fēng)格,避免版權(quán),主要超工業(yè)自動(dòng)化方向進(jìn)化,專注于工業(yè)自動(dòng)化領(lǐng)域。 附件中uCOS.rar為精簡(jiǎn)后的uCOSII msOS為基于MS5結(jié)合精簡(jiǎn)后的uCOS的msOS ![]() ![]() |