一種控制器軟件代碼分區(qū)方法及其運(yùn)行方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及控制器軟件領(lǐng)域,具體地說是一種控制器軟件代碼分區(qū)方法。
【背景技術(shù)】
[0002]電動汽車具有零排放、無污染、能量轉(zhuǎn)換效率高、噪聲小等特點,是解決城市化汽車突出問題的重要途徑。發(fā)展電動汽車將對調(diào)整我國產(chǎn)業(yè)結(jié)構(gòu)、提高重點領(lǐng)域的創(chuàng)新能力和市場競爭能力,促進(jìn)經(jīng)濟(jì)社會協(xié)調(diào)發(fā)展產(chǎn)生深遠(yuǎn)影響。電動汽車的價值不僅僅是節(jié)能減排,更是一種用能方式的變革及由此帶來的能源結(jié)構(gòu)的優(yōu)化,電動汽車才能從根本上解決石油依賴、環(huán)境污染、溫室氣體排放以及能源安全問題,是發(fā)展新能源汽車的最終選擇。
[0003]控制器是電動汽車的核心部件,用來控制電動汽車電機(jī)的啟動、運(yùn)行、進(jìn)退、速度、停止以及其它電子器件,它就像是電動汽車的大腦,是電動車上重要的部件之一。
[0004]汽車控制器軟件代碼一般分為引導(dǎo)加載程序和應(yīng)用程序兩部分代碼,兩者之間相互獨立,具有各自的初始化和配置代碼。引導(dǎo)加載程序又分為引導(dǎo)和加載兩部分程序。控制器上電啟動時,引導(dǎo)加載程序首先運(yùn)行其初始化和配置代碼,包括硬件、數(shù)據(jù)段和中斷向量的初始化等,進(jìn)入引導(dǎo)程序部分,加載并運(yùn)行應(yīng)用程序。應(yīng)用程序運(yùn)行時,首先運(yùn)行其初始化和配置代碼,將硬件、數(shù)據(jù)段和中斷向量的初始化等依次進(jìn)行,然后進(jìn)入應(yīng)用程序循環(huán)運(yùn)行。運(yùn)行引導(dǎo)程序時,如果應(yīng)用程序不存在則進(jìn)入加載程序部分等待進(jìn)行應(yīng)用程序的更新。如果應(yīng)用程序收到程序更新的指令,則跳轉(zhuǎn)到加載程序部分。應(yīng)用程序運(yùn)行時,如果收到程序更新的指令則跳轉(zhuǎn)到引導(dǎo)加載程序運(yùn)行,并進(jìn)入到加載程序部分。
[0005]除汽車控制器外,目前大多數(shù)控制器都是采用上述代碼分區(qū)方式,分為引導(dǎo)加載程序和應(yīng)用程序,并且他們都具有各自獨立的初始化和配置代碼。因此在控制器上電啟動過程中會進(jìn)行兩次初始化和配置代碼的運(yùn)行,增加了控制器上電啟動的運(yùn)行時間。如果引導(dǎo)加載程序和應(yīng)用程序的初始化和配置代碼具有不同的配置,會導(dǎo)致硬件或者軟件初始化不一致,從而引起程序運(yùn)行出錯。
【發(fā)明內(nèi)容】
[0006]為此,本發(fā)明所要解決的技術(shù)問題在于現(xiàn)有技術(shù)中的控制器代碼分區(qū)方法不僅需要運(yùn)行兩次初始化和配置代碼,花費時間長,而且易出現(xiàn)初始化不一致,程序運(yùn)行出錯的問題,從而提出一種簡化初始化和代碼配置且提高了初始化一致性的控制器軟件代碼分區(qū)方法及其運(yùn)行方法。
[0007]為解決上述技術(shù)問題,本發(fā)明提供一種控制器軟件代碼分區(qū)方法及其運(yùn)行方法。
[0008]本發(fā)明提供一種控制器軟件代碼分區(qū)方法,將控制器的存儲空間分為引導(dǎo)加載區(qū)和應(yīng)用程序區(qū),所述應(yīng)用程序區(qū)中設(shè)置有應(yīng)用程序代碼,所述引導(dǎo)加載區(qū)分為初始化和配置區(qū)、引導(dǎo)區(qū)、加載區(qū),其中:
所述初始化和配置區(qū)設(shè)置有所述引導(dǎo)加載區(qū)和所述應(yīng)用程序區(qū)共用的初始化和配置代碼; 所述引導(dǎo)區(qū)設(shè)置有引導(dǎo)代碼,用于檢查所述應(yīng)用程序代碼的有效性,若有效則轉(zhuǎn)到應(yīng)用程序區(qū),若無效,則轉(zhuǎn)到所述加載區(qū);
所述加載區(qū)設(shè)置有加載代碼,用于運(yùn)行傳輸和燒寫協(xié)議,與上位機(jī)通訊進(jìn)行所述應(yīng)用程序區(qū)的的應(yīng)用程序代碼的更新。
[0009]優(yōu)選地,所述初始化和配置區(qū)用于整個控制器硬件初始化、數(shù)據(jù)初始化和中斷向量表初始化中的一種或幾種。
[0010]優(yōu)選地,所述加載區(qū)內(nèi)的代碼為不可返回模式,只能通過復(fù)位或者重新上電退出。
[0011]優(yōu)選地,所述應(yīng)用程序區(qū)的代碼用于系統(tǒng)的調(diào)度、控制策略以及標(biāo)定診斷等通訊協(xié)議的運(yùn)行。
[0012]優(yōu)選地,對應(yīng)所述初始化和配置區(qū)、引導(dǎo)區(qū)、加載區(qū)和應(yīng)用程序區(qū)分別設(shè)置有獨立的RAM運(yùn)行分區(qū)。
[0013]本發(fā)明還提供一種控制器軟件代碼分區(qū)的運(yùn)行方法,包括如下步驟:
控制器上電,進(jìn)入初始化和配置分區(qū),運(yùn)行硬件的初始化、數(shù)據(jù)初始化和中斷向量表,控制器硬件進(jìn)入使能狀態(tài);
進(jìn)入引導(dǎo)區(qū),運(yùn)行引導(dǎo)代碼,判斷應(yīng)用程序區(qū)是否有效,如有效則進(jìn)入應(yīng)用程序區(qū),運(yùn)行控制器的調(diào)度、輸入輸出處理、控制策略;否則進(jìn)入加載區(qū),運(yùn)行傳輸和燒寫代碼,等待與上位機(jī)進(jìn)行應(yīng)用程序更新。
[0014]優(yōu)選地,進(jìn)入加載區(qū),運(yùn)行傳輸和燒寫代碼,等待與上位機(jī)進(jìn)行應(yīng)用程序更新的過程中,還包括如果沒有程序更新則一直等待,直至系統(tǒng)下電或者重啟退出。
[0015]優(yōu)選地,所述初始化和配置分區(qū)、引導(dǎo)區(qū)、加載區(qū)、應(yīng)用程序區(qū)分別運(yùn)行在獨立的RAM運(yùn)行分區(qū)內(nèi)。
[0016]本發(fā)明的上述技術(shù)方案相比現(xiàn)有技術(shù)具有以下優(yōu)點,。
[0017](I)本發(fā)明提供一種控制器軟件代碼分區(qū)方法,將控制器的存儲空間分為引導(dǎo)加載區(qū)和應(yīng)用程序區(qū),所述應(yīng)用程序區(qū)中設(shè)置有應(yīng)用程序代碼,所述引導(dǎo)加載區(qū)分為初始化和配置區(qū)、引導(dǎo)區(qū)、加載區(qū),初始化和配置區(qū)設(shè)置有所述引導(dǎo)加載區(qū)和所述應(yīng)用程序區(qū)共用的初始化和配置代碼。針對現(xiàn)有技術(shù)中控制器代碼分區(qū)不僅需要運(yùn)行兩次初始化和配置代碼,花費時間長,而且易出現(xiàn)初始化不一致,程序運(yùn)行出錯的缺點,本方案中對控制器加載程序和應(yīng)用程序進(jìn)行了優(yōu)化,將兩者的初始化和配置代碼進(jìn)行了合并,統(tǒng)一放在初始化和配置區(qū)中。因此引導(dǎo)加載程序和應(yīng)用程序不再相互獨立而實現(xiàn)了統(tǒng)一,將兩者合并成為一整個程序,只是分配到不同的代碼空間上.在控制器上電啟動時,只需要運(yùn)行一次初始化和配置代碼,減少了控制器的啟動時間和整個控制器代碼的大小。又因為初始化和配置代碼合并,引導(dǎo)加載程序和應(yīng)用程序只需統(tǒng)一修改和配置,減少了代碼配置的次數(shù)和復(fù)雜度,避免了由于初始化和配置不一致而出現(xiàn)程序運(yùn)行錯誤的機(jī)會。
[0018](2)本發(fā)明所述的控制器軟件代碼分區(qū)方法,對應(yīng)所述初始化和配置區(qū)、引導(dǎo)區(qū)、加載區(qū)和應(yīng)用程序區(qū)分別設(shè)置有獨立的RAM運(yùn)行分區(qū),基于以上分區(qū)的劃分,實現(xiàn)了對整個控制器代碼空間分配的優(yōu)化,將引導(dǎo)加載區(qū)和應(yīng)用程序的初始化和配置代碼實現(xiàn)合并,同時對各個FLASH分區(qū)劃分了單獨的RAM運(yùn)行分區(qū),使各個代碼分區(qū)的功能獨立而且相互不影響。
[0019](3)本發(fā)明還提供一種控制器軟件代碼分區(qū)的運(yùn)行方法,控制器上電,進(jìn)入初始化和配置分區(qū),運(yùn)行硬件的初始化、數(shù)據(jù)初始化和中斷向量表,控制器硬件進(jìn)入使能狀態(tài);進(jìn)入引導(dǎo)區(qū),運(yùn)行引導(dǎo)代碼,判斷應(yīng)用程序區(qū)是否有效,如有效則進(jìn)入應(yīng)用程序區(qū),運(yùn)行控制器的調(diào)度、輸入輸出處理、控制策略;否則進(jìn)入加載區(qū),運(yùn)行傳輸和燒寫代碼,等待與上位機(jī)進(jìn)行應(yīng)用程序更新。本方案將引導(dǎo)加載程序和應(yīng)用程序的代碼空間分配進(jìn)行了優(yōu)化,將兩者的初始化和配置代碼合并在引導(dǎo)加載程序分區(qū),應(yīng)用程序分區(qū)不再有初始化和配置代碼。因此控制器上電時只進(jìn)行一次初始化即可,從而減少了控制器軟件的啟動時間和整個軟件代碼的大小。同時也避免了兩部分程序由于初始化和配置代碼不一致而出現(xiàn)的程序運(yùn)行錯誤。
【附圖說明】
[0020]為了使本發(fā)明的內(nèi)容更容易被清楚的理解,下面根據(jù)本發(fā)明的具體實施例并結(jié)合附圖,對本發(fā)明作進(jìn)一步詳細(xì)的說明,其中
圖1是本發(fā)明實施例中的控制器軟件代碼分區(qū)的示意圖;
圖2是本發(fā)明另一實施例中的控制器軟件代碼分區(qū)示意圖;
圖3是本發(fā)明實施例中的控制器代碼分區(qū)運(yùn)行狀態(tài)圖。
【具體實施方式】
[0021]實施例1:
本實施例中提供一種控制器軟件代碼分區(qū)方法,是一種控制器中的存儲空間的分配方式,將控制器的存儲空間(FLASH)分為引導(dǎo)加載區(qū)和應(yīng)用程序區(qū),所述應(yīng)用程序區(qū)中設(shè)置有應(yīng)用程序代碼,用于系統(tǒng)的調(diào)度、控制策略以及標(biāo)定診斷等通訊協(xié)議的運(yùn)行。
[0022]所述引導(dǎo)加載區(qū)分為初始化和配置區(qū)、引導(dǎo)區(qū)、加載區(qū),其中:
初始化和配置區(qū)設(shè)置有所述引導(dǎo)加載區(qū)和所述應(yīng)用程序區(qū)共用的初始化和配置代碼,用于整個控制器硬件初始化、數(shù)據(jù)初始化和中斷向量表初始化等多種初始化處理。
[0023]引導(dǎo)區(qū)設(shè)置有引導(dǎo)代碼,用于檢查所述應(yīng)用程序代碼的有效性,若有效則轉(zhuǎn)到應(yīng)用程序區(qū),若無效,則轉(zhuǎn)到所述加載區(qū)。所述加載區(qū)內(nèi)的代碼為不可返回模式,只能通過復(fù)位或者重新上電退出。
[0024]所述加載區(qū)設(shè)置有加載代碼,用于運(yùn)行傳輸和燒寫協(xié)議,與上位機(jī)通訊進(jìn)行所述應(yīng)用程序區(qū)的的應(yīng)用程序代碼的更新。
[0025]本實施例中的方案可用于汽車控制器中,也可以用于其他任意類型的控制器中,對控制器中的代碼分區(qū)進(jìn)行優(yōu)化。針對現(xiàn)有技術(shù)中控制器代碼分區(qū)不僅需要運(yùn)行兩次初始化和配置代碼,花費時間長,而且易出現(xiàn)初始化不一致,程序運(yùn)行出錯的缺點,本方案中對控制器加載程序和應(yīng)用程序進(jìn)行了優(yōu)化,將兩者的初始化和配置代碼進(jìn)行了合并,統(tǒng)一放在初始化和配置區(qū)中。因此引導(dǎo)加載程序和應(yīng)用程序不再相互獨立而實現(xiàn)了統(tǒng)一,將兩者合并成為一整個程序,只是分配到不同的代碼空間上.在控制器上電啟動時,只需要運(yùn)行一次初始化和配置代碼,減少了控制器的啟動時間和整個控制器代碼的大小。又因為初始化和配置代碼合并,引導(dǎo)加載程序和應(yīng)用程序只需統(tǒng)一修改和配置,減少了代碼配置的次數(shù)和復(fù)雜度,避免了由于初始化和配置不一致而出現(xiàn)程序運(yùn)行錯誤的機(jī)會。
[0026]在進(jìn)一步優(yōu)選的實施方案中,對應(yīng)所述初始化和配置區(qū)、引導(dǎo)區(qū)、加載區(qū)和應(yīng)用程序區(qū)分別設(shè)置有獨立的RAM運(yùn)行分區(qū),與現(xiàn)有技術(shù)中上述分區(qū)都在同一個RAM分區(qū)運(yùn)行的方式相比,各個代碼分區(qū)的功能獨立而且相互不影響,可以單獨配置修改或者更新而不影響其他分區(qū)程序的RAM空間分配。
[0027]實施例2:
一種控制器軟件代碼分區(qū)的運(yùn)行方法,對應(yīng)于實施例1中的控制器軟件代碼的分區(qū)方式,其分區(qū)的運(yùn)行過程如下:
首先,控制器上電,進(jìn)入初始化和配置區(qū),運(yùn)行硬件的初始化、數(shù)據(jù)初始化和中斷向量表,控制器硬件進(jìn)入使能狀態(tài)。
[0028]然后,進(jìn)入引導(dǎo)區(qū),運(yùn)行引導(dǎo)代碼,判斷應(yīng)用程序區(qū)是否有效,如有效則進(jìn)入應(yīng)用程序區(qū),運(yùn)行控制器的調(diào)度、輸入輸出處理、控制策略;否則進(jìn)入加載區(qū),運(yùn)行傳輸和燒寫代碼,等待與上位機(jī)進(jìn)行應(yīng)用程序更新。如果沒有程序更新則一直等待,直至系統(tǒng)下電或者重啟退出。
[0029]上述過程中,所述初始化和配置分區(qū)、引導(dǎo)區(qū)、加載區(qū)、應(yīng)用程序區(qū)分別運(yùn)行在獨立的RAM運(yùn)行分區(qū)內(nèi)。
[0030]由于將引導(dǎo)加載程序和應(yīng)用程序的代碼空間分配進(jìn)行了優(yōu)化,將兩者的初始化和配置代碼合并在初始化和配置區(qū),應(yīng)用程序分區(qū)不再有初始化和配置代碼。