一、項目介紹
隨著小米宣布造車,當下“軟件定義汽車”的趨勢如火如荼,autosar的全稱Automotive Open System Architecture,即汽車開放軟件架構,這正如TCP/IP對網絡進行統一,autosar是對汽車軟件技術的統一,TCP/IP制定的初衷是為統一網絡標準從而誕生了今天的互聯網,而AUTOSAR的制定是為實現汽車電子軟件的統一從而實現汽車電子軟件的復用。本項目是基于autosar3.1的開源代碼arctic core,在此基礎上,完成在n32g45x上的mcal驅動,適配RT-Thread內核為autosar的操作系統。
目前已完成mcal的mcu驅動,autosar的osek操作系統已經能在n32g45x上正常調度,移植rtthread到arctic core,但是在適配OSEK/VDX的接口過程中,發現這個適配工作不是一兩個月所能完成,因為osek/vdx的標準非常嚴格,如果對OSEK/VDX感興趣的小伙伴可以一起加入rtthread對osek/vdx的適配。
二、簡述AUTOSAR及OSEK/VDX
2.1 AUTOSAR的分層模型及各層簡述
AUTOSAR從上往下分為應用層、RTE層和基礎軟件層(BSW)。
應用層由多個軟件組件SWC組成,每個SWC是具有一定功能的模塊,如汽車發動機控制邏輯,這些模塊可以由matlab的autosar軟件包依據模型進行設計;RTE全稱Runtime Environment,即運行時環境,它的內部是一條autosar框架定義的虛擬功能總線(VFB),SWC、BSW通過這條虛擬功能總線進行通信。
BSW從上到下分為服務層、ECU抽象層、MCU抽象層,分層的目的是為了實現各層的復用和對下一層的隔離,這正如RT-Thread的分層思想那樣,RT-Thread可以適配不同的MCU就是因為采用了驅動和設備分離的策略,RT-Thread的同一個設備因為注冊了不同的驅動就可以驅動不同的MCU。在AUTOSAR中,和MCU有關的一層是MCU抽象層,及MCAL,用RTT的驅動和設備分離的思想來理解autosar的mcal就是同一個ECU抽象層因為注冊了不同的MCU驅動就可以驅動不同的MCU。在autosar的成員中就有nxp這樣的芯片原廠提供autosar的mcal。
2.2 簡述OSEK/VDX接口api
在autosar的服務層中有一個符合OSEK/VDX標準的操作系統,負責內存管理、對各個功能的調度,api分為任務管理、中斷處理、事件機制、資源管理、報警器。
2.2.1 任務管理api
1 StatusTypeActivateTask(TaskType)
2 將任務號為TaskID的任務由掛起態變為就緒態。
3 StatusTypeTerminateTask(void)
4 將任務由就緒態轉為掛起態。
5 StatusTypeChainTask(TaskType)
6 將當前任務由就緒轉為掛起,并將TaskID的任務由掛起轉為就緒,相當于TerminateTask和ActivateTask的連用。
7 StatusTypeSchedule(void)
8 執行一次調度。
9
2.2.2 事件api
1 StatusTypeSetEvent(TaskTypeEventMaskType)
2 設置一個事件位,當執行SetEvent后等待該事件位的任務可以由等待態變為就緒態。
3 StatusTypeClearEvent(EventMaskType)
4 清楚事件位
5 StatusTypeGetEvent(TaskTypeEventMaskRefType)
6 返回TaskID任務的所有事件位
7 StatusTypeWaitEvent(EventMaskType)
8 等待事件位,等待事件位的任務由就緒態轉為等待態。
9
2.2.3 報警器(鬧鐘)api
1 StatusTypeGetAlarmBase(AlarmType,AlarmBaseRefType)
2 獲取報警器的時基
3 StatusTypeGetAlarm(AlarmTypeTickRefType)
4 獲取鬧鐘當前的tick
5 StatusTypeSetRelAlarm(AlarmType,TickType,TickType)
6 設置相對鬧鐘
7 StatusTypeSetAbsAlarm(AlarmType,TickType,
8 TickType)
9 設置絕對鬧鐘
10 StatusTypeCancelAlarm(AlarmType)
11 取消鬧鐘
12
三、AUTOSAR開源代碼arctic core軟件框架和分析
3.1 相關資源鏈接
arctic core官網:
http://dev.arccore.com/public/user-doc/UD441x/Arctic-Core-4.0_9503291.html
arctic core源碼獲取 :
http://my.arccore.com/hg
源碼構建說明:
http://dev.arccore.com/public/userdoc/UD441x/Makesystem_23789620.html
3.2 軟件框架說明
在arch文件夾中的文件為MCU內核架構相關的文件,如cortex-m3,主要內容為M3的啟動文件(見M3編程指南),MCU的固件庫。
在boards文件夾中的文件為各個MCU的實現,包括對板子的配置。
system文件夾中包含了一個OSEK/VDX標準的操作系統。
四、在N32G45X上完成AUTOSAR的MCAL
以MCU驅動的時鐘設置為例,static void SetClocks(Mcu_ClockSettingConfigType *clockSettingsPtr)是autosar的mcal定義的一個接口,用于設置MCU的時鐘,在n32g45x的實現如下:
寫好mcal的mcu后編譯成可執行文件下載到板子上,AUTOSAR能夠在n32g45x上正常運行,可以看到三個任務塊在調度。下載工具用的是pyocd。
五、RT-THREAD的移植
由于源碼采用的構建工具是makefile,所以需要將rtthread的源碼和頭文件路徑添加到makefile文件。編譯下載到板子上可以看到rtthread正常運行。
六、倉庫地址
由于arctic core沒有github,不能采用fork的方式協作開發,我的代碼上傳到gitee提示版權風險無法轉為公開的倉庫,對源碼感興趣的小伙伴可以在下方留下gitee賬號或發郵件給我369247354@qq.com,我拉你到項目組。源碼從附件下載:
n32g45x_arctic_core.zip
七、項目視頻
https://www.bilibili.com/video/BV1Ma411b7kD/
八、總結和展望
本次移植過程中,mcal的移植較為輕松,適配n32g45x的寄存器花了不少時間,需要查看n32g45x的參考手冊的寄存器定義一個一個的去改。移植rtthread到arctic core的源碼比較簡單,只是添加rtt的源碼到arctic core的makefile。遺憾的是還沒完成rtt適配OSEK/VDX的接口,希望對OSEK/VDX感興趣的小伙伴加入進來,一起完成rtt對OESK/VDX的適配。
來源:RTThread物聯網操作系統
-
AUTOSAR
+關注
關注
10文章
363瀏覽量
21778
發布評論請先 登錄
相關推薦
評論