軟件定義汽車6-開發(fā)人才從何而來

引言

? ? ? ?從2019年下半年開始,各個(gè)玩家都發(fā)布了在汽車軟件化方面的戰(zhàn)略,特別是2020年這種經(jīng)濟(jì)大環(huán)境不好的情況下,仔細(xì)去看看各方的動(dòng)作,絲毫感受不到有什么汽車業(yè)的寒冬,有些玩家是真做,有些玩家是在跟風(fēng),還有一些還在睡覺。

? ? ? ?最近和各種背景的人交流,技術(shù)派似乎認(rèn)為這就是未來方向,傳統(tǒng)派關(guān)注的問題很實(shí)際,花這么大代價(jià)去重構(gòu)汽車的軟硬件基礎(chǔ)架構(gòu),究竟有什么意義? 對(duì)這個(gè)方向還存在疑慮的,現(xiàn)階段也很難有什么令人信服的證據(jù)去說服。我更加關(guān)注執(zhí)行層面的事情,如果這個(gè)方向的是正確的,如何能讓想法慢慢落地?思考了很久,決定從三個(gè)維度去闡述這個(gè)事情:

  • 人從哪兒來
  • 要做的事情
  • 執(zhí)行策略與計(jì)劃

? ? ? ?為什么先講人,是因?yàn)檐浖x汽車這件事情,最關(guān)鍵的還是要重構(gòu)車輛底層的軟硬件基礎(chǔ)架構(gòu),而行業(yè)里面沒有現(xiàn)成的人才儲(chǔ)備,無論是互聯(lián)網(wǎng)來的,還是傳統(tǒng)汽車電子軟件來的,都存在能力上的短板,并且從架構(gòu)上也沒有最佳實(shí)踐,所以即使是哪家車廠想清楚了要做什么,短時(shí)間也招不到如此多的合格的人才,所以傳統(tǒng)的玩家無論想做什么軟件,三個(gè)基本能力是必須掌握的:

  • 軟件架構(gòu)能力
  • 軟件開發(fā)能力
  • 軟件工程的能力

? ? ? ?很多人都在講,傳統(tǒng)巨頭轉(zhuǎn)型過來,會(huì)吊打特斯拉,可事實(shí)是轉(zhuǎn)型過來的巨頭依然還在被吊打著,有一個(gè)要素大家要清楚,擁有強(qiáng)大軟件的研發(fā)能力的科技巨頭,招攬汽車頂級(jí)人才的能力,要明顯強(qiáng)于傳統(tǒng)巨頭招攬軟件人才的能力,科技巨頭拿二線程序員的薪資就能招攬到一線的汽車人才,雖然很殘酷,但卻是事實(shí)。

互聯(lián)網(wǎng)人的能力模型

