以前上手單片機都是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一一對應 , thats 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

推薦閱讀:

相關文章