本發(fā)明涉及集成芯片編程的開(kāi)發(fā)方法技術(shù)領(lǐng)域,特別涉及一種用于集成芯片的可視化編程方法。
背景技術(shù):
由于汽車電子控制系統(tǒng)由多個(gè)ecu組成,各ecu之間功能獨(dú)立開(kāi)發(fā)過(guò)程獨(dú)立,而彼此之間又存在聯(lián)合工作和相互制約。然而目前嵌入式軟件開(kāi)發(fā)主要是手寫(xiě)代碼,工作量大、出錯(cuò)率高、規(guī)范性和可讀性差,從而導(dǎo)致開(kāi)發(fā)成本和周期在不斷的增加。因此,為了保證各ecu的主控芯片編程的高效性和穩(wěn)定性應(yīng)規(guī)避以上問(wèn)題,應(yīng)開(kāi)發(fā)一種更先進(jìn)的集成芯片編程方法。
ecu的軟件部分總體上可以分為三層,即應(yīng)用層、rte層和微控制器層。應(yīng)用層主要功能是對(duì)微控制器的實(shí)時(shí)數(shù)據(jù)進(jìn)行處理,rte層是微控制器層與應(yīng)用層的接口層。微控制器層是對(duì)微控制器各個(gè)資源當(dāng)前狀態(tài)、資源信息的采集和輸出的控制層。mcal是微控制器抽象層的縮寫(xiě),是細(xì)化微控制器層的控制層,他與微控制器寄存器直接相關(guān)。只有正確的編寫(xiě)mcal的配置才能實(shí)現(xiàn)硬件資源的正確控制從而實(shí)現(xiàn)整車的正常運(yùn)行。因此mcal的編程方法,是根據(jù)用戶的需求對(duì)微控制器資源的寄存器進(jìn)行的軟件的操作。操作過(guò)程包括對(duì)寄存器的讀、寫(xiě)和復(fù)位。
本發(fā)明提供了一種利用面向?qū)ο笤O(shè)計(jì)的理念,編程者無(wú)需關(guān)注mcal的具體的寄存器組成和控制方法而直接按照對(duì)mcal的需求進(jìn)行功能選擇的編程方法,從而減少編寫(xiě)代碼量、降低出錯(cuò)率并增加了代碼的規(guī)范性。
技術(shù)實(shí)現(xiàn)要素:
為了解決背景技術(shù)中所述問(wèn)題,本發(fā)明提供一種用于集成芯片的可視化編程方法,該方法采用面向?qū)ο笤O(shè)計(jì)的理念,實(shí)現(xiàn)了快捷、規(guī)范的編程方式,而且出錯(cuò)率為零。
為了達(dá)到上述目的,本發(fā)明采用以下技術(shù)方案實(shí)現(xiàn):
一種用于集成芯片的可視化編程方法,采用面向?qū)ο蟮脑O(shè)計(jì)理念,在對(duì)某一款芯片進(jìn)行編程時(shí)采用人機(jī)對(duì)話的方式讓編程者只需要選擇芯片所要使用的功能,無(wú)需面對(duì)微控制器的寄存器;在該方法中集成芯片的編程部分使用預(yù)編譯語(yǔ)句進(jìn)行功能和寄存器的讀寫(xiě)數(shù)據(jù)的選擇,適用于任何嵌入式軟件開(kāi)發(fā)項(xiàng)目;具體包括如下步驟:
步驟一、設(shè)定上位機(jī)mcal功能配置界面,用戶在上位機(jī)的可視化界面中對(duì)芯片功能進(jìn)行配置;
步驟二、對(duì)芯片的mcal功能進(jìn)行分類,按mcal功能設(shè)定不同的mcal功能模塊界面,根據(jù)步驟一中用戶設(shè)定的mcal功能確定mcal需要配置的功能模塊界面,在此界面中進(jìn)行與本功能相關(guān)的具體信息配置;
步驟三、查找寄存器列表,根據(jù)mcal的所選功能和相關(guān)信息遍歷所有寄存器以確定該功能的寄存器列表,每一個(gè)硬件資源的功能或工作狀態(tài)都需要正確地配置一個(gè)或多個(gè)寄存器來(lái)實(shí)現(xiàn),在這一階段按照已選擇的功能查找并確定與該功能相關(guān)的寄存器,并將這些寄存器保存到寄存器列表中;
步驟四、確定寄存器配置,在這階段中,需要對(duì)寄存器列表中所有的寄存器配置進(jìn)行判斷并選擇正確的寄存器配置,每一個(gè)寄存器的配置都保存在該寄存器的配置文件中;
步驟五、配置寄存器,配置寄存器,即完成對(duì)寄存器的讀寫(xiě)操作,在這一階段,已經(jīng)根據(jù)用戶的功能選擇確定了相關(guān)寄存器,并確定了這些寄存器的最終操作值和操作方法;在這一階段,根據(jù)硬件本身的控制流程和硬件資源的操作方法,將所有存在于寄存器列表中的寄存器分別寫(xiě)入其對(duì)應(yīng)的已確定的配置數(shù)據(jù);
步驟六、根據(jù)已配置的寄存器自動(dòng)生成程序代碼。
步驟三具體過(guò)程為:首先遍歷每一個(gè)寄存器并進(jìn)行判斷,根據(jù)編程者已選擇的功能判斷該寄存器是否與該功能相關(guān),如果相關(guān),那么將該寄存器保存到寄存器列表中,否則返回,繼續(xù)查找寄存器直到遍歷所有寄存器結(jié)束,以確定完整的寄存器列表;換言之,每一個(gè)硬件資源的每一種功能每一種工作狀態(tài)都對(duì)應(yīng)唯一的寄存器列表,而寄存器列表所包含的寄存器必須要完整,缺一不可。
步驟四具體過(guò)程為:寄存器的配置文件由芯片供應(yīng)商提供,主要以預(yù)編譯語(yǔ)句的方式進(jìn)行編寫(xiě),并以標(biāo)準(zhǔn)庫(kù)的形式引入到可視化編程軟件中,每一條預(yù)編譯語(yǔ)句的判斷條件都是根據(jù)該寄存器的不同配置實(shí)現(xiàn)這個(gè)硬件資源的不同功能和不同工作模式的唯一表現(xiàn)形式,系統(tǒng)從第一個(gè)預(yù)編譯條件開(kāi)始進(jìn)行判斷,通過(guò)判斷條件來(lái)確定該條件是否與所要實(shí)現(xiàn)的功能配置相匹配,如果匹配系統(tǒng)會(huì)使用該配置作為寄存器的操作值,否則系統(tǒng)進(jìn)入下一個(gè)判斷條件,直到找到與該功能相符的配置數(shù)據(jù),最終確定寄存器的控制方案。
步驟五中考慮不同硬件的讀寫(xiě)時(shí)序和操作流程不盡相同的因素。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
1、代碼手寫(xiě)工作量減少,提高了工作效率。
2、降低了代碼編寫(xiě)的出錯(cuò)率,出錯(cuò)率為零。
3、規(guī)范了代碼編寫(xiě)格式和寄存器的配置方法。
4、編程者只需要確定硬件資源的功能,無(wú)需關(guān)注硬件資源的具體使用方法和其對(duì)應(yīng)的寄存器配置方法。
5、該編程方法只與用戶的不同配置相關(guān),與編程者自身無(wú)任何關(guān)聯(lián),增加了程序的可讀性。
附圖說(shuō)明
圖1為本發(fā)明的一種用于集成芯片的可視化編程方法的流程圖;
圖2為本發(fā)明的具體實(shí)施例的功能配置界面圖;
圖3為本發(fā)明的具體實(shí)施例的can功能模塊界面圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明提供的具體實(shí)施方式進(jìn)行詳細(xì)說(shuō)明。
如圖1所示,一種用于集成芯片的可視化編程方法,采用面向?qū)ο蟮脑O(shè)計(jì)理念,在對(duì)某一款芯片進(jìn)行編程時(shí)采用人機(jī)對(duì)話的方式讓編程者只需要選擇芯片所要使用的功能,無(wú)需面對(duì)微控制器的寄存器;在該方法中集成芯片的編程部分使用預(yù)編譯語(yǔ)句進(jìn)行功能和寄存器的讀寫(xiě)數(shù)據(jù)的選擇,適用于任何嵌入式軟件開(kāi)發(fā)項(xiàng)目;具體包括如下步驟:
步驟一、設(shè)定上位機(jī)mcal功能配置界面,用戶在上位機(jī)的可視化界面中對(duì)芯片功能進(jìn)行配置;
步驟二、對(duì)芯片的mcal功能進(jìn)行分類,按mcal功能設(shè)定不同的mcal功能模塊界面,根據(jù)步驟一中用戶設(shè)定的mcal功能確定mcal需要配置的功能模塊界面,在此界面中進(jìn)行與本功能相關(guān)的具體信息配置;
步驟三、查找寄存器列表,根據(jù)mcal的所選功能和相關(guān)信息遍歷所有寄存器以確定該功能的寄存器列表,每一個(gè)硬件資源的功能或工作狀態(tài)都需要正確地配置一個(gè)或多個(gè)寄存器來(lái)實(shí)現(xiàn),在這一階段按照已選擇的功能查找并確定與該功能相關(guān)的寄存器,并將這些寄存器保存到寄存器列表中;
步驟四、確定寄存器配置,在這階段中,需要對(duì)寄存器列表中所有的寄存器配置進(jìn)行判斷并選擇正確的寄存器配置,每一個(gè)寄存器的配置都保存在該寄存器的配置文件中;
步驟五、配置寄存器,配置寄存器,即完成對(duì)寄存器的讀寫(xiě)操作,在這一階段,已經(jīng)根據(jù)用戶的功能選擇確定了相關(guān)寄存器,并確定了這些寄存器的最終操作值和操作方法;在這一階段,根據(jù)硬件本身的控制流程和硬件資源的操作方法,將所有存在于寄存器列表中的寄存器分別寫(xiě)入其對(duì)應(yīng)的已確定的配置數(shù)據(jù);
步驟六、根據(jù)已配置的寄存器自動(dòng)生成程序代碼。
步驟三具體過(guò)程為:首先遍歷每一個(gè)寄存器并進(jìn)行判斷,根據(jù)編程者已選擇的功能判斷該寄存器是否與該功能相關(guān),如果相關(guān),那么將該寄存器保存到寄存器列表中,否則返回,繼續(xù)查找寄存器直到遍歷所有寄存器結(jié)束,以確定完整的寄存器列表;換言之,每一個(gè)硬件資源的每一種功能每一種工作狀態(tài)都對(duì)應(yīng)唯一的寄存器列表,而寄存器列表所包含的寄存器必須要完整,缺一不可。
步驟四具體過(guò)程為:寄存器的配置文件由芯片供應(yīng)商提供,主要以預(yù)編譯語(yǔ)句的方式進(jìn)行編寫(xiě),并以標(biāo)準(zhǔn)庫(kù)的形式引入到可視化編程軟件中,每一條預(yù)編譯語(yǔ)句的判斷條件都是根據(jù)該寄存器的不同配置實(shí)現(xiàn)這個(gè)硬件資源的不同功能和不同工作模式的唯一表現(xiàn)形式,系統(tǒng)從第一個(gè)預(yù)編譯條件開(kāi)始進(jìn)行判斷,通過(guò)判斷條件來(lái)確定該條件是否與所要實(shí)現(xiàn)的功能配置相匹配,如果匹配系統(tǒng)會(huì)使用該配置作為寄存器的操作值,否則系統(tǒng)進(jìn)入下一個(gè)判斷條件,直到找到與該功能相符的配置數(shù)據(jù),最終確定寄存器的控制方案。
步驟五中考慮不同硬件的讀寫(xiě)時(shí)序和操作流程不盡相同的因素。
具體實(shí)施例:
目標(biāo):配置can通訊,實(shí)現(xiàn)標(biāo)準(zhǔn)幀,波特率500k,引腳使用p3.12和p3.13。
1、如圖2所示,首先使用上位機(jī)進(jìn)入can配置界面,在這里根據(jù)我們的實(shí)際需求進(jìn)行勾選和配置。
2、點(diǎn)擊“確定”按鈕后即確認(rèn)當(dāng)前模塊為需要mcal進(jìn)行編輯的模塊,如圖3所示。
3、上位機(jī)內(nèi)部開(kāi)始搜索列表,確定哪些寄存器需要被配置。具體方法為上位機(jī)的每一個(gè)控件對(duì)應(yīng)幾個(gè)固定的寄存器。
4、當(dāng)需要配置的寄存器列表確定后,根據(jù)上位機(jī)控件中的數(shù)據(jù)配置,查找需要寫(xiě)入寄存器的值。
比如波特率配置為500k,那么檢索到的需要配置的寄存器為can_nbtr0和can_nfcr0,再根據(jù)其數(shù)值為500000,對(duì)每個(gè)寄存器配值列表進(jìn)行檢索,當(dāng)查到對(duì)應(yīng)的寄存器配值為0x0000164f和0x00000000后判定符合該配值(數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)為一個(gè)二維表),則該寄存器配值結(jié)束。
5、生成對(duì)應(yīng)的代碼:
can_nbtr0.reg=0x0000164f;
can_nfcr0.reg=0x00000000;
本發(fā)明方法代碼手寫(xiě)工作量減少,提高了工作效率;降低了代碼編寫(xiě)的出錯(cuò)率。規(guī)范了代碼編寫(xiě)格式和寄存器的配置方法,編程者只需要確定硬件資源的功能,無(wú)需關(guān)注硬件資源的具體使用方法和其對(duì)應(yīng)的寄存器配置方法。該編程方法只與用戶的不同配置相關(guān),與編程者自身無(wú)任何關(guān)聯(lián),增加了程序的可讀性。
以上實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于上述的實(shí)施例。上述實(shí)施例中所用方法如無(wú)特別說(shuō)明均為常規(guī)方法。