一種具備優先級調度的多協議轉換方法
【技術領域】
[0001]本發明涉及一種通信技術領域,尤其是一種具有優先級調度的多協議轉換方法。
【背景技術】
[0002]現階段,數據傳輸可以采用的通信協議有多種,在一個嵌入式系統中使用多種通信協議傳輸數據的情況下,為了能夠使數據在系統內實時傳輸,需要進行各種類型的協議轉換。
[0003]因為嵌入式系統中各種數據到來的時間具有不確定性,導致各種類型的協議轉換要求進行的時間也具有不確定性。同時,由于不同數據的重要性不同,導致不同類型的協議轉換的優先級不同,所以需要一種簡單易行的方法,能夠及時檢測到和指示出要求進行的協議轉換,并且根據不同協議轉換類型的優先級進行調度,保證優先級高的協議轉換總能及時進行,避免重要數據的傳輸延遲。
【發明內容】
[0004]本發明目的在于提供一種簡單合理、適用于嵌入式系統的具備優先級調度的多協議轉換方法。
[0005]為實現上述目的,采用本發明方法如下:
[0006]所述轉換方法運行在嵌入式系統中,該嵌入式系統由硬件和軟件組成,硬件由嵌入式微處理器、存儲器、通用設備接口、電源組成,通用設備接口有串行通信接口、以太網接口、通用串行總線接口、I2C接口、SPI接口和其他接口,不同接口使用不同的通信協議傳輸數據;軟件運行在嵌入式微處理器中,對整個系統進行控制;
[0007]嵌入式系統初始化,在系統初始化階段定義一個仲裁字節和一個仲裁字節更新定時器為系統協議轉換使用,所述的仲裁字節占用一個字節的內存空間,其中該字節每一位均代表一種協議轉換類型,字節的每一位從高到低代表的協議轉換類型優先級依次降低,最高位代表優先級最高的協議轉換類型;其中,仲裁字節的某一位為1,代表有該位對應的協議轉換需要進行或者正在進行;仲裁字節的某一位為0,代表沒有該位對應的協議轉換需要進行;
[0008]所述仲裁字節更新定時器為嵌入式微處理器中的一個內部定時器,通過設定該定時器的寄存器,該定時器能夠以需要的時間間隔循環定時;
[0009]系統初始化完成后,利用仲裁字節更新定時器對所有接口進行定時監聽,確定是否有協議轉換需要進行或正在進行,根據監聽結果對仲裁字節的各位信息進行更新;然后系統根據仲裁字節信息對不同優先級的協議轉換進行調度;某一個協議轉換完成后,系統對該協議對應的仲裁字節的位進行清零操作,執行完清零操作后,系統重新從仲裁字節的最高位開始按高低位檢測各位信息。
[0010]系統檢測仲裁字節某一位是否為I的方法為:首先系統生成一個字節,定義為檢測字節,所述的檢測字節由8位二進制數組成,該檢測字節與仲裁字節本次檢測位的對應位置為1,其他位置為O ;通過檢測字節與仲裁字節進行與運算,如果運算結果為1,表示仲裁字節該位為1,仲裁字節該位所代表的協議轉換要求進行或者正在進行;如果運算結果為O,表示仲裁字節該位為O,仲裁字節該位所代表的協議轉換沒有要求進行;系統從仲裁字節的最高位開始,按照從高位到低位的順序,使用檢測字節與仲裁字節的與運算的運算結果檢測各位信息。
[0011]系統在執行仲裁字節中某一位對應的協議轉換后,系統對該協議對應的仲裁字節的位進行清零操作,清零操作的方法為:仲裁字節與該位對應的檢測字節進行異或運算,并將運算結果賦值給仲裁字節,仲裁字節中本次檢測的位置0,其他位依然為清零操作之前的值。
[0012]在系統執行非最高優先級的協議轉換執行之前,系統需通過判斷一個確認字節與仲裁字節的與運算的運算結果是否為0,確認是否有更高優先級的協議轉換要求進行。
[0013]為防止系統在執行該位對應的協議轉換之前有更高優先級的協議轉換要求進行,需要對仲裁字節進行確認操作,系統對仲裁字節費最高位進行確認操作的方法為:首先系統生成一個字節,定義該字節為確認字節,該確認字節,與仲裁字節本次檢測位的對應位為0,該位之前各高位為1,該位之后各低位為0,然后確認字節與仲裁字節進行與運算,如果運算結果不為0,表示此刻有更高優先級的協議轉換要求進行,系統重新從仲裁字節的最高位進行檢測;如果運算結果為0,表示此刻該位對應的協議轉換可以執行。
[0014]與現有技術相比,本發明具有如下優點:設計簡單、處理精確、應用廣泛,能夠使多個任務和協議在系統中按照優先級別進行處理和執行,提高協議轉換效率和準確率。
【附圖說明】
[0015]圖1是本發明實施例1的系統框圖。
[0016]圖2是本發明實施例1的協議轉換方法流程圖。
【具體實施方式】
[0017]下面結合附圖對本發明做進一步說明:
[0018]本發明采用如下方法:
[0019]所述轉換方法運行在嵌入式系統中,該嵌入式系統由硬件和軟件組成,硬件由嵌入式微處理器、存儲器、通用設備接口、電源組成,通用設備接口包括串行通信接口、以太網接口、通用串行總線接口、I2C接口、SPI接口及其他接口,不同接口使用不同的通信協議傳輸數據;軟件運行在嵌入式微處理器中,對整個系統進行控制;
[0020]嵌入式系統初始化,在系統初始化階段定義一個仲裁字節和一個仲裁字節更新定時器為系統協議轉換使用,所述的仲裁字節占用一個字節的內存空間,其中該字節每一位均代表一種協議轉換類型,字節的每一位從高到低代表的協議轉換類型優先級依次降低,最高位代表優先級最高的協議轉換類型;其中,仲裁字節的某一位為1,代表有該位對應的協議轉換需要進行或者正在進行;仲裁字節的某一位為0,代表沒有該位對應的協議轉換需要進行;
[0021]所述仲裁字節更新定時器為嵌入式微處理器中的一個內部定時器,通過設定該定時器的寄存器,該定時器能夠以需要的時間間隔循環定時;
[0022]系統初始化完成后,利用仲裁字節更新定時器對所有接口進行定時監聽,確定是否有協議轉換需要進行或正在進行,根據監聽結果對仲裁字節的各位信息進行更新;然后系統根據仲裁字節信息對不同優先級的協議轉換進行調度;某一個協議轉換完成后,系統對該協議對應的仲裁字節的位進行清零操作,執行完清零操作后,系統重新從仲裁字節的最高位開始按高低位檢測各位信息。
[0023]下面是詳細敘述系統如何對仲裁字節進行檢測和執行調度的:
[0024](I)系統檢測仲裁字節的最高位
[0025]系統檢測仲裁字節某一位是否為I的方法為,首先系統生成一個字節,命名為檢測字節,該檢測字節,與仲裁字節本次檢測位的對應位置1,其他位置0,例如要檢測仲裁字節的最高位,檢測字節為10000000,十六進制表示0x80,然后檢測字節與仲裁字節進行與運算(運算符為“&”),如果運算結果為1,表示仲裁字節該位為1,如果運算結果為0,表示仲裁字節該位為O。
[0026]系統使用檢測字節0x80與仲裁字節進行與運算,如果仲裁字節最高位為1,系統執行最高位對應類型的協議轉換。
[0027]轉換完成后,系統對仲裁字節的最高位進行清零操作,系統對仲裁字節的某一位進行清零操作的方法為,仲裁字節與該位對應的檢測字節進行異或運算(運算符為“?”),并將運算結果賦值給仲裁字節,這樣仲裁字節中本次檢測的位置0,其他位依然為清零操作之前的值。這里對仲裁字節的最高位進行清零操作就是仲裁字節與0x80進行異或運算,并將運算結果賦值給仲裁字節。
[0028]執行完清零操作后,系統重新從仲裁字節的最高位開始檢測。
[0029](2)如果仲裁字節的最高位為0,系統檢測仲裁字節的次高位
[0030]系統使用檢測字節0x40與仲裁字節進行與運算,如果仲裁字節的次高位為1,為防止系統在執行該位對應的協議轉換之前有更高優先級的協議轉換要求進行,需要對仲裁字節進行確認操作,系統對仲裁字節某一位(除最高位)進行確認操作的方法為,首先系統生成一個字節,命名該字節為確認字節,該確認字節,與仲裁字節本次檢測位的對應位為0,該位之前各高位為1,該位之后各低位為0,例如要檢測仲裁字節的次高位,確認字節為10000000,十六進制表示0x80,然后確認字節與仲裁字節進行與運算,如果運算結果不為0,表示此刻有更高優先級的協議轉換要求進行,系統重新從仲裁字節的最高位進行檢測,保證了具有高優先級的協議轉換優先進行,如果運算結果為0,表示此刻該位對應的協議轉換可以執行。
[0031]如果仲裁字節的次高位為I,系統使用確認字節0x80與仲裁字節進行與操作,如果運算結果不為0,系統重新從仲裁字節最高位開始檢測,如果運算結果為0,系統執行次高位對應的協議轉換,轉換結束后,對仲裁字節的次高位進行清零操作。
[0032]執行完清零操作后,系統重新從仲裁字節的最高位開始檢測。
[0033](3)如果仲裁字節的次高位為0,系統按照次高位的操作方法檢測仲裁字節下面各位是否為1,直到遇到某一位為1,系統進行確認操作,該位的確認字節與仲裁字節進行與運算,如果運算結果不為0,系統重新從仲裁字節的最高位進行檢測,如果運算結果為0,系統執行該位對應的協議轉換,轉換結束后,系統對仲裁字節的該位進行清零操作。
[0034]執行完清零操作后,系統重新從仲裁字節的最高位開始檢測。
[0035](4)如果系統檢測到,仲裁字節中代表某種類型協議轉換的位全部為0,系統返回仲裁字節最高位重新開始進行檢測。
[0036]實施例1:
[0037]嵌入式系統中有多種通用設備接口,不同的接口使用不同的通信協議傳輸數據,本實施例中系統僅包含4種接口,分別為接口 A、接口 B、接口 C、接口 D,分別使用協議A、協議B、協議