? ? ? ?IT與互聯(lián)網(wǎng)大部分的軟件開發(fā)人員,都屬于在通用計(jì)算機(jī)系統(tǒng)上的軟件開發(fā),一般是在某種操作系統(tǒng)上(Windows/Linux/IOS等)進(jìn)行應(yīng)用軟件開發(fā),主要包含電腦端,手機(jī)端,服務(wù)器端等設(shè)備,以X86與ARM架構(gòu)為主,大部分開發(fā)人員都會(huì)使用某種高級(jí)語(yǔ)言進(jìn)行特定任務(wù)的開發(fā)(C++/JAVA/OC//JS/PYTHON等),由于業(yè)務(wù)的需要,互聯(lián)網(wǎng)公司會(huì)有算法人員(圖像/語(yǔ)音/數(shù)據(jù)),手機(jī)與智能硬件的公司,也會(huì)有部分BSP的開發(fā)團(tuán)隊(duì),他們屬于軟件團(tuán)隊(duì)中最懂電子硬件的人。

? ? ? ?大部分計(jì)算機(jī)相關(guān)專業(yè)的人,畢業(yè)之后都涌入了這個(gè)行業(yè),部分非計(jì)算機(jī)相關(guān)專業(yè)的人,自學(xué)編程之后也涌入了這個(gè)行業(yè),所以這個(gè)行業(yè)當(dāng)中有龐大的人口基數(shù),人員規(guī)模在百萬以上。

? ? ? ?從2015年開始,掀起的智能網(wǎng)聯(lián)和自動(dòng)駕駛的熱潮,吸引了大批互聯(lián)網(wǎng)人的加入,從本質(zhì)上講,都是圍繞車的外圍進(jìn)行的一系列應(yīng)用開發(fā)( 車機(jī)+TBOX+手機(jī)+服務(wù)器),但車還是那輛車,基礎(chǔ)架構(gòu)并沒有發(fā)生變化。通過幾年的摸索,大家也發(fā)現(xiàn),只在外圍做創(chuàng)新,本質(zhì)上無法帶來革命性的突破,不去從內(nèi)核上革命,永遠(yuǎn)也追不上特斯拉。

總結(jié)下來,我的觀點(diǎn)可以概括為以下幾點(diǎn):

  • 互聯(lián)網(wǎng)有大量的優(yōu)秀軟件人才儲(chǔ)備,有構(gòu)建大規(guī)模軟件的軟件工程經(jīng)驗(yàn)。
  • 搞車聯(lián)網(wǎng)和自動(dòng)駕駛,互聯(lián)網(wǎng)人有技術(shù)上的優(yōu)勢(shì)。
  • 但是大部分人不懂硬件,需要補(bǔ)上硬件的短板,以及汽車軟件的Know-How。
  • IT界在成熟硬件架構(gòu)的上的工程的經(jīng)驗(yàn),照搬到車這個(gè)分布式異構(gòu)平臺(tái)下是要吃虧的。
  • 按照過往的經(jīng)驗(yàn),車載軟件一半以上的時(shí)間花在了集成聯(lián)調(diào)階段,不像互聯(lián)網(wǎng)測(cè)試環(huán)境到生產(chǎn)環(huán)境的遷移那么的流暢。

傳統(tǒng)汽車人的能力模型

? ? ? ?傳統(tǒng)車企里面最懂軟件的應(yīng)該就是其IT信息部門了,這兩年興起的車聯(lián)網(wǎng),車企中最先參與的也是這部分人,但大部分的開發(fā)人員還是都來自于IT及互聯(lián)網(wǎng)。

? ? ? ?傳統(tǒng)汽車產(chǎn)業(yè)鏈當(dāng)中對(duì)軟件了解最多的,應(yīng)該是Tier1當(dāng)中的汽車電子軟件部門,汽車電子軟件屬于嵌入式軟件開發(fā)范疇,是在專用計(jì)算機(jī)系統(tǒng)上進(jìn)行軟件開發(fā),一般要求開發(fā)人員具有一定的硬件基礎(chǔ),主流的嵌入式平臺(tái)包含ARM、DSP、FPGA等,開發(fā)語(yǔ)言主要是匯編/C/C++,受限于整個(gè)行業(yè)的限制,汽車電子軟件的主流開發(fā)平臺(tái)還是ARM,并且大部分還局限在微控制器層面。

? ? ? ?大部分的嵌入式軟件開發(fā)人員,來自于通信、自動(dòng)化、電子等對(duì)電子硬件比較了解的專業(yè),少部分來自于計(jì)算機(jī)(嵌入式只是計(jì)算機(jī)專業(yè)的一個(gè)小分支,畢業(yè)生更傾向于去互聯(lián)網(wǎng)),汽車電子軟件屬于嵌入式軟件的一個(gè)分支,但由于其行業(yè)的封閉性,從業(yè)人員的來源就更窄,前面的文章也分析過,如果除掉車聯(lián)網(wǎng)的那批人,中國(guó)整個(gè)行業(yè)不超過5000人。

? ? ? ?從軟件人員的角度看來,和整個(gè)軟件關(guān)系最大的可能就是電子電氣架構(gòu),可是在傳統(tǒng)車企那里,電子電氣部門的話語(yǔ)權(quán)也是受限的,觀察一下各大車企技術(shù)中心研究院的負(fù)責(zé)人,基本都是傳統(tǒng)底盤、發(fā)動(dòng)機(jī)等領(lǐng)域出身。在他們的領(lǐng)導(dǎo)下搞軟件定義汽車,搞數(shù)字化系統(tǒng),想想就知道結(jié)果,所以組織架構(gòu)的變革是前提。

傳統(tǒng)ECU的開發(fā)模式

? ? ? ?很多文章都提到傳統(tǒng)ECU,一輛現(xiàn)代汽車會(huì)包含幾十到上百個(gè)各種各樣的ECU,雖然數(shù)量很多,但是構(gòu)型基本一樣,以下就是傳統(tǒng)ECU的典型架構(gòu)圖:

傳統(tǒng)ECU.png

主要包含以下幾個(gè)部分:

  • 電源、外設(shè)接口、ADC、SCI、PWM、看門狗、車載網(wǎng)絡(luò)接口(CAN、LIN、Ethernet、FlexRay)
  • 非易失性存儲(chǔ)NVM(一般在幾十K到幾兆之間,大部分應(yīng)用512K以內(nèi)就足夠)
  • SRAM(一般在幾十K到幾兆之間,大部分應(yīng)用256K以內(nèi)就足夠)

一般具有以下特性:

  • 采用Cortex-M、Cortex-R內(nèi)核居多,部分廠家有自己的內(nèi)核
  • Lock-Step(保持多個(gè)CPU、內(nèi)存精確的同步,在正確的相同時(shí)鐘周期內(nèi)執(zhí)行相同的指令)
  • ECC、ECM 糾錯(cuò)機(jī)制
  • 最高能夠達(dá)到ASIL-D 安全等級(jí)要求

代表芯片:

  • NXP S32K系列 MAC系列 LPC系列 KEA系列 i.MX RT系列 (都是Cortex-M內(nèi)核)
  • 英飛凌 XMC系列(Cortex-M內(nèi)核) AURIX TC系列(TriCore內(nèi)核)
  • 瑞薩 RH850系列
  • TI Hercules系列(Cortex-R內(nèi)核)

一個(gè)不跑任何操作系統(tǒng)的ECU,其主程序代碼一般如下:

void task1()
{
   status=!status;  //反轉(zhuǎn)某個(gè)狀態(tài),比如設(shè)備的開關(guān)
   write(device_addr,status); // 向設(shè)備地址處寫入設(shè)備狀態(tài)
}

int main(void)
{
   init_irq(); //初始化中斷向量
   init_timer(); // 初始化時(shí)鐘
   init_devices();//初始化其他設(shè)備
   while(1) //開啟無限死循環(huán)
   {
     task1();// 運(yùn)行任務(wù)1
     delay(1000); // 延時(shí)一段時(shí)間
     task2();// 運(yùn)行任務(wù)2
   }
}

? ? ? ?在運(yùn)行到主程序之前,會(huì)有一系列匯編代碼,處理與CPU體系架構(gòu),板級(jí)支持相關(guān)的事情,一般會(huì)包含,屏蔽中斷,初始化內(nèi)存,建立堆棧,把代碼搬進(jìn)內(nèi)存等等,事實(shí)上就是BootLoader該做的事情。

? ? ? ?這樣寫的裸機(jī)程序,其任務(wù)只能順序執(zhí)行(可以通過更改PC指針強(qiáng)制跳轉(zhuǎn)),也可以通過中斷執(zhí)行其他任務(wù),但是卻無法靈活的設(shè)定任務(wù)的優(yōu)先級(jí),適合于任務(wù)非常簡(jiǎn)單的場(chǎng)景,比如在單核處理器中,做簡(jiǎn)單的開關(guān)控制。

? ? ? ?稍微復(fù)雜一點(diǎn)的場(chǎng)景,就需要有一個(gè)OS來實(shí)現(xiàn)相關(guān)的設(shè)備管理,比如小型RTOS,其主程序代碼框架一般如下:

void task1()
{
   status=!status;  //反轉(zhuǎn)某個(gè)狀態(tài),比如設(shè)備的開關(guān)
   write(device_addr,status); // 向設(shè)備地址處寫入設(shè)備狀態(tài)
}

int main(void)
{
   init_irq(); //初始化中斷向量
   init_timer(); // 初始化時(shí)鐘
   init_devices();//初始化其他設(shè)備
   create_task(task1,stack_size,priority); // 創(chuàng)建一個(gè)任務(wù)
   create_task(task2,stack_size,priority);
   task_schedule(); // 開始任務(wù)調(diào)度
}

? ? ? ?這個(gè)OS最核心的功能就是提供了任務(wù)調(diào)度、優(yōu)先級(jí)設(shè)定、任務(wù)間通信的機(jī)制,在OS之上就能實(shí)現(xiàn)更加豐富的業(yè)務(wù)邏輯。

? ? ? ?如果是遵守Classic AutoSAR的方法論進(jìn)行開發(fā),整個(gè)過程可以分為三個(gè)階段:系統(tǒng)配置、ECU設(shè)計(jì)與配置、代碼生成,開發(fā)過程中會(huì)使用由Vector公司等公司提供的工具,前期也會(huì)在MATLAB Simulink中進(jìn)行仿真,最后生成項(xiàng)目代碼,在這個(gè)過程中幾乎不用寫什么代碼。

所以概括下來,有以下幾點(diǎn)想表達(dá):

  • 傳統(tǒng)ECU軟件的開發(fā),也并不像大家想的那樣高門檻,本身也不復(fù)雜,再?gòu)?fù)雜也就幾百K的代碼量,還不如高性能計(jì)算單元上的一個(gè)引導(dǎo)程序大。

  • 汽車電子軟件的核心工作就是與硬件設(shè)備交互,開發(fā)語(yǔ)言是匯編和C,只做業(yè)務(wù)會(huì)C語(yǔ)言就行了,汽車軟件的特殊Know-How是這個(gè)行業(yè)的一個(gè)壁壘。

  • 大部分嵌入軟件工程師都精通C編程,但也被C面向過程的思維限制住了,缺少的是構(gòu)建大規(guī)模軟件的軟件工程能力。

  • 傳統(tǒng)的嵌入式軟件開發(fā),可以為汽車這個(gè)行業(yè)提供許多人才儲(chǔ)備,過來的人員需要補(bǔ)齊車載軟件開發(fā)的Know-How。

