因為和你相遇 ,不再迷戀遠方的風景
那藍藍的天空,那悠遠的大地-----2020-0520祝您和愛人幸福
什么是數(shù)據(jù)轉換?
數(shù)據(jù)轉換是Rte在SWC上使用時能夠自動轉換和重新縮放通過外部通信接收的數(shù)據(jù)的能力。
為啥需要數(shù)據(jù)轉換?
AUTOSAR SWC的設計要求有很好的通用性和重用性,能適配不同的項目平臺。為了實現(xiàn)這個目標,重要的是要保證SWC的端口接口兼容性要好,可以集成到到不同的平臺項目中。但是由于DBC中通信信號的定義沒有標準化,主觀性比較強。例如速度這個數(shù)據(jù)元素,你在一個項目總定義其單位為“km/h”,在另外一個項目中你定義速度的單位為“ m / s”
ADT上定義的CompuMethod在生成代碼中沒反應?
應用數(shù)據(jù)類型在代碼中是不體現(xiàn)的,其通過相應的mapping實施數(shù)據(jù)類型去表示,其相應的IDT通過typedef體現(xiàn)在生成的代碼中。
實施數(shù)據(jù)類型中配置了Linear的CompuMethod生成代碼的時候會報錯?
遇到這種問題,最好請教一下,因為你去查找文檔,而Autosar Spec讀起來云里霧里的,真是TM的晦澀,還不如去聽一下歌曲《生僻字》。
AUTOSAR_TPS_SWCT [constr_1158]:Applicable categorys for attribute Implementation-DataType.swDataDefProps.compuMethod. [The definition of the reference ImplementationDataType.swDataDefProps.compuMethod is restricted to a CompuMethod of either category BITFIELD_TEXTTABLE or category TEXT-TABLE.]
這條需求要求實施數(shù)據(jù)類型僅限于BITFIELD_TEXTTABLE類別或TEXT TABLE類別的CompuMethod。如果您在Davinci Developer中的實施數(shù)據(jù)類型中配置了Linear的CompuMethod生成代碼的時候會報錯。
一般,線性Compu Method的轉換適用于外部通信,發(fā)送方對處理的數(shù)據(jù)對象的表示與接收方對處理的數(shù)據(jù)對象的表示不同。通過RTE generator識別到這種不同,自動生成轉換的膠水代碼,這些轉換是對應用層不可見的。如下面的例子:
通過ARXML把這些我們能讀的懂的英語表現(xiàn)成工具能讀的懂語言,如下為上述例子的ARXML描述:
<COMPU-METHOD>
<SHORT-NAME>cm_VoltageAtSender</SHORT-NAME>
<CATEGORY>LINEAR</CATEGORY>
<COMPU-INTERNAL-TO-PHYS>
<COMPU-SCALES>
<COMPU-SCALE>
<COMPU-RATIONAL-COEFFS>
<COMPU-NUMERATOR><V>0</V><V>1</V></COMPU-NUMERATOR>
<COMPU-DENOMINATOR><V>4</V></COMPU-DENOMINATOR>
</COMPU-RATIONAL-COEFFS>
</COMPU-SCALE>
</COMPU-SCALES>
</COMPU-INTERNAL-TO-PHYS>
</COMPU-METHOD>
<COMPU-METHOD>
<SHORT-NAME>cm_VoltageAtReceiver</SHORT-NAME>
<CATEGORY>LINEAR</CATEGORY>
<COMPU-INTERNAL-TO-PHYS>
<COMPU-SCALES>
<COMPU-SCALE>
<COMPU-RATIONAL-COEFFS>
<COMPU-NUMERATOR><V>16</V><V>1</V></COMPU-NUMERATOR>
<COMPU-DENOMINATOR><V>8</V></COMPU-DENOMINATOR>
</COMPU-RATIONAL-COEFFS>
</COMPU-SCALE>
</COMPU-SCALES>
</COMPU-INTERNAL-TO-PHYS>
</COMPU-METHOD>
<COMPU-METHOD>
<SHORT-NAME>cm_VoltageOnNetwork</SHORT-NAME>
<CATEGORY>LINEAR</CATEGORY>
<COMPU-INTERNAL-TO-PHYS>
<COMPU-SCALES>
<COMPU-SCALE>
<COMPU-RATIONAL-COEFFS>
<COMPU-NUMERATOR><V>1</V><V>1</V></COMPU-NUMERATOR>
<COMPU-DENOMINATOR><V>2</V></COMPU-DENOMINATOR>
</COMPU-RATIONAL-COEFFS>
</COMPU-SCALE>
</COMPU-SCALES>
</COMPU-INTERNAL-TO-PHYS>
</COMPU-METHOD>
生成的RTE代碼如下:發(fā)送端的代碼:
Std_ReturnType Rte_Send_SwcA_SenderPort_u(t_voltageAtSender u)
{
/*
u_NetworkRepresentation
= ((u * LSB_sender + off_sender) - off_network) / LSB_network
= ((u / 4 + 0 ) - 0.5 ) * 2
= (u / 2 ) - 1
*/
u_NetworkRepresentation = (uint8) ((u >> 1) - 1);
}
接收端的代碼:
Std_ReturnType Rte_Receive_SwcB_ReceiverPort_u(t_voltageAtReceiver * u)
{
/*
*u = ((u_NetworkRepresentation * LSB_network + off_network)
- off_receiver) / LSB_receiver
= ((u_NetworkRepresentation / 2 + 0.5 )
- 2 ) * 8
= (u_NetworkRepresentation * 4 + 4 )
- 16
= u_NetworkRepresentation * 4 - 12
*/
*u = (uint16) ((u_NetworkRepresentation << 2) - 12);
}
常見的IDT的CompuMethod TEXT TABLE的配置和代碼實現(xiàn)如下:
如下為DCM模塊中的數(shù)據(jù)類型Dcm_ConfirmationStatusType,其引用的CompuMethod定義為TEXT TABLE。
其生成的代碼中包括對這些symbol的宏定義,應用層可以通過引用這些宏實現(xiàn)對相應為的訪問。
/* 識別到實施Dcm_ConfirmationStatusType類型Compu的定義,為Dcm_ConfirmationStatusType生成下面的宏 */
typedef uint8 Dcm_ConfirmationStatusType;
# ifndef DCM_RES_POS_OK
# define DCM_RES_POS_OK (0U)
# endif
# ifndef DCM_RES_POS_NOT_OK
# define DCM_RES_POS_NOT_OK (1U)
# endif
# ifndef DCM_RES_NEG_OK
# define DCM_RES_NEG_OK (2U)
# endif
# ifndef DCM_RES_NEG_NOT_OK
# define DCM_RES_NEG_NOT_OK (3U)
# endif
啟用數(shù)據(jù)轉換時,Delegation port的數(shù)據(jù)類型設置要注意什么?
Com映射的ISignal包含線性類型的compu方法,與此相連的delegation port中的Data element的數(shù)據(jù)類型是float(定義成整型可能會引起轉換錯誤),如果檢測到這種設置,RTE則會啟動數(shù)據(jù)的轉換。
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!