[0134]下面,對本發(fā)明實施例中的微控制單元MCU中資源動態(tài)分配的方法進(jìn)行介紹參照圖8,示出了本發(fā)明實施例三的一種微控制單元MCU中資源動態(tài)分配的方法的流程圖,本發(fā)明中設(shè)定分配SRAM空間以塊為單位,每個SRAM塊包含固定的SRAM大小(定義變量為SRAM_BL0CK_SIZE,比如為1024bytes),每個SRAM塊不能被閃存控制器和內(nèi)存控制器同時訪問。定義變量SRAM_SIZE為芯片中SRAM模塊總的SRAM塊數(shù)。該方法可以包括以下步驟:
[0135]步驟S401、讀OTP:上電復(fù)位后一次性將存在OTP中關(guān)于SRAM控制信息通過控制信息通路I讀到閃存控制器中的主控單元。其中包括在量產(chǎn)測試中確定有缺陷的SRAM的塊數(shù)SRAM_FAIL_SIZE和閃存容量信息OTP_FLASH_SIZE,OTP_FLASH_SIZE表示此產(chǎn)品閃存所占的SRAM最大塊數(shù),此數(shù)值要小于SRAM_SIZE與SRAM_FAIL_SIZE的差值。其中還包括每個SRAM塊是否可用信息,標(biāo)志每個SRAM塊在應(yīng)用中是否可用,在量產(chǎn)測試中,將有缺陷的SRAM塊設(shè)置成不可用,而沒有缺陷的SRAM塊設(shè)置成可用的。由于OTP為一次可編程存儲單元,因此在產(chǎn)品生產(chǎn)過程中一次性編程好以上的SRAM控制信息,在此產(chǎn)品使用過程中這些信息始終保持不變,這些OTP信息為每個產(chǎn)品的個性化需求決定的。
[0136]步驟S402、SRAM重組:SRAM重組單元通過控制信息通路4讀取每個SRAM塊是否為可用信息,重新組織每個SRAM所處的位置。每個SRAM塊都與對應(yīng)的編號寄存器,通過SRAM重組單元將每個編號寄存器重新設(shè)定。舉例如下:在默認(rèn)情況下(所有SRAM塊均是可用的),每個SRAM塊的編號寄存器分別為:0,1,2,...,n,...,SRAM_SIZE-1。其中編號為η的 SRAM 塊存儲地址范圍在 nXSRAM_BLOCK_SIZE 至(n+1) X SRAM_BL0CK_SIZE_1 之間的數(shù)據(jù)。假設(shè)量產(chǎn)測試中發(fā)現(xiàn)編號為I的SRAM塊有缺陷,將編號為I的SRAM塊設(shè)置成不可用,通過SRAM重組之后,編號O的SRAM塊不變,編號為I的SRAM塊對應(yīng)的編號寄存器設(shè)置成不可用,從編號2開始的每個SRAM塊對應(yīng)的編號寄存器均減去1,運算之后,每個SRAM塊的編號寄存器分別為:0,(不可用),1,...,n-1,...,SRAM_SIZE-2。
[0137]步驟S403、分配SRAM:上電復(fù)位后第一次分配SRAM,是將0TP_FLASH_SIZE信息通過控制信息通路3傳到閃存SRAM控制器中SRAM比較陣列,分配SRAM中閃存所占的SRAM塊數(shù)為 0TP_FLASH_S IZE (0TP_FLASH_S I ZE=SRAM_S I ZE-SRAM_FA I L_S I ZE_0TP_FLASH_S IZE )。將每個SRAM塊對應(yīng)的編號寄存器與0TP_FLASH_SIZE比較,小于0TP_FLASH_SIZE的SRAM塊分配為閃存SRAM,大于或等于0TP_FLASH_SIZE的SRAM塊分配為內(nèi)存SRAM。
[0138]步驟S404、需要復(fù)制:上電第一次需要復(fù)制閃存,否則不需要復(fù)制閃存。
[0139]步驟S405、復(fù)制閃存:上電第一次需要復(fù)制閃存,一次性將閃存芯片中程序數(shù)據(jù)等通過閃存控制單元,通過數(shù)據(jù)通路3,通過SRAM控制器,全部復(fù)制到閃存SRAM中,復(fù)制的SRAM 塊數(shù)為 0TP_FLASH_SIZE。
[0140]步驟S406、讀閃存SRAM:復(fù)制完成后,自動讀閃存SRAM中數(shù)據(jù),通過數(shù)據(jù)通路1,讀到系統(tǒng)總線。
[0141]步驟S407、執(zhí)行程序:通過讀閃存SRAM步驟,CPU得到閃存SRAM中的程序數(shù)據(jù),執(zhí)行閃存SRAM中的程序。
[0142]步驟S407、配置REG_FLASH_SIZE寄存器:在用戶的應(yīng)用程序中通過數(shù)據(jù)通路2,配置REG_FLASH_SIZE寄存器(此寄存器在配置寄存器模塊中)。REG_FLASH_SIZE為用戶程序設(shè)定的閃存所占的SRAM塊數(shù),此值不能大于0TP_FLASH_SIZE,因為0TP_FLASH_SIZE為當(dāng)前產(chǎn)品閃存的最大容量;另外此值要大于用戶程序?qū)嶋H用到的閃存容量(用戶可根據(jù)當(dāng)前程序的實際大小,獲知此數(shù)值)。配置完REG_FLASH_SIZE寄存器,跳到分配SRAM狀態(tài),通過SRAM控制器中的SRAM比較陣列,根據(jù)REG_FLASH_SIZE重新分配SRAM,閃存所占的SRAM塊數(shù)為 REG_FLASH_SIZE(REG_FLASH_SIZE=SRAM_SIZE-SRAM_FAIL_SIZE-REG_FLASH_SIZE),分配完之后,不需要復(fù)制閃存,繼續(xù)讀閃存SRAM,執(zhí)行程序。
[0143]步驟S409、讀寫內(nèi)存:在正常程序執(zhí)行過程中,主要在讀閃存SRAM,執(zhí)行程序,和讀寫內(nèi)存三個狀態(tài)之間跳轉(zhuǎn),CPU執(zhí)行程序過程中的一些中間數(shù)據(jù)或運行結(jié)果等,需要存入內(nèi)存,或從內(nèi)存中讀取,則通過系統(tǒng)總線,通過內(nèi)存控制器,讀寫內(nèi)存SRAM完成。此時可操作的內(nèi)存SRAM塊數(shù)為SRAM的總塊數(shù),減去SRAM壞掉的塊數(shù),再減去用戶配置閃存所占用的 SRAM 塊數(shù),可以表示為(SRAM_SIZE-SRAM_FAIL_SIZE-REG_FLASH_SIZE)。因此應(yīng)用程序中設(shè)定的內(nèi)存大小不能超過此值。
[0144]依據(jù)本發(fā)明實施例,在總的靜態(tài)隨機存儲器SRAM資源固定的情況下,通過應(yīng)用程序配置向MCU配置閃存和內(nèi)存各自的容量,然后按照閃存容量,分配內(nèi)存與閃存各自所占靜態(tài)隨機存儲器的大小,從而可以適應(yīng)適應(yīng)不同產(chǎn)品,不同客戶,不同應(yīng)用場景下需求,避免出現(xiàn)閃存容量閑置浪費,而內(nèi)存容量卻不夠用的情況,達(dá)到SRAM資源的最有效利用,并且可以通過滿足內(nèi)存的需求提高芯片的使用性能。同時,采用本發(fā)明實施例,避免了閑置浪費的閃存SRAM的存在使芯片面積比實際需求偏大較多,利于芯片小型化。
[0145]并且,依據(jù)本發(fā)明實施例,還可以在控制信息存儲器OTP中配置最大閃存容量,在芯片上電復(fù)位后,即按照配置的最大閃存容量分配內(nèi)存與閃存各自所占靜態(tài)隨機存儲器的大小,從而可以適應(yīng)不用的應(yīng)用場景和需求。
[0146]依據(jù)本發(fā)明實施例,針對SRAM可能產(chǎn)生缺陷導(dǎo)致SRAM不能使用的問題,本發(fā)明同樣通過合理的調(diào)配SRAM資源,將壞塊標(biāo)記為不可用,將可用的SRAM重新組合起來重新編號,使得此顆芯片在某些產(chǎn)品上仍然可用,而不至于丟棄。
[0147]實施例四:
[0148]參照圖9,示出了本發(fā)明實施例四的一種微控制單元MCU中資源動態(tài)分配的系統(tǒng)的結(jié)構(gòu)框圖,所述MCU50包括處理器501和靜態(tài)隨機存儲器502,所述靜態(tài)隨機存儲器502包括多個存儲塊;
[0149]所述MCU50還包括配置寄存單元503和存儲塊分配單元504:
[0150]所述配置寄存單元503,用于接收所述處理器在運行應(yīng)用程序時配置的預(yù)設(shè)閃存容量,所述預(yù)設(shè)閃存容量小于所述靜態(tài)隨機存儲器的最大閃存容量;
[0151]所述存儲塊分配單元504,用于按照所述預(yù)設(shè)閃存容量分配所述靜態(tài)隨機存儲器中用于閃存存儲的閃存存儲塊以及用于內(nèi)存存儲的內(nèi)存存儲塊;
[0152]所述處理器501,用于讀取并執(zhí)行所述閃存存儲塊中的程序數(shù)據(jù),同時與所述內(nèi)存存儲塊進(jìn)行數(shù)據(jù)交互。
[0153]本發(fā)明實施例中,圖5中的靜態(tài)隨機存儲器SRAM控制單元3043相當(dāng)于本實施例所述的存儲塊分配單元504 (包括比較子單元和選擇子單元)以及靜態(tài)隨機存儲器重組單元 507。
[0154]本發(fā)明實施例中,優(yōu)選地,所述MCU還包括控制信息存儲器505,所述控制信息存儲器505存儲有所述靜態(tài)隨機存儲器的壞塊信息;
[0155]所述MCU50還包括:
[0156]主控單元506,用于在所述MCU上電復(fù)位后,從所述控制信息存儲器讀取所述壞塊信息;
[0157]靜態(tài)隨機存儲器重組單元507,用于將所述靜態(tài)隨機存儲器的壞塊標(biāo)記為不可用,并根據(jù)所述壞塊信息重新組織非壞塊的存儲塊的位置。
[0158]本發(fā)明實施例中,優(yōu)選地,所述控制信息存儲器505還存儲有所述最大閃存容量信息;
[0159]所述主控單元506,還用于根據(jù)在所述MCU上電復(fù)位后,從所述控制信息存儲器讀取所述最大閃存容量信息;
[0160]所述存儲塊分配單元504,還用于按照所述最大閃存容量信息分配所述靜態(tài)隨機存儲器中用于閃存存儲的閃存存儲塊,分配后剩余的存儲塊為用于內(nèi)存存儲的內(nèi)存存儲塊。
[0161]本發(fā)明實施例中,優(yōu)選地,所述系統(tǒng)還包括與所述MCU連接的閃存芯片60,所述MCU50還包括:
[0162]閃存控制單元508,用于若所述MCU第一次上電,則復(fù)制所述閃存芯片中的程序數(shù)據(jù)至所述靜態(tài)隨機存儲器中用于閃存存儲的閃存存儲塊。
[0163]本發(fā)明實施例中,優(yōu)選地,所述預(yù)設(shè)閃存容量為所需存儲塊的個數(shù),所述存儲塊具有各自的編號,所述存儲塊分配單元504包括:
[0164]比較子單元5041,用于將各個存儲塊的編號與所需存儲塊的個數(shù)進(jìn)行比較;
[0165]選擇子單元5042,用于將所述編號小于所需存儲塊的個數(shù)的作為用于閃存存儲的閃存存儲塊,將所述編號大于或等于所需存儲塊的個數(shù)的作為用于內(nèi)存存儲的內(nèi)存存儲塊。
[0166]本發(fā)明實施例中,優(yōu)選地,所述MCU50與所述閃存芯片60相互獨立并在外部物理連接,或者所述閃存芯片60集成在所述MCU中。
[0167]本發(fā)明實施例中,優(yōu)選地,所述MCU50還包括閃存總線接口 509和系統(tǒng)總線510,所述配置寄存單元503和所述存儲塊分配單元504通過所述閃存總線接口 509