高性能計(jì)算單元上的軟件開發(fā)

? ? ? ?這個(gè)章節(jié)我先起個(gè)頭,因?yàn)檫@部分內(nèi)容和軟件定義汽車具體要做的事情非常相關(guān),下圖是TI的TDA4的系統(tǒng)框圖,非常典型,各家的高性能SOC也都大同小異,大家先看看,有個(gè)印象,下篇我們將詳細(xì)介紹。

高性能計(jì)算單元.png

總結(jié)

? ? ? ?對(duì)于無論是互聯(lián)網(wǎng)人,還是傳統(tǒng)的汽車電子軟件開的人員,軟件定義汽車都是一個(gè)新的領(lǐng)域,需要相互借鑒、相互學(xué)習(xí),想要加入這個(gè)行業(yè)的人需要補(bǔ)齊對(duì)應(yīng)技術(shù)上的短板,對(duì)于各個(gè)玩家來說,現(xiàn)階段還是以積累能力為主,而且招募相關(guān)人員會(huì)非常困難,特別是能夠進(jìn)行全局設(shè)計(jì)的架構(gòu)人員。

? ? ? ?每個(gè)行業(yè)都有每個(gè)行業(yè)的專業(yè)性,得心存敬意,但也不是畏懼,為什么有底氣說這些,也是有經(jīng)歷的因素在里面,童年時(shí)代大家在玩玩具的時(shí)候,這些芯片電子元件就是我的玩具,后面的各種項(xiàng)目經(jīng)歷,使得我對(duì)各家芯片也是如數(shù)家珍,這種經(jīng)歷也為我現(xiàn)在做架構(gòu)工作提供了非常大的優(yōu)勢(shì),因?yàn)橐话愕拈_發(fā)工程師或者是合作方很難找理由忽悠住我,實(shí)在不行我會(huì)直接教他怎么做。

? ? ? ? 希望有更多軟件領(lǐng)域的高手投入到這個(gè)行業(yè),做這個(gè)事情需要很強(qiáng)攻關(guān)能力的技術(shù)團(tuán)隊(duì),也需要全行業(yè)一起努力!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容