TC3XX 多核ECU的中斷向量表解疑
關於多核ECU的中斷向量表,熱心網友問了一個很好的問題
今天研究了一下,先說結論: 每個core都有自己單獨的memory去儲存自己的中斷向量表,而且每個core的中斷優先順序是相互獨立的。也就是說,每個core都可以有自己的priority為20的中斷
接下來是論證過程:【趕時間的同學可以直接拉到最後看杰倫】
1. 以Tasking編譯器為例,安裝目錄下自帶了關於 中斷向量表的 linker 檔案 【TC3XX 系列最多有6個core,所以為每個core都預留了一個linker檔案】
2. 開啟這些lsl檔案,可以看見每個core的 中斷向量表是以 INTTAB0, INTTAB1等為起始地址的
core0: 【紅框中的001,002,003代表中斷優先順序】
core1:
而這個 INTTAB0,INTTAB1等 在 相應的TC3XX.lsl 裡面定義,在
如果你花點時間去查 infineon的TC3xx的datasheet,每個CORE_n的中斷向量表的起始地址是通過暫存器BTV_n定義的。Tasking在startup 函式裡面把“0xa00f0000”賦值給了BIV,從而和上面linker 檔案的定義匹配上了,說白了就是tasking的人幫我們都寫好了,我們買編譯器花的錢一部分就是買這個
3. 然後去查Tasking編譯器的手冊,它會告訴你在TC3xx 系列,寫interrupt函式的時候要同時宣告 core和中斷優先順序,這樣編譯器才能根據 2 裡面提到的 lsl檔案 將它放到正確的位置
https://www.tasking.com/support/tricore/ctc_user_guide_v6.2r2.pdf
總結:
1. 多核ECU,每個core都有自己的BIV暫存器,用來定義該核的中斷向量表起始地址。 每個core的中斷優先順序相互獨立,可以相同
2. 在main函式之前的startup函式裡面會對BIV暫存器進行初始化,即自定義各核的中斷向量表起始地址
3. 在編寫c的interrupt函式時,編譯器規定要同時宣告core和priority
4. linker檔案會根據宣告的core和priority,將函式存放到正確的地址,從而中斷髮生時,PC指標會跳轉到正確的位置
5. 因為BIV同時在linker和startup函式裡面用到,所以如果使用者需要修改,兩處要匹配。目前我們用的linker和startup函式都是Tasking提供的,所以Tasking已經提前幫我們匹配好了
相關文章
- Docker 系列 - 04 - 解疑 & Docker 指令Docker
- Linux漏洞挖掘:08---系統呼叫劫持之(通過IDT中斷向量表獲取sys_call_table系統呼叫表)Linux
- ECU 自動化生產測試系統
- LINUX中斷--申請中斷和解除安裝中斷Linux
- 痞子衡嵌入式:嵌入式Cortex-M中斷向量表原理及其重定向方法
- 表單驗證:判斷所有radio組都已選中
- CAS之單核/多核理解單核
- 中斷和中斷處理程式
- 中斷
- 資料結構與演算法分析筆記(c++)_抽象資料型別(ADT)、表ADT、STL中的向量和表資料結構演算法筆記C++抽象資料型別
- oracle中判斷欄位是否存在和新增表結構Oracle
- 視覺化學習:利用向量判斷多邊形邊界視覺化
- win10 如何開啟多核_win10cpu怎麼開啟多核執行Win10
- ECU通訊:CAN匯流排模擬測試
- 零基礎學Java需知:Java小白入門解疑大全Java
- WRF WPS多核並行執行並行
- 執行緒的中斷執行緒
- Java中的斷言assertJava
- js函式中的if判斷和a==b判斷JS函式
- 虛擬ECU:基於SkyEye的TRACE32嵌入式除錯除錯
- 虛擬ECU:純電動汽車發展下的新選擇
- iOS GCD入門和GCD對CPU多核的使用iOSGC
- goroutine的多核並行化,讓出時間片Go並行
- 硬中斷,軟中斷,訊號,異常
- 機器學習中的矩陣向量求導(四) 矩陣向量求導鏈式法則機器學習矩陣求導
- x86架構中的外部中斷結構-Part 1:中斷控制器的演化架構
- 學習SVM(四) 理解SVM中的支援向量(Support Vector)
- CPU單核多核區別【轉載】單核
- 多核和多執行緒那些事執行緒
- MySQL判斷表名是否存在MySql
- postgresql如何判斷表是否存在SQL
- 人腦的「中斷機制」
- Java執行緒的中斷Java執行緒
- js中的型別判斷JS型別
- 中斷的學習筆記筆記
- 談談對中斷的理解
- 執行緒中斷以及執行緒中斷引發的那些問題執行緒
- 虛擬ECU:汽車空調壓縮機控制系統