單片機實時任務與耗時任務并行執行的實現方法和系統的制作方法
【專利摘要】本發明涉及一種單片機實時任務與耗時任務并行執行的實現方法和系統,包括步驟:將所有實時任務打包成一個實時任務調用函數,在該實時任務調用函數的實現里把所有實時任務依次調用一次;將耗時任務劃分為若干個執行步驟,對應于每個執行步驟至少植入一次該實時任務調用函數的調用。本發明具有以下技術效果:既不影響程序流程的可讀性,又方便地實現了在單線程模式下實現并行運算的技巧,且完整地保留了調用棧,適合調試時定位故障源。
【專利說明】[0001] 單片機實時任務與耗時任務并行執行的實現方法和系統
【技術領域】
[0002] 本發明涉及單片機的程序運行管理,特別是與單片機的實時任務與耗時任務的協 調有關。
【背景技術】
[0003] 實時任務是指不可阻塞、不可拖延和響應及時的任務,通常包括通信協議報文處 理、定時任務及喂狗等,這類任務處理函數非常快速,運行時間短。耗時任務是指有內在處 理邏輯、有特定執行順序、且需要耗費較長時間才能執行完成的任務,這類任務屬于應用層 次,不要求實時性,但必須保證執行的順序。
[0004] 現有單片機環境中通常使用兩種方式實現實時任務和耗時任務的并行執行。一 種使用RT0S (實時操作系統),由實時操作系統提供中斷級別的分時多任務,程序中只需調 用RT庫提供的API創建新任務,即可實現實時任務和耗時任務的并行運行。另一種不使用 RT0S,參見圖2,其是把耗時任務原始執行邏輯分解成若干個耗時較小的執行步驟1、2···Ν ; 參見圖1,其在入口 main ()函數中使用無限循環,實時任務的處理大致包括定時任務、發送 報文、接收并解釋報文和喂狗等;參見圖3,每次循環只調用耗時任務的一個步驟,下次循 環調用下一個步驟,以此在不影響系統實時響應的基礎上模擬出耗時任務也在并行運行的 效果。
[0005] 在有條件的單片機上,例如有足夠大的RAM (隨機存取存儲器)和存儲空間的情況 下,第一選擇都是使用RT0S,畢竟由庫提供的多任務環境極大地減少了編寫多任務程序的 難度和復雜度,尤其是調試代碼時指令執行邏輯清晰,調用棧跟蹤方便,很容易根據調用上 下文查錯和糾錯,但由于涉及到任務調度、TCB (任務控制塊)數據分配及數據同步處理等因 素,需要占用額外的內存和處理器資源,也相應增加了同步處理的復雜性。
[0006] 而且由于成本的因素,存在大量如下的單片機類型:一種是存儲空間非常有限,t匕 如:只有幾 K字節甚至幾百字節的RAM,無法滿足RT0S所需要的基本存儲需求;另一種是 單片機廠商未提供對應的RT0S。對于這樣的單片機類型,只能選擇任務分解方式提供模擬 多任務效果,這種方式必須打亂程序邏輯結構,且需要增加額外的變量空間來記住任務的 當前執行步驟,在下一個循環周期能從記憶的執行步驟中恢復狀態以便繼續執行剩余的步 驟;此方式會明顯增加程序邏輯的復雜度,狀態轉換極易出錯,且由于完全丟失了調用上下 文關系,導致出錯時難以確定故障來源,增加了糾錯和維護的成本。
[0007]
【發明內容】
[0008] 本發明要解決的技術問題在于避免現有技術中無法使用RT0S的單片機軟件的情 況下,而所存在的實時和耗時任務執行需要占用額外的內存和處理器資源、同步處理復雜, 或者程序邏輯復雜、狀態轉換容易出錯、糾錯和維護成本高等不足之處,而提出一種單片機 實時任務與耗時任務并行執行的實現方法。
[0009] 針對上述要解決的技術問題,本發明的技術方案如下: 一種單片機實時任務與耗時任務并行執行的實現方法,包括以下步驟:將所有實時任 務打包成一個實時任務調用函數,在該實時任務調用函數的實現里把所有實時任務依次調 用一次;將耗時任務劃分為若干個執行步驟,對應于每個執行步驟至少植入一次該實時任 務調用函數的調用。
[0010] 進一步地,計算所述耗時任務中各執行步驟所需要的時間,并根據各執行步驟所 需要的時間長短而決定將實時任務調用函數植入所述耗時任務的具體執行步驟中。
[0011] 進一步地,所述耗時任務中各執行步驟所需要時間的計算通過時間統計代碼實 現。
[0012] 進一步地,所述耗時任務按照函數流程編寫功能代碼。
[0013] 進一步地,植入所述實時任務調用函數時,保證相鄰兩次實時任務調用函數的調 用之間所耗費的時間足夠短,以便保證實時任務的實時性。
[0014] 進一步地,在耗時任務需要等待實時任務的執行結果時,反復調用所述實時任務 調用函數,以至所期待結果出現或者超時才繼續執行后續流程。
[0015] 進一步地,所述實時任務調用函數包括執行一下步驟:執行定時任務、執行發送報 文、執行接收并解析報文以及執行喂狗。
[0016] 進一步地,所述單片機不支持實時操作系統。
[0017] 一種單片機實時任務與耗時任務并行執行的實現系統,包括耗時任務模塊、實時 任務模塊和中斷任務模塊,所述耗時任務模塊位于系統最上層,所述實時任務模塊位于系 統中間層,中斷任務位于系統最底層;所述實時任務模塊的所有實時任務打包成一個實時 任務調用函數,在該實時任務調用函數的實現中把所有實時任務依次調用一次;所述耗時 任務模塊將耗時任務劃分為若干個執行步驟,對應于耗時任務執行步驟至少植入一次該實 時任務調用函數的調用。
[0018] 進一步地,所述實時任務模塊包括依次連接的用于更新定時任務計數器的定時任 務子模塊、用于發送報文的發送報文子模塊、用于接收并解析報文的接收并解析報文子模 塊和用于喂狗的喂狗子模塊。
[0019] 本發明的單片機實時任務與耗時任務并行執行的實現方法,與現有技術相比,具 有以下技術效果: 通過植入式調用實時任務調用函數AsyncWorkO,既不影響程序流程的可讀性,又方便 地實現了在單線程模式下實現并行運算的技巧,且完整地保留了調用棧,適合調試時定位 故障源。任務執行邏輯清晰,避免了分解式執行導致的調用上下文丟失,無法從調用棧獲取 錯誤來源的問題。
[0020] 植入式調用方案使得軟件開發過程更清晰,即開發初期無需考慮任務是否耗時, 只需按照正常流程完成任務功能代碼。僅需在后期測試期間收集任務執行時間,并在合適 的地方加入AsyncWorkO調用來保證實時任務的實時性即可。采用本技術方案設計,可以 使單片機軟件開發人員從耗時任務拆分的繁瑣勞動中解脫出來,專注于任務的邏輯流程設 計,而不需要花費很大精力處理各個步驟的協調和狀態記憶。
[0021] 不需要RT0S的任務調度和數據同步控制,不占用額外內存空間,沒有任務調度導 致的性能損失,完全可以運行在RAM很小的設備上。
[0022]
【專利附圖】
【附圖說明】
[0023] 圖1是現有的任務分解式的main ()函數流程圖。
[0024] 圖2是現有的耗時任務原始流程圖。
[0025] 圖3是現有的耗時任務分解流程圖。
[0026] 圖4是本發明實施例的單片機實時任務與耗時任務并行執行的實現系統方框示 意圖。
[0027] 圖5是本發明實施例的實時任務調用函數AsyncWorkO函數所封裝的實時任務流 程圖。
[0028] 圖6是本發明實施例的耗時任務植入式調用流程圖。
[0029] 圖7是本發明實施例的簡單耗時任務流程圖。
[0030]
【具體實施方式】
[0031] 下面結合各附圖對實施例作進一步詳述: 參見圖4, 一種單片機實時任務與耗時任務并行執行的實現系統,包括耗時任務模塊、 實時任務模塊和中斷任務模塊,所述耗時任務模塊位于系統最上層,所述實時任務模塊位 于系統中間層,中斷任務模塊位于系統最底層。這樣通過把任務層次進行明確劃分,能保證 實時任務和耗時任務在單線程模式下同時并行執行,且能避免拆分耗時任務后跟實時任務 混合調度的混亂局面。
[0032] 具體地,所述實時任務模塊包括依次連接的用于更新定時任務計數器的定時任務 子模塊、用于發送報文的發送報文子模塊、用于接收并解析報文的接收并解析報文子模塊 和用于喂狗的喂狗子模塊。所述中斷任務模塊的中斷任務作為硬件級的實時服務,包括定 時器中斷、通信中斷以及其它中斷,本身已經具備并行執行的基礎,屬于現有技術,此處不 再贅述。
[0033] -種單片機實時任務與耗時任務并行執行的實現方法,基于單片機不支持實時操 作系統,包括以下步驟:將所有實時任務打包成一個實時任務調用函數AsyncWorkO,在該 實時任務調用函數的實現里把所有實時任務依次調用一次,例如:從發送緩沖區提取并發 送報文;從接收緩沖區提取并解析報文;調用定時任務以及喂狗。將耗時任務劃分為若干 個執行步驟,對應于每個執行步驟至少植入一次該實時任務調用函數的調用。在耗時任務 內部隨時調用此實時任務調用函數AsyncWorkO來處理實時任務,這也是本發明方法實現 的基礎。如圖6所示,把整個耗時任務劃分為若干個執行步驟1、2…N,對應于每個執行步 驟1、2…N相應地至少植入一次實時任務調用函數AsyncWorkO的調用。上述實現方法當 然也可以適用于單片機支持實時操作系統的情形。
[0034] 一些實施例中,耗時任務按照普通的函數流程編寫代碼,而不需要編寫任務拆分 代碼。在全部功能代碼完成后,可通過經驗或額外的時間統計代碼等方式計算所述耗時任 務中各執行步驟所需要的時間,并根據各執行步驟所需要的時間長短而決定將實時任務調 用函數植入所述耗時任務的具體執行步驟中,即根據各執行步驟所需要的時間長短確定在 耗時任務的哪些具體執行步驟中加入實時任務調用函數AsyncWorkO的調用。本發明的植 入式調用在運行效果上與現有技術中的分解式調用相同,但它保留了耗時任務的程序控制 邏輯,對于軟件開發者來說,植入式調用更符合思維習慣。
[0035] 一些實施例中,植入所述實時任務調用函數時,考慮以下兩個條件:一是保證相鄰 兩次實時任務調用函數的調用之間所耗費的時間足夠短,以便保證實時任務的實時性。例 如:必須在指定的時間內喂狗以避免看門狗復位單片機。二是在耗時任務的等待期間,有時 耗時任務需要等待實時任務的執行結果,例如耗時任務發送一個報文后必須等待實時任務 一個響應報文時,可以反復調用所述實時任務調用函數,以至所期待結果出現或者超時才 繼續執行后續流程。
[0036] 一些實施例中,參見圖5,本發明的實時任務調用函數AsyncWorkO包括執行以下 步驟: 5101、 執行定時任務; 5102、 執行發送報文; 5103、 執行接收并解析報文; 5104、 執行喂狗。
[0037] 圖7是本發明一實施例的簡單耗時任務流程圖。這里假設一種簡單耗時任務的場 景:在設備中向外部設備發送一個查詢指令并等待外部設備返回結果,如果外部設備就緒, 則再發送一個控制指令并等待結果;如果外部設備未就緒或者任何一個指令的響應超時, 則任務直接結束。使用本發明方法執行此任務的基本流程如下: 5301、 構造查詢指令報文并放入發送隊列; 5302、 構造定時任務計數器以計算超時; 5303、 調用實時任務調用函數AsyncWorkO ;完成發送報文、檢測接收報文、超時計數 器更新等,這個過程具體包括:如果發送隊列存在報文則取出報文并發送給外部設備;判 斷接收緩沖區是否存在完整報文,如果存在,則解析報文后放入接收隊列;以及更新定時任 務計數器; 5304、 檢測接收隊列是否存在響應報文,如果存在,則執行步驟S305,否則執行步驟 S314 ; 5305、 停止定時任務計數器計數; 5306、 根據報文內容,判斷外部設備是否就緒,如果未就緒,則結束任務,如果就緒,則 執行步驟S306 ; 5307、 構造控制指令報文并放入發送隊列; 5308、 構造定時任務計數器以計算超時 5309、 調用實時任務調用函數AsyncWorkO ;完成發送報文、檢測接收報文、超時計數 器更新等,這個過程具體包括:如果發送隊列存在報文則取出報文并發送給外部設備;判 斷接收緩沖區是否存在完整報文,如果存在,則解析報文后放入接收隊列;以及更新定時任 務計數器; 5310、 檢測接收隊列是否存在響應報文,如果存在,則執行步驟S311,如果不存在,則執 行步驟S313 ; 5311、 停止定時任務計數器計數; 5312、 根據報文內容,檢測控制指令的執行結果,結束任務。
[0038] S313、獲取計數器判斷是否超時,如果超時,則結束任務;未超時則重復執行步驟 S309 ; S314、獲取計數器判斷是否超時,如果超時,則結束任務;未超時則重復執行步驟 S303。
[0039] 可以看出,本發明方法的開發過程非常符合程序員的思維。通過一種"隨時隨地植 入"的機制,在不依賴RT0S的基礎上實現實時任務和耗時任務的并行執行,解決了 RT0S方 式需要占用額外內存空間、需要任務切換時間、數據同步控制的問題,也解決了非RT0S的 任務分解方式需要拆分耗時任務、丟失調用上下文、需要額外的全局或靜態狀態變量、不利 于調試查錯的問題,最終達到符合代碼邏輯思維習慣、簡化狀態控制導致的邏輯復雜性、便 于調試查錯的效果,從而可以增加編程的效率和可靠性。
[0040] 以上,僅為本發明之較佳實施例,意在進一步說明本發明,而非對其進行限定。凡 根據上述之文字和附圖所公開內容進行的簡單替換,都在本專利的權利保護范圍之列。
【權利要求】
1. 一種單片機實時任務與耗時任務并行執行的實現方法,其特征在于,包括以下步驟: 將所有實時任務打包成一個實時任務調用函數,在該實時任務調用函數的實現里把所有實 時任務依次調用一次;將耗時任務劃分為若干個執行步驟,對應于每個執行步驟至少植入 一次該實時任務調用函數的調用。
2. 根據權利要求1所述的實現方法,其特征在于:計算所述耗時任務中各執行步驟所 需要的時間,并根據各執行步驟所需要的時間長短而決定將實時任務調用函數植入所述耗 時任務的具體執行步驟中。
3. 根據權利要求2所述的實現方法,其特征在于:所述耗時任務中各執行步驟所需要 時間的計算通過時間統計代碼實現。
4. 根據權利要求1所述的實現方法,其特征在于:所述耗時任務按照函數流程編寫功 能代碼。
5. 根據權利要求1所述的實現方法,其特征在于:植入所述實時任務調用函數時,保 證相鄰兩次實時任務調用函數的調用之間所耗費的時間足夠短,以便保證實時任務的實時 性。
6. 根據權利要求1所述的實現方法,其特征在于:在耗時任務需要等待實時任務的執 行結果時,反復調用所述實時任務調用函數,以至所期待結果出現或者超時才繼續執行后 續流程。
7. 根據權利要求1所述的實現方法,其特征在于:所述實時任務調用函數包括執行以 下步驟:執行定時任務、執行發送報文、執行接收并解析報文以及執行喂狗。
8. 根據權利要求1至7中任一項所述的實現方法,其特征在于:所述單片機不支持實 時操作系統。
9. 一種單片機實時任務與耗時任務并行執行的實現系統,包括耗時任務模塊、實時任 務模塊和中斷任務模塊,其特征在于:所述耗時任務模塊位于系統最上層,所述實時任務模 塊位于系統中間層,中斷任務位于系統最底層; 所述實時任務模塊的所有實時任務打包成一個實時任務調用函數,在該實時任務調用 函數的實現中把所有實時任務依次調用一次; 所述耗時任務模塊將耗時任務劃分為若干個執行步驟,對應于耗時任務執行步驟至少 植入一次該實時任務調用函數的調用。
10. 根據權利要求9所述的實現系統,其特征在于:所述實時任務模塊包括依次連接的 用于更新定時任務計數器的定時任務子模塊、用于發送報文的發送報文子模塊、用于接收 并解析報文的接收并解析報文子模塊和用于喂狗的喂狗子模塊。
【文檔編號】G06F9/38GK104102491SQ201410362872
【公開日】2014年10月15日 申請日期:2014年7月28日 優先權日:2014年7月28日
【發明者】胡柏華 申請人:航天科工深圳(集團)有限公司