10年前,我們經(jīng)歷了從匯編語(yǔ)言到C語(yǔ)言的轉(zhuǎn)變,現(xiàn)在,我們是時(shí)候經(jīng)歷從C語(yǔ)言到Simulink模型的轉(zhuǎn)變了……
從第一次看到這句話到現(xiàn)在又一個(gè)10年過(guò)去了,10年的時(shí)間,很多領(lǐng)域在控制算法軟件開(kāi)發(fā)中已經(jīng)完成了從C語(yǔ)言到Simulink模型的轉(zhuǎn)變,當(dāng)然,也有一些行業(yè)正在經(jīng)歷這樣的轉(zhuǎn)變,Simulink模型生成C代碼已經(jīng)成為非常成熟的技術(shù)。稍微有些遺憾的是,10年的時(shí)間,并沒(méi)有像匯編語(yǔ)言到C語(yǔ)言的轉(zhuǎn)變那樣,讓工程師們幾乎徹底忘掉匯編語(yǔ)言,即便是在基于模型設(shè)計(jì)最為成熟的汽車(chē)行業(yè),也依然有工程師還有翻看自動(dòng)生成代碼的習(xí)慣。
下面我來(lái)簡(jiǎn)單說(shuō)說(shuō)和自動(dòng)代碼生成相關(guān)的幾個(gè)原則:
拿正確的模型去生成代碼。代碼生成工具不具備糾錯(cuò)功能,最完美的代碼生成工具,也只能忠實(shí)于模型的描述,并將其轉(zhuǎn)化為C代碼。如果我們不確定模型正確與否,那我們得到的代碼也同樣是不能確保正確。
不對(duì)自動(dòng)生成的代碼做任何手工修改。從軟件工程的角度上來(lái)講,在基于模型的開(kāi)發(fā)模式下,模型應(yīng)該是我們工作和維護(hù)的工作產(chǎn)品,所有我們希望在代碼里實(shí)現(xiàn)的內(nèi)容,都應(yīng)該通過(guò)模型或者模型配置去實(shí)現(xiàn)。如果我們手工修改自動(dòng)生成的代碼,那么整個(gè)開(kāi)發(fā)過(guò)程的可維護(hù)性就大大降低,每次面對(duì)模型發(fā)生變更后生成的代碼,我們都需要經(jīng)過(guò)手工修改。
不看代碼。不看代碼并不絕對(duì),這里主要是指不看算法的實(shí)現(xiàn)代碼。在生成的.C和.H文件中,H文件作為和其他模塊的接口文件,還是會(huì)有工程師去看看你這個(gè)模塊到底定義了哪些全局的函數(shù)以及變量的。
管理你關(guān)心的數(shù)據(jù)。代碼生成階段的主要工作是數(shù)據(jù)管理工作,配置Simulink模型中需要關(guān)注的數(shù)據(jù),這里主要是信號(hào)和參數(shù),并將其按照項(xiàng)目的要求,生成為C代碼中的變量和參數(shù)。對(duì)于那些不需要關(guān)注的數(shù)據(jù),不建議做過(guò)多的配置,只要按照默認(rèn)的規(guī)則生成變量即可。再羅嗦一句,我們只管理我們關(guān)心的數(shù)據(jù),比如,跟其他模塊之間的接口數(shù)據(jù)、需要標(biāo)定的參數(shù)以及需要觀測(cè)的變量。
代碼的驗(yàn)證。這里我要扯一下ISO 26262的大旗,沒(méi)辦法,ISO 26262出現(xiàn)之前,我也曾堅(jiān)持在這種開(kāi)發(fā)模式下無(wú)需對(duì)代碼做靜態(tài)驗(yàn)證,也無(wú)需對(duì)代碼做動(dòng)態(tài)測(cè)試,很多人難以接受我的觀點(diǎn),現(xiàn)在好了,在客戶面前,我不再說(shuō)這是我的觀點(diǎn),而是ISO 26262里面的條款。傳統(tǒng)模式下的靜態(tài)、動(dòng)態(tài)驗(yàn)證不需要了,但是,代碼是否就無(wú)需驗(yàn)證了呢?非也,代碼依然要經(jīng)過(guò)充分驗(yàn)證,只是,在假設(shè)模型已經(jīng)經(jīng)過(guò)充分驗(yàn)證的前提下,這里只要再驗(yàn)證代碼和模型一致即可,驗(yàn)證的方法,也就是我們非常熟悉的SIL和PIL,ISO 26262里面稱之為back-to-back測(cè)試。
我個(gè)人觀點(diǎn),盡量不要在代碼生成這件事上耗費(fèi)過(guò)多的心思。當(dāng)然,“強(qiáng)迫癥患者”我也接觸過(guò)一些,雖說(shuō)道理上講理解可以不看代碼,但還是忍不住要去關(guān)心代碼,希望代碼生成工具能夠生成出來(lái)自己希望看到的代碼。我是工程師,不是老中醫(yī),我這里沒(méi)有藥到病除的方子,我希望能做到的是讓你的病情轉(zhuǎn)移。
你不是因?yàn)閺?qiáng)迫癥要關(guān)注代碼嗎?
那你的模型測(cè)試是否充分?
MC/DC覆蓋是否已經(jīng)達(dá)到了100%?
強(qiáng)迫自己把模型測(cè)到盡可能充分吧,這才是有利于你產(chǎn)品品質(zhì)提升的事情。
-
靜態(tài)驗(yàn)證
+關(guān)注
關(guān)注
0文章
6瀏覽量
5977 -
自動(dòng)代碼
+關(guān)注
關(guān)注
0文章
2瀏覽量
6045
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論