1 引言
近年來,越來越多的公司采用AUTOSAR工具鏈進行車載ECU軟件開發(fā),這對采用傳統(tǒng)手寫代碼方式設(shè)計程序的工程師而言是個不小的挑戰(zhàn),主要體現(xiàn)在以下3個方面。
(1)AUTOSAR規(guī)范涉及到很多全新的概念,像RTE、SWC、BswM這些概念,很多手寫代碼多年的老工程師也是不懂的。
(2)C語言編程和使用工具鏈配置的方式進行軟件設(shè)計,在思路上存在不小的差異,在開發(fā)方式切換的過程中可能感到諸多不適應(yīng)。
(3)雖然AUTOSAR規(guī)范也是用C語言實現(xiàn)的且源程序可見,但由于模塊繁多且每個功能塊所含的代碼量過于龐大,短期內(nèi)很難再用“把每行代碼搞清楚”的方式保證程序質(zhì)量,而且在程序執(zhí)行異常時由于對代碼不熟悉,即使是有著多年C編程經(jīng)驗的老工程師,也可能會有“問題查找無從下手”的感覺。
針對以上問題,我想從傳統(tǒng)的手工編程入手,逐一介紹AUTOSAR的基本概念和使用工具鏈開發(fā)的思路方法,希望對從手寫代碼切換至工具鏈開發(fā)的車載嵌入式軟件工程師有一點點幫助。
由于我學習使用AUTOSAR工具鏈的時間不長,很多概念和方法屬于“現(xiàn)學現(xiàn)賣”的階段,又在文中加入了不少自己的理解和感悟,其中的錯誤在所難免,懇請廣大同行們批評指正,共同進步。
2 控制實例
在本文中,我們以應(yīng)用在某重卡主駕座椅上的“ECAS控制器”為例,說明RTE的實現(xiàn)過程。該控制器的核心功能是“將座椅高度始終保持在設(shè)定位置上”,通過控制進氣閥和排氣閥的開閉調(diào)節(jié)空氣彈簧的充氣量,從而實現(xiàn)加載在座椅的重量發(fā)生變化時(不坐人或坐不同重量的人)其高度始終不變。表2-1為與之相關(guān)的主要部件及其功用。
表2-1: 座椅ECAS控制器相關(guān)主要部件及其功用
序號 | 部件名稱 | 功用 |
1 | 高度傳感器 | 實時采集座椅當前高度 |
2 | 進氣閥和排氣閥 | (1)進氣閥打開,排氣閥關(guān)閉:空氣彈簧充氣,座椅高度上升 (2)進氣閥關(guān)閉,排氣閥打開:空氣彈簧放氣,座椅高度下降 (3)進氣閥和排氣閥都關(guān)閉:空氣彈簧無動作,座椅高度不變 (4)進氣閥和排氣閥都打開:錯誤狀態(tài) |
3 基本概念
為表述方便,首先對本文中出現(xiàn)的概念或術(shù)語進行說明,文中黑體字為“官方定義”,紅體字加入了本人的理解。
注:由于AUTOSAR規(guī)范本身非本文討論的范疇,其中的通用知識(如:分層架構(gòu)、ARXML文件等)文中不再涉及,讀者可參照各類資料學習掌握。
3.1 車載嵌入式軟件概念
(1)基礎(chǔ)軟件:包括微控制器驅(qū)動、外圍芯片驅(qū)動、嵌入式操作系統(tǒng)、軟件整體架構(gòu)和集成等,部分公司稱其為“驅(qū)動和架構(gòu)”。
(2)應(yīng)用層軟件:主要涉及到特定ECU的控制邏輯和算法等,部分公司稱其為“算法和邏輯”。
大多數(shù)車載ECU軟件的核心由輸入、處理和輸出3部分組成,基礎(chǔ)軟件主要負責“輸入和輸出”部分,應(yīng)用層軟件專注于“處理”部分。
3.2 AUTOSAR規(guī)范概念
(1)RTE:運行時環(huán)境。作為應(yīng)用軟件層與基礎(chǔ)軟件層交互的橋梁,為軟硬件分離提供了可能??梢詫崿F(xiàn)軟件組件間、基礎(chǔ)軟件間以及軟件組件與基礎(chǔ)軟件之間的通信。RTE封裝了基礎(chǔ)軟件層的通信和服務(wù),為應(yīng)用層組件提供了標準化的基礎(chǔ)軟件和通信接口,使得應(yīng)用層可以通過RTE接口函數(shù)調(diào)用基礎(chǔ)軟件的服務(wù)。 此外,RTE抽象了ECU之間的通信,即RTE通過使用標準化的接口將其統(tǒng)一為軟件組件之間的通信。
舉例來說,如果要設(shè)計“座椅ECAS控制器”的軟件,程序首先要獲取座椅的當前高度和目標高度,通過一系列算法處理(如PID算法),計算出當前時刻氣囊進氣口和出氣口的狀態(tài),最后控制電磁閥進行座椅高度調(diào)節(jié)。這里面“采集座椅當前高度”由ADC模塊完成,“控制空氣彈簧進氣口和出氣口的電磁閥”由DO模塊完成,這兩者是基礎(chǔ)軟件的工作;“通過算法得到空氣彈簧進氣口和出氣口的狀態(tài)”由應(yīng)用層軟件完成。而“將基礎(chǔ)軟件采集到的高度傳遞給應(yīng)用層”和“將應(yīng)用層的電磁閥控制指令傳遞給基礎(chǔ)軟件層”,就是RTE的任務(wù)了。
(2)SWC:軟件組件。封裝了部分或全部汽車電子功能的模塊,包括了其具體的功能實現(xiàn)以及對應(yīng)的描述。
軟件組件可以理解為“一系列程序文件(函數(shù))的集合”。
(3)Port:端口。根據(jù)輸入輸出方向可分為需型端口(Require Port,RPort,用于從其它軟件組件獲得所需數(shù)據(jù)或者所請求的操作)、供型端口(Provide Port,PPort,用于對外提供某種數(shù)據(jù)或者某類操作)與供需端口(Provide and Require Port,PRPort,兼有需型端口與供型端口的特性)。
AUTOSAR規(guī)范中的“端口”相當于C語言中的“變量”,它的“變量類型”就是下面要介紹的“端口接口”。
(4)Interface:端口接口。由于端口僅僅定義了方向,AUTOSAR中用端口接口(Port Interface)來表征端口的屬性,常用端口接口包括如下兩種類型:
①發(fā)送者-接收者接口(Sender-Receiver Interface, S/R),用于數(shù)據(jù)的傳遞關(guān)系;
②客戶端-服務(wù)器接口(Client-Server Interface, C/S) ,用于操作(Operation,OP),即函數(shù)調(diào)用關(guān)系。
對于引用“發(fā)送者-接收者”接口的一組端口而言,需型端口為接收者,供型端口為發(fā)送者;對于引用“客戶端-服務(wù)器”接口的一組端口而言,需型端口為客戶端,供型端口為服務(wù)器。
AUTOSAR規(guī)范中的“端口接口”相當于C語言中的“結(jié)構(gòu)數(shù)據(jù)類型”,每個接口由一個或多個“數(shù)據(jù)元素”組成,相當于結(jié)構(gòu)體的成員。但和數(shù)據(jù)類型不同的是,除了其包含的每個數(shù)據(jù)元素分別有一個數(shù)據(jù)類型之外,每個接口還有一個自己的類型,“S/R”類型表示數(shù)據(jù)傳遞,相當于C語言中的“b = a”;“C/S”類型表示函數(shù)調(diào)用,相當于C語言中的“b = func(a)”。
3.3 信號
(1)系統(tǒng)信號:車載CAN網(wǎng)絡(luò)信號,即某ECU從CAN網(wǎng)絡(luò)接收和向CAN網(wǎng)絡(luò)發(fā)送的信號。
(2)內(nèi)部信號:不同SWC間交互的信號。
4 手寫代碼實現(xiàn)方法
這里所說的“手寫代碼”是指車載ECU程序的基礎(chǔ)軟件部分,應(yīng)用層軟件使用simulink等工具建模完成,下面以“座椅ECAS控制器”程序為例,介紹基礎(chǔ)軟件與應(yīng)用層軟件的“RTE”部分如何用手工編程的方式實現(xiàn)。
4.1 參數(shù)接口
首先需要明確基礎(chǔ)軟件與應(yīng)用層軟件的參數(shù)接口,如表4-1所列。
表4-1: 座椅ECAS控制器基礎(chǔ)軟件與應(yīng)用層軟件的參數(shù)接口
信號類型 | 信號名稱 | 精度 | 存儲類型 | 數(shù)據(jù)范圍 | 數(shù)據(jù)說明 |
輸入信號 | objectLevel | 0.1mm | uint16 | 0-200(mm) | 座椅目標高度,當數(shù)據(jù)為0時,表示該值無意義,或者程序處在初始化階段,或者系統(tǒng)上電后駕駛員沒有更新請求值;處在該值時,應(yīng)用層算法不會進行運算 |
currentLevel | 0.1mm | uint16 | 0-200(mm) | 座椅當前高度,由ADC采集并計算 | |
level_quality | - | uint8 | 0-255 | 質(zhì)量信號 2:一切正常(缺省值),所有源信號合法 6:由于硬件故障導致信號臨時性或永久性非法 8:初始化(初始化起始或從錯誤狀態(tài)恢復),所有源信號合法 | |
precision_upper | 0.1mm | sint16 | 0-100(mm) | 正向精度值 | |
precision_lower | 0.1mm | sint16 | -100-0(mm) | 負向精度值 | |
enable | 0/1 | boolean | 0-1 | 表示當前周期是否使能算法控制,若不使能,則輸入enable=0,以保證算法控制函數(shù)運行的完整性 | |
輸出信號 | Control_status | uint8 | 0-3 | value = 0:進氣閥和排氣閥均關(guān)閉 value = 1:進氣閥開啟,排氣閥關(guān)閉 value = 2:進氣閥開啟,排氣閥關(guān)閉 value = 3:本輪調(diào)節(jié)結(jié)束 | |
is_Control_Over | 0/1 | boolean | 0-1 | 表示當前的控制算法是否已調(diào)節(jié)完畢,并達到了給定的precision精度要求。 |
4.2 函數(shù)接口
表4-2列出了基礎(chǔ)軟件與應(yīng)用層軟件之間的函數(shù)接口。
表4-2: 座椅ECAS控制器基礎(chǔ)軟件與應(yīng)用層軟件的函數(shù)接口
序號 | 函數(shù)名稱 | 調(diào)用方式 |
1 | Controller_initialize | 僅在初始化階段調(diào)用1次 |
2 | Controller_step | 在主程序中以20ms為周期循環(huán)調(diào)用 |
4.3 代碼實現(xiàn)
這里使用2個源文件標識座椅ECAS控制器RTE手寫代碼實現(xiàn)方法,圖4-1和圖4-2分別為logic.c和main.c的代碼截圖。
圖4-1: 邏輯模塊RTE實現(xiàn)手寫代碼截圖
圖4-2: 主模塊RTE實現(xiàn)手寫代碼截圖
5 AUTOSAR工具鏈實現(xiàn)方法
AUTOSAR主流工具鏈大多由德國公司提供,包括Vector、ETAS、EB等,本文以ETAS公司的ISOLAR-AB工具為例講述RTE的開發(fā)步驟,主要涉及到其中的2個子工具。
ISOLAR-A:進行系統(tǒng)級架構(gòu)設(shè)計。
RTA-RTE:進行接口設(shè)計。
AUTOSAR工具鏈中的“架構(gòu)設(shè)計”即應(yīng)用層軟件組件的設(shè)計,可分為自上而下和自下而上2種開發(fā)方式。“自上而下”是指在ISOLAR-A中創(chuàng)建應(yīng)用層SWC及其所包含的端口,再在Simulink中導入該SWC的arxml文件,并在此基礎(chǔ)上進行邏輯和算法開發(fā);“自下而上”是指在Simulink中創(chuàng)建端口、運行實體等SWC元素,再在ISOLAR-A中導入對應(yīng)arxml文件生成SWC。本文采用“自上而下”的開發(fā)方式。
下面介紹如何使用AUTOSAR工具鏈方式實現(xiàn)座椅ECAS控制器的RTE部分。
5.1 工程導入
打開“ISOLAR-AB 4.0.2”環(huán)境,選擇“File -> Import -> Existing Projects into Workspace”,點擊“Next”。
按照圖5-1所示的方法將所用工程導入。
圖5-1: ISOLAR-AB工程導入方法
5.2 軟件組件創(chuàng)建
座椅ECAS控制器需要創(chuàng)建3個軟件組件,如表5-1所列。
表5-1: 座椅ECAS控制器軟件組件
序號 | 軟件組件名稱 | 軟件組件功用 |
1 | Controller_SWC | 控制軟件組件,用于運行座椅高度控制的算法 |
2 | AlgorithmInput_SWC | 算法輸入軟件組件,用于提供座椅高度控制的輸入?yún)?shù) |
3 | AlgorithmActuator_SWC | 算法執(zhí)行軟件組件,用于執(zhí)行進氣閥和排氣閥的開閉動作 |
下面以Controller_SWC為例,介紹軟件組件的創(chuàng)建步驟,其余2個軟件組件的創(chuàng)建與之類似。
5.2.1 文件夾創(chuàng)建
在“...srcASW”路徑下創(chuàng)建“Controller_SWC”文件夾,再在其中創(chuàng)建“src”和“arxml”兩個子文件夾。
5.2.2 為控制軟件組件創(chuàng)建arxml描述文件
在工程名上右鍵“New -> AUTOSAR File”,彈出圖5-3所示的對話框,這里新建一個名為“Controller_SWC.arxml”的描述文件,并同時創(chuàng)建一個名為“Controller_SWC”的AR Package。
圖5-2: arxml描述文件創(chuàng)建啟動
圖5-3: 控制軟件組件arxml描述文件創(chuàng)建界面
5.2.3 創(chuàng)建控制軟件組件
按照圖5-4和圖5-5所示的方法創(chuàng)建控制軟件組件。
圖5-4: 軟件組件創(chuàng)建啟動
圖5-5: 控制軟件組件創(chuàng)建操作示意圖
5.2.4 文件移動
在“...srcBSW”路徑下找到“Controller_SWC.arxml”,并將其剪切到“...srcASWController_SWCarxml”位置。
5.3 接口創(chuàng)建
座椅ECAS控制器需要創(chuàng)建的接口如表5-2所列,下面以“hld_Mw_objectLevel”為例講述S/R接口的設(shè)計步驟,其余接口與之類似。
表5-2: 座椅ECAS控制器需創(chuàng)建的接口
序號 | 接口 | 接口所包含的數(shù)據(jù)元素 | ||
接口名稱 | 接口類型 | 數(shù)據(jù)元素名稱 | 數(shù)據(jù)元素數(shù)據(jù)類型 | |
1 | hld_Mw_objectLevel | S/R | hld_Mw_objectLevel | uint16 |
2 | hld_Mw_currentLevel | S/R | hld_Mw_currentLevel | uint16 |
3 | hld_Mb_level_quality | S/R | hld_Mb_level_quality | uint8 |
4 | hld_Msw_precision_upper | S/R | hld_Msw_precision_upper | sint16 |
5 | hld_Msw_precision_lower | S/R | hld_Msw_precision_lower | sint16 |
6 | hld_Mbl_enable | S/R | hld_Mbl_enable | boolean |
7 | hld_Mb_Control_status | S/R | hld_Mb_Control_status | uint8 |
8 | hld_Mbl_is_Control_Over | S/R | hld_Mbl_is_Control_Over | boolean |
5.3.1 接口創(chuàng)建
按照圖5-6和5-7所示創(chuàng)建接口。
圖5-6: S/R接口創(chuàng)建啟動
圖5-7: 接口創(chuàng)建過程
5.3.2 添加接口的數(shù)據(jù)元素
按照圖5-8和5-9所示添加接口的數(shù)據(jù)元素。
圖5-8: 添加接口數(shù)據(jù)元素
圖5-9: 選擇接口數(shù)據(jù)元素的數(shù)據(jù)類型
5.4 軟件組件行為設(shè)計
下面對表5-1所列3個軟件組件的行為進行設(shè)計,按照如下步驟進行。
5.4.1 創(chuàng)建軟件組件內(nèi)部行為
按照圖5-10所示依次創(chuàng)建Controller_SWC、AlgorithmInput_SWC和AlgorithmActuator_SWC的內(nèi)部行為。
圖5-10: 軟件組件內(nèi)部行為創(chuàng)建
5.4.2 添加軟件組件端口
控制軟件組件、算法輸入軟件組件和算法執(zhí)行軟件組件須添加的端口分別如表5-3、表5-4和表5-5所列。
表5-3: 控制軟件組件端口表
序號 | 端口 | 映射接口 | 說明 | ||
類型 | 名稱 | 類型 | 映射接口名 | ||
1 | RPort | C_RP_Mw_objectLevel | S/R | hld_Mw_objectLevel | 座椅目標高度 |
2 | RPort | C_RP_Mw_currentLevel | S/R | hld_Mw_currentLevel | 座椅當前高度 |
3 | RPort | C_RP_Mb_level_quality | S/R | hld_Mb_level_quality | 質(zhì)量信號 |
4 | RPort | C_RP_Msw_precision_upper | S/R | hld_Msw_precision_upper | 正向精度值 |
5 | RPort | C_RP_Msw_precision_lower | S/R | hld_Msw_precision_lower | 負向精度值 |
6 | RPort | C_RP_Mbl_enable | S/R | hld_Mbl_enable | 算法控制使能標志 |
7 | PPort | C_PP_Mb_Control_status | S/R | hld_Mb_Control_status | 進氣閥和排氣閥狀態(tài) |
8 | PPort | C_PP_Mbl_is_Control_Over | S/R | hld_Mbl_is_Control_Over | 控制算法調(diào)節(jié)完畢標志 |
表5-4:算法輸入軟件組件端口表
序號 | 端口 | 映射接口 | 說明 | ||
類型 | 名稱 | 類型 | 映射接口名 | ||
1 | PPort | I_PP_Mw_objectLevel | S/R | hld_Mw_objectLevel | 座椅目標高度 |
2 | PPort | I_PP_Mw_currentLevel | S/R | hld_Mw_currentLevel | 座椅當前高度 |
3 | PPort | I_PP_Mb_level_quality | S/R | hld_Mb_level_quality | 質(zhì)量信號 |
4 | PPort | I_PP_Msw_precision_upper | S/R | hld_Msw_precision_upper | 正向精度值 |
5 | PPort | I_PP_Msw_precision_lower | S/R | hld_Msw_precision_lower | 負向精度值 |
6 | PPort | I_PP_Mbl_enable | S/R | hld_Mbl_enable | 算法控制使能標志 |
表5-5:算法輸出軟件組件端口表
序號 | 端口 | 映射接口 | 說明 | ||
類型 | 名稱 | 類型 | 映射接口名 | ||
1 | RPort | O_RP_Mb_Control_status | S/R | hld_Mb_Control_status | 進氣閥和排氣閥狀態(tài) |
2 | RPort | O_RP_Mbl_is_Control_Over | S/R | hld_Mbl_is_Control_Over | 控制算法調(diào)節(jié)完畢標志 |
圖5-11為添加軟件組件端口的方法。
圖5-11: 添加軟件組件端口
5.4.3 添加運行實體
運行實體即在SWC中執(zhí)行的函數(shù)??刂栖浖M件、算法輸入軟件組件和算法執(zhí)行軟件組件須添加的運行實體分別如表5-6、表5-7和表5-8所列。
表5-6: 控制軟件組件運行實體
序號 | 運行實體名 | 函數(shù)名 | 功用 |
1 | Controller_initialize | Controller_initialize | 控制模塊初始化 |
2 | Controller_step | Controller_step | 控制模塊執(zhí)行步驟 |
表5-7:算法輸入軟件組件運行實體
序號 | 運行實體名 | 函數(shù)名 | 功用 |
1 | AlgorithmInput | AlgorithmInput | 控制模塊輸入?yún)?shù)確定和傳遞 |
表5-8:算法執(zhí)行軟件組件運行實體
序號 | 運行實體名 | 函數(shù)名 | 功用 |
1 | AlgorithmOutput | AlgorithmOutput | 控制模塊輸出參數(shù)接收和執(zhí)行 |
圖5-12為添加運行實體的方法。
圖5-12: 添加軟件組件運行實體
5.4.4 添加運行實體與所屬軟件組件的端口訪問
本步的目的是添加與SWC中每個運行實體相關(guān)的端口,可以簡單的理解為添加某個函數(shù)(即運行實體)需要用到的變量(即端口)。這里將控制軟件組件、算法輸入軟件組件和算法執(zhí)行軟件組件中的全部端口分別添加到Controller_step、AlgorithmInput和AlgorithmOutput運行實體中。
圖5-13為添加運行實體與所屬軟件組件端口訪問的方法。
圖5-13: 添加運行實體與所屬軟件組件的端口訪問
5.4.5 添加運行實體的RTE事件
將Controller_step、AlgorithmInput和AlgorithmOutput運行實體均配置為“周期性事件”,周期0.02s。
圖5-14: 添加運行實體的RTE事件
5.5 軟件組件添加
前面創(chuàng)建了3個軟件組件及其內(nèi)部行為,這里將這些SWC與座椅控制器相關(guān)聯(lián)。
5.5.1 將軟件組件加入部件
如果把軟件組件比作程序的“積木”,“部件”就相當于“積木箱”,圖5-15和圖5-16為將SWC加入部件的步驟。
圖5-15: 軟件組件加入部件操作啟動
圖5-16: 軟件組件加入部件操作
5.5.2 將軟件組件映射到座椅控制器
將前面創(chuàng)建的3個SWC映射到座椅ECAS控制器軟件中,如圖5-17所示。
圖5-17: 軟件組件向ECU映射
5.6 信號連接
由于座椅ECAS控制器僅涉及到3個SWC間信號的傳遞,故只需要連接“內(nèi)部信號”即可,如圖5-18和圖5-19所示。
圖5-18: 內(nèi)部信號連接啟動
圖5-19: 座椅ECAS系統(tǒng)連接的內(nèi)部信號
5.7 運行實體調(diào)度
將AlgorithmInput、Controller_step和AlgorithmOutput添加到操作系統(tǒng)20ms周期性執(zhí)行的任務(wù)中,注意次序不要弄反。
5.8 代碼生成
接下來就是生成代碼了,分為軟件組件抽取、RTE代碼生成和SWC代碼生成3個步驟。
5.8.1 軟件組件抽取
“抽取”的含義就是將屬于座椅ECAS控制器軟件的3個SWC拿過來用,如圖5-20所示(上節(jié)的運行實體調(diào)度操作應(yīng)在抽取之后完成)。
圖5-20: 軟件組件抽取操作
5.8.2 RTE代碼生成
如圖5-21所示。
圖5-21: RTE代碼生成操作
5.8.3 SWC代碼生成
座椅ECAS控制器軟件僅需按照圖5-22和圖5-23所示生成算法輸入軟件組件和算法執(zhí)行軟件組件的代碼,控制軟件組件在simulink環(huán)境下建模完成,只需提交Controller_SWC.arxml給應(yīng)用層就可以了。
圖5-22: SWC代碼生成啟動
圖5-23: SWC代碼生成操作
5.9 代碼添加
最后我們看看用AUTOSAR工具鏈自動生成的代碼是什么樣子的,圖5-24和圖5-25分別為算法輸入軟件組件和算法執(zhí)行軟件組件的代碼截圖。
圖5-24: 算法輸入軟件組件代碼截圖
圖5-25: 算法執(zhí)行軟件組件代碼截圖
5.10 事項說明
下面針對一些未明確事項進行說明。
5.10.1 系統(tǒng)信號連接
座椅ECAS控制器軟件沒有涉及到系統(tǒng)信號,但對于大部分車載ECU來說,與車載CAN網(wǎng)絡(luò)的交互(從CAN網(wǎng)絡(luò)接收數(shù)據(jù)和向CAN網(wǎng)絡(luò)發(fā)送數(shù)據(jù))是必不可少的,此時可參照圖5-26的方法進行系統(tǒng)信號連接。
圖5-26: 系統(tǒng)信號連接啟動
5.10.2 控制軟件組件初始化函數(shù)調(diào)用
細心的讀者可能會注意到,在工具鏈實現(xiàn)RTE的過程中,并沒有涉及算法模塊初始化函數(shù)Controller_initialize的調(diào)用。因為這涉及到AUTOSAR的一個重要的BSW模塊 - EcuM的使用,我們留待下篇再講,可以期待一下。
6 結(jié)論
綜上可以看出,單就RTE實現(xiàn)而言,AUTOSAR工具鏈方式要比傳統(tǒng)手工編程方式復雜,但也體現(xiàn)出了如下優(yōu)點:軟件組件獨立,功能劃分明確;使用標準化接口設(shè)計運行時環(huán)境,模塊獨立開發(fā)便于項目組成員協(xié)同工作。特別是在大型車載ECU軟件中,使用AUTOSAR工具鏈方式可以極大的保證軟件質(zhì)量、縮短開發(fā)周期。
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
112文章
16361瀏覽量
178071 -
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136841 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
362瀏覽量
21588 -
ecu
+關(guān)注
關(guān)注
14文章
886瀏覽量
54504
原文標題:AutoSAR之實時環(huán)境RTE
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論