存儲器診斷方法及裝置與流程
2023-04-25 16:53:07 2

本申請涉及安全控制器技術領域,具體而言,涉及一種存儲器診斷方法及裝置。
背景技術:
在安全控制器中,要求對隨機存取存儲器(ram)進行診斷,以到達相應的安全等級。其中marchc算法常常被用來對ram進行診斷,並具有診斷覆蓋率高和易於實現的特點。但是marchc算法只有在對整個ram一次性的診斷時才能具備診斷覆蓋率高的特點。安全控制器中的ram往往比較大,如果在控制器運行過程中一次性對整個ram進行診斷,就需要比較長的時間,而安全控制器要在特定的響應時間內執行安全控制功能,則無法在一個運行周期內對整個ram一次性的進行診斷。為了解決該技術問題,如圖1所示,現在普遍採用分塊技術(將ram分為block_0、block_1……block_n-1等n個區塊),在每個運行周期內對其中的一個區塊進行診斷,經過多個運行周期完成對整個ram的診斷。
但是,在對ram分塊並按照區塊診斷後,由於無法檢測出相鄰的區塊彼此之間的耦合影響,因此診斷覆蓋率不高。
技術實現要素:
本申請實施例提供了一種存儲器診斷方法及裝置,以至少解決現有的存儲器診斷方案所存在的診斷覆蓋率不高的問題。
根據本發明的一個方面,提供一種存儲器診斷方法,包括:將所述存儲器的空間劃分為多個區塊;針對所述多個區塊,選取至少一個邊界區,所述邊界區中的每一個分別跨越所述多個區塊中的兩個相鄰區塊;以及針對所述區塊和所述邊界區分別執行診斷操作。
根據本發明的另一個方面,提供一種存儲器診斷裝置,包括:區塊劃分模塊,用於將存儲器的空間劃分為多個區塊;邊界區選取模塊,用於針對所述多個區塊,選取至少一個邊界區,所述邊界區中的每一個分別跨越所述多個區塊中的兩個相鄰區塊;以及診斷模塊,用於針對所述區塊和所述邊界區分別執行診斷操作。
在本申請實施例中,解決了相關技術中現有的存儲器診斷方案所存在的診斷覆蓋率不高的問題。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用於解釋本申請,並不構成對本申請的不當限定。在附圖中:
圖1是現有技術中對ram分塊後的示意圖;
圖2是根據本申請實施例1的存儲器診斷方法的流程圖;
圖3是根據本申請實施例2的存儲器診斷裝置的示意圖;
圖4是根據本申請實施例3的存儲器的分塊示意圖;以及
圖5是根據本申請實施例3的存儲器診斷方法的流程圖。
具體實施方式
為了使本技術領域的人員更好地理解本申請方案,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分的實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬於本申請保護的範圍。
需要說明的是,本申請的說明書和權利要求書及上述附圖中的術語「第一」、「第二」等是用於區別類似的對象,而不必用於描述特定的順序或先後次序。應該理解這樣使用的數據在適當情況下可以互換,以便這裡描述的本申請的實施例能夠以除了在這裡圖示或描述的那些以外的順序實施。此外,術語「包括」和「具有」以及他們的任何變形,意圖在於覆蓋不排他的包含,例如,包含了一系列步驟或模塊或單元的過程、方法、系統、產品或設備不必限於清楚地列出的那些步驟或模塊或單元,而是可包括沒有清楚地列出的或對於這些過程、方法、產品或設備固有的其它步驟或模塊或單元。
實施例1
附圖2示出了根據本申請實施例1的存儲器診斷方法的流程圖。如圖2所示,該方法包括:
s202:將所述存儲器的空間劃分為多個區塊;
s204:針對所述多個區塊,選取至少一個邊界區,所述邊界區中的每一個分別跨越所述多個區塊中的兩個相鄰區塊;以及
s206:針對所述區塊和所述邊界區分別執行診斷操作。
根據本申請實施例1的技術方案,通過針對所述多個區塊,選取分別跨越所述多個區塊中的兩個相鄰區塊的至少一個邊界區,並針對該邊界區執行診斷操作,使得能夠檢測出相鄰區塊之間的耦合影響,從而能夠克服現有技術中存在的診斷覆蓋率不高的技術問題。當然,在本申請實施例1的技術方案中,對於選取邊界區的形式不加限制。既可以是針對所有的相鄰區塊的邊界選取邊界區,也可以只針對部分邊界選取邊界區。並且對所述區塊和所述邊界區執行診斷操作的方式也不作限定,既可以將各個區塊和邊界區整體地按照存儲器的地址依次執行診斷操作,也可以將各個區塊和邊界區各自依次執行診斷操作,還可以隨機確定執行診斷操作的順序。此外,也可以一次性對所有區塊和分界區執行診斷操作,或者是通過多個周期分別對所述區塊和分界區執行診斷操作。
可選地,所述選取至少一個邊界區包括針對所述多個區塊中所有的彼此相鄰的兩個區塊,選取對應的所述邊界區。從而,所述診斷方法可以覆蓋存儲器的所有空間,實現全面的診斷。當然該技術特徵並不是本申請的必要技術特徵,本申請也可以只針對部分邊界選取邊界區。
可選地,通過多個周期對所述存儲器執行診斷操作,並且其中在每一個周期中分別對一個所述區塊或一個所述邊界區執行診斷操作。從而,所述診斷方法可以通過多個周期完成對存儲器的診斷操作,進而適用於大容量的存儲器的診斷。當然本申請的技術方案不限於此,也可以一次性的對所有區塊和分界區執行診斷操作。
可選地,針對所述區塊和所述邊界區分別執行診斷操作包括:在所述多個周期中的第一周期,針對所述多個區塊中的第一區塊執行診斷操作;在所述多個周期中的第二周期,針對所述至少一個邊界區中的第一邊界區執行診斷操作,其中所述第一邊界區跨越所述第一區塊和與所述第一區塊相鄰的第二區塊;以及在所述多個周期中的第三周期,針對所述第二區塊執行診斷操作。從而,可以將各個區塊和邊界區整體地按照順序依次執行診斷操作,提高了診斷的效率。但是本申請的方法不限於此,也可以將各個區塊和邊界區各自依次執行診斷操作,還可以隨機確定執行診斷操作的順序。
可選地,還包括:在每一個周期中執行所述診斷操作之後,如果沒有診斷出存儲器故障則繼續執行其他任務,否則對所述存儲器設置故障標誌。由於安全控制器中的存儲器往往比較大,如果在控制器運行過程中對整個存儲器進行診斷,就需要比較長的時間。從而,本申請的方法可以比避免由於存儲器診斷而導致其他任務的執行被延誤,從而提高了運行的效率。
實施例2
圖3示出了根據本申請實施例3的存儲器診斷裝置300的示意圖。如圖3所示,所述存儲器診斷裝置300包括:
區塊劃分模塊301,用於將存儲器的空間劃分為多個區塊;
邊界區選取模塊302,用於針對所述多個區塊,選取至少一個邊界區,所述邊界區中的每一個分別跨越所述多個區塊中的兩個相鄰區塊;以及
診斷模塊303,用於針對所述區塊和所述邊界區分別執行診斷操作。
可選地,所述邊界區選取模塊被進一步配置為針對所述多個區塊中所有的彼此相鄰的兩個區塊,選取對應的所述邊界區。
可選地,所述診斷模塊進一步配置為通過多個周期對所述存儲器執行診斷操作,並且其中在每一個周期中分別對一個所述區塊或一個所述邊界區執行診斷操作。
可選地,所述診斷模塊進一步配置為:在所述多個周期中的第一周期,針對所述多個區塊中的第一區塊執行診斷操作;在所述多個周期中的第二周期,針對所述至少一個邊界區中的第一邊界區執行診斷操作,其中所述第一邊界區跨越所述第一區塊和與所述第一區塊相鄰的第二區塊;在所述多個周期中的第三周期,針對所述第二區塊執行診斷操作。
可選地,還包括診斷處理模塊,用於所述診斷模塊在每一個周期中執行所述診斷操作之後,如果沒有診斷出存儲器故障則繼續執行其他任務,否則對所述存儲器設置故障標誌。
實施例3
下面在實施例3中,將結合圖4至圖5,詳細說明本申請的技術方案。
圖4示出了根據實施例3的方法對存儲器400(例如,ram)進行分塊的示意圖。如圖4所示,本實施例的方法首先將存儲器400的空間劃分為n個區塊block_0至block_n-1(如實線所示)。從而使得本實例的方法可以分別針對每個區塊block_0至block_n-1執行診斷操作,從而實現對存儲器400的診斷。
但是正如在背景技術中所述的,如果無法檢測出相鄰的區塊彼此之間的耦合影響,那麼就會導致診斷覆蓋率不高的缺陷。
因此,為了解決該技術問題,本實施例在上述分塊操作的基礎上。針對相鄰的區塊的邊界分別選取跨越相鄰的兩個區塊的n-1個分界區n_block_0至n_block_n-2(如虛線所示)。為了便於說明,圖4中示出了針對各個區塊的所有相鄰區塊的邊界選取了n-1個邊界區。但是也可以根據實際的需要針對部分的相鄰區塊選取邊界區。
進一步參見圖4,所述存儲器400的空間地址範圍為從addr_0至addr_2n,從而不同區塊和分界區分別位於不同的地址範圍內。例如區塊block_0地址範圍為addr_0至addr_2,區塊block_1的地址範圍為addr_2至addr_5,而分界區n_block_0的地址範圍為addr_1至addr_3。由此可見,分界區n_block_0是跨越相鄰的區塊block_0與block_1而選取的。同樣,分界區n_bolock_1(地址範圍為addr_4至addr_6)是跨越相鄰的區域block_1與block_2而選取的;分界區n_block_n-3是跨越相鄰的區塊block_n-3和block_n-2而選取的;分界區n_block_n-2是跨越相鄰的區塊block_n-2和block_n-1而選取的。
從而,區塊block_0至block_n-1和分界區n_block_0至n_block_n-2共同構成了彼此交叉的分區結構。
圖5示出了基於圖4所示的分區結構對存儲器400進行診斷的方法的流程圖。
如圖5所示,在第一個運行周期中(步驟s502),使用marchc算法對區塊block_0(地址addr_0至addr_2)進行診斷。並確定是否發現存儲器故障(步驟s504),如果沒有發現存儲器故障(否),則繼續執行其他任務。否則,如果發現存儲器故障(是),則前進到步驟s518,設置存儲器故障標誌,採取相應措施,然後結束診斷進程。
在第二個運行周期中(步驟s506),使用marchc算法對分界區n_block_0(地址addr_1至addr_3)進行診斷。並確定是否發現存儲器故障(步驟s508),如果沒有發現存儲器故障(否),則繼續執行其他任務。否則,如果發現存儲器故障(是),則前進到步驟s518,設置存儲器故障標誌,採取相應措施,然後結束診斷進程。
在第三個運行周期中(步驟s510),使用marchc算法對區塊block_1(地址addr_2至addr_5)進行診斷。並確定是否發現存儲器故障(步驟s512),如果沒有發現存儲器故障(否),則繼續執行其他任務。否則,如果發現存儲器故障(是),則前進到步驟s518,設置存儲器故障標誌,採取相應措施,然後結束診斷進程。
依次類推,按照地址順序對各個分界區或區塊進行診斷並根據診斷結果執行相應的操作。
直到第2n+1個運行周期中(步驟s514),使用marchc算法對區塊block_n-1(地址addr_2n-2至addr_2n)進行診斷。並確定是否發現存儲器故障(步驟s516),如果沒有發現存儲器故障(否),則繼續執行其他任務然後結束進程。否則,如果發現存儲器故障(是),則前進到步驟s518,設置存儲器故障標誌,採取相應措施,然後結束診斷進程。
由此可見,通過本實施例的診斷方法流程,實現了對存儲器的分塊交叉診斷的診斷方法,從而提高了診斷的覆蓋率,改善了存儲器診斷的效果。
上述本申請實施例序號僅僅為了描述,不代表實施例的優劣。
在本申請的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的技術內容,可通過其它的方式實現。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元或模塊的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或模塊或組件可以結合或者可以集成到另一個系統,或一些特徵可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,模塊或單元的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元或模塊可以是或者也可以不是物理上分開的,作為單元或模塊顯示的部件可以是或者也可以不是物理單元或模塊,即可以位於一個地方,或者也可以分布到多個網絡單元或模塊上。可以根據實際的需要選擇其中的部分或者全部單元或模塊來實現本實施例方案的目的。
另外,在本申請各個實施例中的各功能單元或模塊可以集成在一個處理單元或模塊中,也可以是各個單元或模塊單獨物理存在,也可以兩個或兩個以上單元或模塊集成在一個單元或模塊中。上述集成的單元或模塊既可以採用硬體的形式實現,也可以採用軟體功能單元或模塊的形式實現。
所述集成的單元如果以軟體功能單元的形式實現並作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基於這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該計算機軟體產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可為個人計算機、伺服器或者網絡設備等)執行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬碟、磁碟或者光碟等各種可以存儲程序代碼的介質。
以上所述僅是本申請的優選實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本申請的保護範圍。