国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

多核系統(tǒng)中RTE模塊代碼生成的方法

2020-02-04 02:03何曉明耿海強(qiáng)劉碩李峰劉羽
電子技術(shù)與軟件工程 2020年20期
關(guān)鍵詞:代碼生成端口組件

何曉明 耿海強(qiáng) 劉碩 李峰 劉羽

(濰柴動(dòng)力股份有限公司 山東省濰坊市 261061)

RTE 是AUTOSAR 中的核心模塊。在AUTOSAR 架構(gòu)的項(xiàng)目中,一般包括多個(gè)軟件組件。每個(gè)軟件組件都有多個(gè)組件端口,這些端口在軟件組件對(duì)應(yīng)的ARXML 文件中都有描述。RTE 可通過這些組件端口實(shí)現(xiàn)組件之間的通信機(jī)制。組件端口對(duì)應(yīng)的連接關(guān)系在軟件組合對(duì)應(yīng)的ARXML 文件中體現(xiàn)。通過從ARXML 文件中提取相關(guān)信息,可以生成RTE 模塊的代碼。本文描述了從ARXML 文件到RTE 模塊代碼生成的方法。

1 輸入文件描述

本文中涉及到的應(yīng)用軟件組件是由MATLAB 中的Simulink 模型實(shí)現(xiàn)的,基礎(chǔ)軟件部分是由C 代碼實(shí)現(xiàn)。操作系統(tǒng)是由配置工具生成。生成RTE 模塊代碼需要的輸入文件有:

(1)模型對(duì)應(yīng)生成的ARXML 文件,如Model1.arxml、Model2.arxml 等。

(2)描述基礎(chǔ)軟件接口的ARXML 文件,這些接口用于與模型之間的交互,可以由配置工具生成,如BSW1.arxml、BSW2.arxml。

(3)描述調(diào)度任務(wù)的ARXML 文件,可從操作系統(tǒng)的配置工具中獲取,如os.arxml。

(4)任務(wù)調(diào)度列表,描述Runnable 調(diào)度的周期、調(diào)度的位置等信息。

AUTOSAR 架構(gòu)圖如圖1所示。

2 信息提取

在生成RTE 模塊的代碼之前,需要首先獲取相應(yīng)的輸入信息,例如軟件組合描述、組件端口及連接關(guān)系描述、Runnable 優(yōu)先級(jí)等。

2.1 軟件組合描述

Composition.arxml 是軟件組合的描述文件,它描述了軟件組件之間端口的連接關(guān)系。從模型生成的ARXML 和描述基礎(chǔ)軟件接口的ARXML 中讀取發(fā)送端口PPort 和接收端口RPort 的信息,然后將端口名稱后綴相同的端口連接到一起,例如將模型Model1中的PPort 端口psr_Test1 和模型Model2 中的RPort 端口rsr_Test1連接到一起,并將這個(gè)連接關(guān)系按照ARXML 文件的格式生成到Composition.arxml 文件中,生成完的文件如圖2所示。

2.2 Runnable相關(guān)信息提取

從模型生成的ARXML 中獲取每個(gè)Runnable 中使用的組件端口的信息。從描述調(diào)度任務(wù)的ARXML 文件中讀取每個(gè)任務(wù)調(diào)度對(duì)應(yīng)的優(yōu)先級(jí)和調(diào)度的核,然后結(jié)合任務(wù)調(diào)度列表,提取出每個(gè)Runnable 對(duì)應(yīng)的優(yōu)先級(jí)和運(yùn)行的核。從而可以得出每個(gè)Runnble 中使用的組件端口的優(yōu)先級(jí)和運(yùn)行的核。

2.3 組件端口分類

一般常用的組件端口有Send-Receive 類型和Client-Server 類型。從模型生成的ARXML 和描述基礎(chǔ)軟件接口的ARXML 中讀取所有的組件端口的信息并按照這兩種類型分類存放。

根據(jù)通信類型的不同,RTE 最多可以支持1:n、n:1 和1:1 三種模式。按照不同的模式,從Composition.arxml 文件中讀取所有組件端口的連接關(guān)系并按照1:1、1:n、n:1 三種關(guān)系分類存放。

圖1:AUTOSAR 架構(gòu)圖

3 代碼生成

3.1 1:1連接關(guān)系的代碼生成

