通訊規約程式設計入門 從解剖乙隻麻雀開始

2021-04-09 07:58:19 字數 1157 閱讀 8856

我帶過不少新人,指導他們入門。我發現最快入門的方法就是所謂的「解剖乙隻麻雀」。

找乙個典型的polling(問答式)小規約,比如說乙個直流屏規約,有規約,有源**。先讀懂規約本身。然後參照規約分析源**。

源**的分析應該先從資料結構著手。從變數的命名、注釋了解這些變數的大概含義。習慣良好的程式應該有清楚的注釋及簡潔的說明。對於新手不可能要求百分之百了解這些變數的含義,能了解百分之五六十就相當不錯了。即使是對這個程式設計師習慣比較熟悉的高手至多也只能了解百分之**十。對於不理解的變數只能在程式中觀察其用法及功能。

大致了解了資料結構後就可以分析程式了。

程式的分析要先巨集觀後微觀。

所謂的巨集觀就是要了解程式的結構,流程,呼叫關係。

對於乙個規約程式,其基本功能大致包括:初始化,報文組裝及傳送,報文接收,報文解析及資料入庫。其流程如下:

微觀就是對每乙個功能模組進行分析。如:

報文組裝先是判斷傳送什麼報文。按功能可分為:召喚遙測、召喚遙信、校時等等;按機制可分為:迴圈查詢報文、定時查詢報文、插入報文等等。決定傳送什麼報文後就是按照規約規定的幀格式對這個報文的組裝。組裝完成就可以傳送。

報文的傳送一般是在中斷程式裡完成的,一般規約程式裡只要呼叫乙個填寫傳送緩衝區的函式就行了。

報文的接收說起來相對比較複雜。

從串列埠收到乙個乙個二進位制位元組按順序填入乙個環形接收緩衝區,這部分功能應該是在接收中斷裡完成的。在對其進行報文解析分析之前它是沒有意義的,我稱其為資料流。而規約程式的功能就是要從這個資料流中拾取出完整的規約報文並將其填入處理緩衝區。注意:這兒提到了兩個緩衝區:接收緩衝區和處理緩衝區。乙個好的程式應該將這兩個緩衝區分開。既要高效率,又不能丟幀,這其中有很多技巧,很多細節要注意。拾取的過程包括:尋找同步頭;計算幀長;複製進處理緩衝區;校驗幀的完整性等等。這些過程在此就不細講了,回頭有空再向朋友們介紹。另外說一句:對於所有不同的規約,這部分功能基本上是一樣的,無非就是同步頭不同,幀長位置不同,校驗方式不同等。我為此專門做了乙個通用模組,通過組態,可適應目前大部分的規約報文。這樣在編制不同規約程式的時候可以省去不少工作量。

收到乙個完整的規約報文之後就可以對其進行解析。按照報文型別呼叫不同的處理函式,如遙測、遙信等處理函式。這些函式的功能就是從接收的報文中提取感興趣的資料,該處理的處理,該入庫的入庫。

謹以此文送給新入行的朋友。

disa小凡

2005-6-23 南京 

通訊規約程式設計入門

首先照例是一段廢話 從進公司到現在,經歷著,也成長著 從一開始寫25160驅動 現在想來,這實際上是加強版面試性質的任務 到後來的規約程式設計,再到現在的核心程式公升級開發,這些無不讓我感到興奮!每當回首這些時光,我都會感到莫名的喜悅和驕傲。雖說是25160引我入行的,但是,歸約程式設計對於我來說,...

程式設計從入門到拋棄

第一節程式設計課你按照老師所說的,一行行列印出 hello world 時,你的眼亮起來了,覺得程式設計 so easy 你不禁感慨道,你好哇,程式設計師。你好哇,世界,我來了。你學習基本語法,方法,框架,資料庫,資料結構,開始做第乙個完整的專案 使用者登入管理系統。你滿有成就感的向老師介紹,你是如...

Python程式設計從入門到實踐 基礎入門

python程式設計從入門到實踐 基礎入門 1 python中的變數 2 python首字母大寫使用title 方法,全部大寫upper 方法,全部小寫lower 方法 3 python中字串拼接使用 號 4 python中刪除字串的空格 刪除末尾空格的rstrip 刪除開頭空格的lstrip 刪除...