淺析多核ECU運行流程

以前上手單片機都是main函數開始,一條路走到黑。最近工作上接觸到了英飛凌Aurix TC397這款6核ECU,實際操作起來還是挺不一樣的。後又發現中文資料網上基本找不到【辣雞英飛凌】。。。我來起個頭好了。

PS:(以下着重描述與單核ECU的區別,基礎性的知識在此恕不展開)

PPS:(爲便於理解,本文將採用倒敘法)

 

目錄:

1. How  如何對6個核心分別編程 

2. Why 爲什麼6個核心能找到與自己對應的那個main函數

3. 6個核心的主從問題

 

 


1. How  如何對6個核心分別編程 

先上圖:

6核聽起來可能比較讓人頭大,讓我們先把鍋燒熱,啊呸,先來點感性的認識。上圖可以較好的展示出在開發時工程的架構,對於每個核心n,都有一個core(n)_main函數和c文件與之對應,所以操作起來,和普通的單核ECU沒啥區別【此句不嚴謹】

 

 

2. Why 爲什麼6個核心能找到與自己對應的那個main函數

看一下核心是怎麼啓動的,問題就解決了一半

圖:

 上圖較好的描述了ECU的啓動過程,每次上電之後,ECU都會首先運行廠家預留在ROM中的程序,之後根據圖中的Reset vector跳轉到啓動函數(startup function),啓動函數在完成一系列初始化功能後會引導程序指針到c語言的入口,也就是我們熟悉的main函數。

 

咱們接着看啓動函數(startup function)長啥樣:

見上圖,左側的6個c文件裏就分別包含着6個核心的啓動函數。再看看右邊啓動函數裏面到底是啥,臥槽破案了,這不就是上面的那個core(n)_main函數嗎,啓動函數在初始化好核心的其他資源後,在最後一行跳轉到了自己的main函數。

 

------------------------分割線,(不想加寬油的同學可以不加。我這說的都是啥??)趕時間的同學可以直接跳到第3節-----------------

湊近看一眼 Ifx_Ssw_jumpToFunction 這個函數:

你會發現它其實是一個封裝好了的彙編指令,其實這也很好理解,之前c語言環境還沒有配置好,當然這裏用的大都是彙編了,這也是爲什麼啓動函數往往叫 c startup函數的原因。

 

看到這裏你可能仍然會有疑惑,爲什麼就是core3的啓動函數,編譯器怎知道的?

good question,看圖:

從上圖可見,同樣是在 Tc3這個c文件裏。我們可以看到其實是由_START3()跳轉過去的,而_START3()的地址,在linker file(鏈接文件)裏面已經是固定好了的。詳見下圖:

 

再挖深一點,如果你去編譯完成的.map文件裏面,可以看到函數地址確實如linker file裏面所定義的那樣:

 

如上圖所示,_START對應的是0xa0000000這個地址,這時候我們再去芯片手冊裏瞄一眼:

6個_START啓動函數和6個核心的Program Flash一一對應 , that's it.

 

 

3. 6個核心的主從問題

雖然6個核心可以自由開閉,但顯然在某一個時間點上至少需要有一個核心在運行。在官方提供的startup函數裏面【絕大部分情況你都不會需要去改官方的startup函數,最多調一下flag】,只有core0是默認開啓的,從這個角度上來講,core0是主核心。

詳見下圖:

在Tc0.c這個文件的最後一行可以看出,startup是一定會跳轉到__Core0_start也是就core0_main的啓動函數裏面。在上圖這個例子裏面,我設置啓動了所有的6個核心,所以Ifx_Ssw_startCore()在這會去啓動_START1,而之後1又會去啓動core2,依次類推。目前看來這樣的好處是可以確保核心按照0,1,2,3,4,5的順序依次啓動,不會發生隨機性。

 

值得提到的一點是,在Tasking的aurix-multi-core-tricore-programming-essentials文檔中,提到各個startup函數會通過一個系統變量來等待對方,實現各個核心同步/同時啓動的效果,但是在2019年03月及以後英飛凌官方發佈的iLLD底層驅動裏面,我發現這個變量已經不再被使用了【也沒有看到替代品】,目前(05/24/2019)還沒有看到Tasking/英飛凌有發佈相應的解釋。

 

在最後,針對ROM再囉嗦一句,

 當產品量產,你需要自己寫BootLoader時,就需要接着和廠商預留在ROM裏的函數打交道了。比如上圖中 Flash API就提供了擦寫Flash的功能,而IQ math則是TI提供的針對浮點運算的工具包。

看到這裏的你,鍋燒熱了嗎:P

 

 Reference:

1.  AURIXTC3XX_um_part1_V1.1.0.pdf

2. TC39XB_um_appx_V1.1.0.pdf

3. aurix-multi-core-tricore-programming-essentials.pdf

4. ctc_user_guide.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章