通訊規約程式設計入門

2021-05-12 12:36:26 字數 1436 閱讀 4802

首先照例是一段廢話:

從進公司到現在,經歷著,也成長著……從一開始寫25160驅動(現在想來,這實際上是加強版面試性質的任務),到後來的規約程式設計,再到現在的核心程式公升級開發,這些無不讓我感到興奮!每當回首這些時光,我都會感到莫名的喜悅和驕傲。雖說是25160引我入行的,但是,歸約程式設計對於我來說,一定是令我感覺最親切,也最有感情的。今天在整理本本的時候,偶然發現了乙個札記,我突然覺得它是不應該僅僅待在我的本本裡的,於是發上來,與後人共勉。

/***********************************我就是傳說中霸氣的分割線**************************************/

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

我發現最快入門的方法就是所謂的「解剖乙隻麻雀」。

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

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

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

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

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

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

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

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

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

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

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

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

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

我帶過不少新人,指導他們入門。我發現最快入門的方法就是所謂的 解剖乙隻麻雀 找乙個典型的polling 問答式 小規約,比如說乙個直流屏規約,有規約,有源 先讀懂規約本身。然後參照規約分析源 源 的分析應該先從資料結構著手。從變數的命名 注釋了解這些變數的大概含義。習慣良好的程式應該有清楚的注釋及簡...

程式設計規約之其他

強制 在使用正規表示式時,利用好其預編譯功能,可以有效加快正則匹配速度。說明 不要在方法體內定義 pattern pattern pattern.compile 規則 強制 velocity 呼叫 pojo 類的屬性時,建議直接使用屬性名取值即可,模板引擎會自動按規範呼叫 pojo 的 get 如果...

程式設計規約之常量定義

二 常量定義 1.強制 不允許任何魔法值 即未經預先定義的常量 直接出現在 中。反例 string key id taobao tradeid cache.put key,value 2.強制 在 long 或者 long 賦值時,數值後使用大寫的 l,不能是小寫的 l,小寫容易跟數字 1 混淆,造...