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