1:1 連接關(guān)系是指有一個(gè)發(fā)送端口PPort 和一個(gè)接收端口RPort的連接關(guān)系。這種連接關(guān)系的代碼生成相對(duì)來說比較簡(jiǎn)單。首先需要判斷PPort 和RPort 在Runnable 中是否都有使用,如果是,則需要將兩個(gè)組件端口對(duì)應(yīng)的函數(shù)定義都生成,如果不是,則只生成用到的組件端口的定義即可。

組件端口對(duì)應(yīng)的函數(shù)定義根據(jù)所運(yùn)行的核、類型、傳遞數(shù)據(jù)類型的維數(shù)的不同而不同。根據(jù)這些屬性的不同,可以分為如下幾種情況,在以下描述中以Model1 中Runnable 使用的發(fā)送端口psr_Test1 和Model2 中Runnable 使用的接收端口rsr_Test1 為例。

(1)如果PPort 和RPort 在Runnable 中都有使用,并且運(yùn)行的核是相同的,Port 口的類型為Send-Receive 類型,傳遞數(shù)據(jù)類型的維數(shù)為1,那么生成的函數(shù)定義如下:

Model1 中Runnable 使用的發(fā)送端口psr_Test1 生成的函數(shù)定義會(huì)生成到Rte_Model1.h 文件中,定義為一個(gè)Rte_Write_ rsr_Test1_Test1 的宏函數(shù),在這個(gè)宏函數(shù)中寫RTE 中間變量的值。Model2 中Runnable 使用的接收端口rsr_Test1 生成的函數(shù)定義會(huì)生成到Rte_Model2.h 文件中,定義為Rte_Read_rsr_Test1_Test1 的宏函數(shù),在這個(gè)宏函數(shù)中讀RTE 中間變量的值。其中生成的RTE 中間變量會(huì)放到運(yùn)行的核對(duì)應(yīng)的RAM 區(qū)中。

(2)如果PPort 和RPort 在Runnable 中都有使用,并且運(yùn)行的核是相同的,Port 口的類型為Send-Receive 類型,傳遞數(shù)據(jù)類型的維數(shù)為多維,那么生成的函數(shù)定義如下:

圖2:軟件組合

Model1 中Runnable 使用的發(fā)送端口psr_Test1 生成的函數(shù)定義會(huì)生成到Rte_Model1.h 文件中,定義為一個(gè)Rte_Write_psr_Test1_Test1 的宏函數(shù),這個(gè)宏函數(shù)指向函數(shù)Rte_Write_Model1_psr_Test1_Test1 的定義;Model2 中Runnable 使用的接收端口rsr_Test1 生成的函數(shù)定義會(huì)生成到Rte_Model2.h 文件中,定義為Rte_Read_rsr_Test1_Test1 的宏函數(shù),這個(gè)宏函數(shù)指向函數(shù)Rte_Read_Model1_psr_Test1_Test1 的定義。函數(shù)Rte_Write_Model1_psr_Test1_Test1(data)和Rte_Read_Model1_psr_Test1_Test1(data)的定義會(huì)在Rte.c 中生成。在這兩個(gè)函數(shù)中分別實(shí)現(xiàn)RTE 中間變量數(shù)組的讀寫。其中生成的RTE 中間變量數(shù)組會(huì)放到運(yùn)行的核對(duì)應(yīng)的RAM 區(qū)中。

(3)如果PPort 和RPort 在Runnable 中都有使用,并且運(yùn)行的核是不同的,組件端口的類型為Send-Receive 類型,那么生成的函數(shù)定義跟情形2)中的內(nèi)容類似,其中文件Rte_Model1.h 和Rte_Model2.h 的內(nèi)容是相同的。在文件Rte.c 中生成的函數(shù)Rte_Write_Model1_psr_Test1_Test1(data)和Rte_Read_Model1_psr_Test1_Test1(data)的定義分別指向兩個(gè)IOC 的讀寫函數(shù)。如果是1 維的數(shù)據(jù)傳遞,這兩個(gè)IOC 的讀寫函數(shù)在Ioc.h 中實(shí)現(xiàn),分別實(shí)現(xiàn)IOC 中間變量的讀寫。如果是多維的數(shù)據(jù)傳遞,這兩個(gè)IOC 的讀寫函數(shù)在Ioc.c 中實(shí)現(xiàn),分別實(shí)現(xiàn)IOC 中間數(shù)組變量的讀寫。其中生成的IOC 中間變量或數(shù)組一般會(huì)放在共用RAM 中。

