[發(fā)明專利]一種基于消息隊列的單片機(jī)操作系統(tǒng)實現(xiàn)方法有效
| 申請?zhí)枺?/td> | 201510071580.8 | 申請日: | 2015-02-11 |
| 公開(公告)號: | CN104598208A | 公開(公告)日: | 2015-05-06 |
| 發(fā)明(設(shè)計)人: | 李俊畫;馬劍;朱永;莫平勇 | 申請(專利權(quán))人: | 四川天邑康和通信股份有限公司 |
| 主分類號: | G06F9/38 | 分類號: | G06F9/38 |
| 代理公司: | 成都金英專利代理事務(wù)所(普通合伙) 51218 | 代理人: | 袁英 |
| 地址: | 610000 四川省*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 消息 隊列 單片機(jī) 操作系統(tǒng) 實現(xiàn) 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種基于消息隊列的單片機(jī)操作系統(tǒng)實現(xiàn)方法。
背景技術(shù)
眾所周知,單片機(jī)的程序存儲空間和數(shù)據(jù)存儲空間都相對匱乏,標(biāo)準(zhǔn)型號的51系列單片機(jī)程序?qū)ぶ房臻g和數(shù)據(jù)尋址空間都只有64KB,時鐘頻率大多低于100MHz。如果將現(xiàn)有流行的嵌入式操作系統(tǒng)移植到單片機(jī)中,動輒就要占用數(shù)十幾KB的ROM空間,實時性的優(yōu)勢也沒有了。因此有必要針對單片機(jī)的軟件設(shè)計一種占用空間小,運行效率高的操作系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于消息隊列的單片機(jī)操作系統(tǒng)實現(xiàn)方法,實現(xiàn)軟件的多任務(wù)運行,使軟件結(jié)構(gòu)簡潔、層次分明,運行更高效,占用空間更小。
本發(fā)明的目的是通過以下技術(shù)方案來實現(xiàn)的:一種基于消息隊列的單片機(jī)操作系統(tǒng)實現(xiàn)方法,它采用C語言編寫程序代碼,使用Keil的編譯器進(jìn)行編譯生成二進(jìn)制執(zhí)行文件,它包括以下步驟:
S1:定義消息結(jié)構(gòu)類型,包括消息字、參數(shù)A和參數(shù)B;
S2:定義消息隊列,先根據(jù)芯片的內(nèi)存資源和任務(wù)處理情況定義消息隊列長度,再定義一個數(shù)據(jù)類型為消息結(jié)構(gòu)的數(shù)組作為消息隊列,用于存儲消息及參數(shù);
S3:?定義消息隊列的存取指針,初始化時將存取指針都設(shè)為零,用于指示消息在存入和讀取時在消息隊列中的位置,當(dāng)存入和讀取指針相同時,表示沒有消息;
S4:發(fā)送消息到消息隊列,包括以下子步驟:
S41:按照消息存入指針?biāo)甘镜奈恢脤⑾⒋嫒胂㈥犃校嫒胫羔樤隽浚?/p>
S42:判斷存入指針是否達(dá)到最大值,若是則將存入指針設(shè)為零;
S43:判斷消息隊列是否存滿,若是則意味著未處理的消息將被覆蓋,從而發(fā)生系統(tǒng)級錯誤,則進(jìn)行系統(tǒng)復(fù)位來避免系統(tǒng)運行錯誤;
S5:從消息隊列中讀取消息和參數(shù),包括以下子步驟:
S51:芯片看門狗清零;
S52:判斷是否有待處理消息,若有待處理消息則進(jìn)行步驟S53,若沒有待處理消息則返回步驟S51;
S53:按照消息讀取指針?biāo)甘镜奈恢脧南?shù)組中讀取消息,讀取指針增量;
S54:判斷讀取指針是否為最大值,若是則將讀取指針設(shè)為零,若不是則結(jié)束操作;
S6:主函數(shù)循環(huán)讀取消息,當(dāng)讀取到消息及參數(shù)后,根據(jù)消息值調(diào)用相應(yīng)的任務(wù)處理函數(shù),待任務(wù)處理結(jié)束后再進(jìn)行下一次循環(huán)。
步驟S1、S2和S3,定義了消息隊列的數(shù)據(jù)結(jié)構(gòu),包括消息結(jié)構(gòu)數(shù)據(jù)類型、消息隊列數(shù)組和消息隊列存取指針;消息隊列的數(shù)組組元數(shù)量根據(jù)單片機(jī)硬件資源、時鐘頻率和處理的任務(wù)量進(jìn)行設(shè)定。
步驟S4,使用函數(shù)實現(xiàn)消息的存入,以保證最先存入的消息能被最先讀取。由中斷服務(wù)程序和任務(wù)處理程序調(diào)用該函數(shù),用于通知相應(yīng)的任務(wù)處理函數(shù)執(zhí)行相應(yīng)的任務(wù)程序。
步驟S5,使用函數(shù)實現(xiàn)消息的讀取,以保證最先存入的消息能被最先讀取。由主函數(shù)調(diào)用該函數(shù),用于從消息隊列中獲取消息。
步驟S6,由C語言編寫的主函數(shù)無限循環(huán)讀取消息隊列的消息,然后根據(jù)讀取的消息值調(diào)用相應(yīng)的任務(wù)處理函數(shù),來執(zhí)行任務(wù)處理程序,任務(wù)處理函數(shù)返回后進(jìn)行下一次循環(huán)來讀取消息。
本發(fā)明的有益效果是:在本單片機(jī)軟件系統(tǒng)中,先存入的消息先被執(zhí)行,實現(xiàn)了搶占式多任務(wù)操作系統(tǒng)的功能;使用本發(fā)明設(shè)計單片機(jī)軟件任務(wù),各任務(wù)函數(shù)僅在接收到相應(yīng)的消息后執(zhí)行相應(yīng)的程序,執(zhí)行完成后返回,其他時間該任務(wù)處于暫停狀態(tài),此時可以執(zhí)行其他任務(wù)。在設(shè)計單片機(jī)軟件系統(tǒng)時,可以設(shè)計多個任務(wù)處理函數(shù)來完成不同任務(wù),也可將復(fù)雜的任務(wù)分為多個層級。實現(xiàn)了單片機(jī)軟件的多任務(wù)運行,使編寫的代碼結(jié)構(gòu)簡潔、層次分明和容易維護(hù),軟件運行效率顯著提高。
附圖說明
圖1為本發(fā)明存入消息流程圖;
圖2為本發(fā)明讀取消息流程圖;
圖3為本發(fā)明的主函數(shù)流程圖。
具體實施方式
下面結(jié)合附圖進(jìn)一步詳細(xì)描述本發(fā)明的技術(shù)方案,但本發(fā)明的保護(hù)范圍不局限于以下所述。
一種基于消息隊列的單片機(jī)操作系統(tǒng)實現(xiàn)方法,它采用C語言編寫程序代碼,使用Keil公司的編譯器進(jìn)行編譯生成二進(jìn)制執(zhí)行文件,其核心程序代碼包括以下內(nèi)容及步驟:
S1:定義消息結(jié)構(gòu)類型,包括消息字、參數(shù)A和參數(shù)B;
S2:定義消息隊列,先根據(jù)芯片的內(nèi)存資源和任務(wù)處理情況定義消息隊列長度,再定義一個數(shù)據(jù)類型為消息結(jié)構(gòu)的數(shù)組作為消息隊列,用于存儲消息及參數(shù);
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于四川天邑康和通信股份有限公司;,未經(jīng)四川天邑康和通信股份有限公司;許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201510071580.8/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





