這個往大了說是壹個比較復雜的設計方案。
實際上C語言是沒有多線程的概念的,但是我們可以通過Task來實現多任務。
簡單的說,可以采取以下方案:
定義壹個主Task,將其置為常駐Task,用以進行Task調度和Task的啟動/終了和交互的管理。
定義壹個Task優先級列表,用優先級來作為Task調度和管理的基礎。
定義壹個***享域,和相應的事件分發/廣播/傳遞的管理機制,由主Task來實現各Task間的事件傳遞。
定義3個List,實現Active,Ready,Dead的Task的管理和調度。
定義各普通Task,包含Task基本信息:Task的棧指針,Task情報,Task存儲空間大小,Task的優先級,Task的事件列表(定義可以接收/發送的事件,以及可以排隊的事件的個數),以及如果需要的話可以定義Task的從屬(父子)關系。
另外還有幾個註意點:
1. 通過C的臨界域(critical section)結合PV操作來實現某些Task的原子性處理要求。
2. 通過Signal來實現中斷和再開
3. 如果需要處理中斷和再開的話,壹定要註意現場保護
4. 同優先級的Task可以通過時間片輪循的方式進行多任務實現
暫時就想到這麽多,有不明白的通過消息進壹步交流吧:)