C4M-OS的各部元件,多數都採用工作方塊架構撰寫。課程的目標,也是希望學生的程式,可以包裝成一個個,功能架構分明的工作方塊。這種類型的程式架構優點是可以像實體的IC一樣重覆使用。但是這種程式架構,與傳統流程圖式的程式架構不太一樣。反而比較像是堆積木。完整的程式,依序包括了:廣域變數區段,主程式設定段,主程式輪詢段,副程式段。
• XXX.cfg設定檔:依據實際需求編修EXTHW.cfg
• YYY.C程式檔中:
◦ 於廣域變數區段
▪ 引入前置檔:引入基本輸出入前置碼檔C4MBiosATM128.h,,硬體設定前置碼檔HWSetM128.h, 硬體中斷分享工作前置碼檔HWIntShareExec.h
▪ 修改前面單元的鍵盤讀取工作方塊:包括結構體形態KeyBoadReaderStr_t,佈局巨集定義KEYBOARDREADER_LAY(),以及函式KeyBoadReader_step()宣告
▪ 重用前面單元的鍵盤讀取後之各個工作方塊。包括結構體形態,佈局巨集定義,以及函式宣告
◦ 在主程式main()設定段
(外部中斷硬體佈局設定及中斷分享)
▪ 外部中斷硬體設定佈局:呼叫Extn_HW_LAY()佈局。定義出外部中斷硬體設定結構體ExtnHWSet_str
▪ 外部中斷硬體設定:以ExtnHWSet_str為傳參呼叫HardWare_set()完成外部中斷硬體設定。
▪ 外部中斷硬體中斷分享:呼叫EXTHWINT_LAY()佈局。定義出外部中斷硬體中斷分享結構體ExtnInt_str
(即時緯線(i=0~4)旗標群輸出工作方塊佈局)
▪ 定義並初始化緯線輸出值來源陣列:定義uint8_t 5元素陣列WeftData[5],並提供初始分別為0x01,0x02,0x04,0x08,0xFF,對應4條緯線單獨驅動,以及所有緯線全數驅動。
▪ 即時緯線(i =0~4)旗標群輸出工作佈局:呼叫RT_FLAG_IO_LAY()完成即時輸出緯線控制旗標佈局,定義出即時輸出緯線控制旗標5個結構體分為為 WeftFlag0_str, WeftFlag1_str, WeftFlag2_str, WeftFlag3_str, WeftFlag4_str。其輸出資料源分別為WeftData[0],WeftData[1],WeftData[2], WeftData[3],WeftData[4]
(即時經線(j=0~3)讀回工作方塊佈局)
▪ 定義經線輸入值存放陣列:定義4元素陣列uint8_t WarpData[4]並初始為{0},提供4條經線讀回暫存位置。
▪ 即時經線(j =0~3)讀回旗標群工作佈局:呼叫RT_FLAG_IO_LAY()完成讀回經線旗標群工作佈局,定義出即時輸出緯線控制旗標5個結構體分為為 WarpFlag0_str, WarpFlag1_str, WarpFlag2_str, WarpFlag3_str。其資料暫存空間分別為WarpData[0],WarpData[1],WarpData[2], WarpData[3]。
(依序交义登錄即時緯線(i)輸出工作及經線(i)讀回工作方塊)
▪ 即時掃瞄及讀取工作方塊登錄:依WeftFlag0_str, WarpFlag0_str, WeftFlag1_str, WarpFlag1_str WeftFlag2_str, WarpFlag2_str WeftFlag3_str, WarpFlag3_str, WeftFlag4_str順序。將WeftFlagn_str配合RealTimeFlagPut_step()的旗標輸出,與WarpFlagn_str配合RealTimeFlagGet_step()的旗標輸入,分別登入進外部中斷硬體中斷分享結構體ExtnInt_str。
(鍵盤讀取輪詢工作佈局及串接)
▪ 鍵盤讀取工作佈局:使用者依實際需求定義出自訂名稱之鍵盤掃瞄後處理工作方塊結構體,KeyBoadReader_str。呼叫KEYBOARDER_LAY()巨集完成佈局。
▪ 鍵盤讀取工作串接:將鍵盤讀取工作 串接在WeftFlag4_str送出緯線全LOW工作之後:
• 工作執行次數計數值指標串接:接到緯線最後控制WeftFlag4_str之後。
KeyBoadReader_str.ExCountIn_p=WeftFlag4_str.TriCount_p。
• 輸入經線資料指標串接:接到四個經線讀回之後。
KeyBoadReader_str.WarpDataIn_p[n]=WarpFlagn_str.Data_p;(n=0,1,2,3)
(其它輪詢工作佈局及串接)
• 複製重用:先前單元之鍵盤讀取工作後續工作方塊佈局,及串接。
(啟始中斷驅動之工作串)
▪ 以WeftFlag4_str住址為參數呼叫RealTimeFlagPut_step()將緯線全設為LOW。
▪ 致能總中斷禁致能:呼叫sei()致能總中斷。
◦ 於主程式main()的輪詢區段
▪ 呼叫所有的非軟即時步級執行函式。
◦ 使用者副定義副函式區段
▪ 修改前面單元的鍵盤讀取工作方塊:修改步級執行函式KeyBoadReader_step()定義
▪ 重用前面單元的鍵盤讀取後之各個工作方塊:步級執行函式定義複製先前單元。