(4)如果PPort 或RPort 只有一個(gè)在Runnable 中有使用,那么根據(jù)上述情形1)、2)、3),只生成使用的端口定義即可。如果兩個(gè)端口都未使用,則不需要生成定義函數(shù)。

(5)如果為Client-Server 類型的組件端口交互,且RPort 在Runnable 中有使用,則需要在Rte_Model2.h 中生成Rte_Read_rsr_Test1_Test1 的宏函數(shù),這個(gè)宏函數(shù)指向函數(shù)Rte_Call_Model1_psr_Test1_Test1 的定義。函數(shù)Rte_Call_Model1_psr_Test1_Test1 的定義會(huì)在Rte.c 中生成,在該函數(shù)中實(shí)現(xiàn)對(duì)Client 端函數(shù)的調(diào)用。

3.2 1:n連接關(guān)系的代碼生成

1:n 連接關(guān)系是指有一個(gè)PPort,多個(gè)RPort 的連接關(guān)系。在生成RTE 代碼的時(shí)候可參考上述3.1 章節(jié)中不同的情形。但是跟1:1的連接關(guān)系代碼生成不同的是,如果PPort 跟RPort 都在一個(gè)核,那么生成一個(gè)Rte 變量。如果PPort 跟RPort,有的在一個(gè)核,有的在不同的核,生成兩個(gè)變量,同核之間的數(shù)據(jù)傳遞用RTE 變量,不同核之間的數(shù)據(jù)傳遞用IOC 變量。如果PPort 跟RPort 都在不同的核,那么生成一個(gè)Rte 變量。RTE 變量放到所在核對(duì)應(yīng)的RAM 中,IOC 變量放在共用RAM 中。

3.3 n:1連接關(guān)系的代碼生成

n:1 連接關(guān)系是指有多個(gè)PPort,一個(gè)RPort 的連接關(guān)系。在生成RTE 代碼的時(shí)候可參考上述3.2 章節(jié)中不同的情形。但是跟1:n的連接關(guān)系代碼生成不同的是,如果PPort 跟RPort 有的在一個(gè)核,有的在不同的核,則生成一個(gè)IOC 變量。

3.4 沒有連接關(guān)系的代碼生成

當(dāng)上述連接關(guān)系的代碼都生成完畢之后,檢查Runnable 用到的組件端口對(duì)應(yīng)的函數(shù)是否還有未定義的。如果有未定義的,那么這個(gè)組件端口是沒有連接關(guān)系的端口,可參照3.1 中的方法完成組件端口對(duì)應(yīng)函數(shù)的定義。

4 結(jié)論

本文按照軟件組件之間端口的連接關(guān)系,分別按照1:1、1:n、n:1和無連接關(guān)系的順序,可以實(shí)時(shí)生成RTE 模塊的源代碼。當(dāng)SWC之間的連接關(guān)系改變時(shí),也可以做到RTE 模塊代碼的快速生成,對(duì)于符合AUTOSAR 架構(gòu)的項(xiàng)目的開發(fā),具有重要的意義。

猜你喜歡
代碼生成端口組件
無人機(jī)智能巡檢在光伏電站組件診斷中的應(yīng)用
新型碎邊剪刀盤組件
Lustre語言可信代碼生成器研究進(jìn)展
U盾外殼組件注塑模具設(shè)計(jì)
端口阻塞與優(yōu)先級(jí)
代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
基于XML的代碼自動(dòng)生成工具
初識(shí)電腦端口
風(fēng)起新一代光伏組件膜層:SSG納米自清潔膜層
8端口IO-Link參考設(shè)計(jì)套件加快開發(fā)速度
庆安县| 樟树市| 涞源县| 株洲市| 新邵县| 古丈县| 蓬莱市| 琼中| 获嘉县| 乌苏市| 绥江县| 德庆县| 白水县| 体育| 棋牌| 天镇县| 阜平县| 桦甸市| 永新县| 湛江市| 会理县| 日喀则市| 阿拉尔市| 江北区| 渑池县| 甘南县| 深州市| 长白| 鄢陵县| 桦甸市| 黑河市| 贞丰县| 乌拉特后旗| 灵丘县| 宣恩县| 阜康市| 星子县| 泸西县| 罗甸县| 越西县| 武鸣县|