因為和你相遇 ,不再迷戀遠方的風景
那藍藍的天空,那悠遠的大地-----2020-0520祝您和愛人幸福
什么是數(shù)據轉換?
數(shù)據轉換是Rte在SWC上使用時能夠自動轉換和重新縮放通過外部通信接收的數(shù)據的能力。
為啥需要數(shù)據轉換?
AUTOSAR SWC的設計要求有很好的通用性和重用性,能適配不同的項目平臺。為了實現(xiàn)這個目標,重要的是要保證SWC的端口接口兼容性要好,可以集成到到不同的平臺項目中。但是由于DBC中通信信號的定義沒有標準化,主觀性比較強。例如速度這個數(shù)據元素,你在一個項目總定義其單位為“km/h”,在另外一個項目中你定義速度的單位為“ m / s”
ADT上定義的CompuMethod在生成代碼中沒反應?
應用數(shù)據類型在代碼中是不體現(xiàn)的,其通過相應的mapping實施數(shù)據類型去表示,其相應的IDT通過typedef體現(xiàn)在生成的代碼中。
實施數(shù)據類型中配置了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ù)據類型僅限于BITFIELD_TEXTTABLE類別或TEXT TABLE類別的CompuMethod。如果您在Davinci Developer中的實施數(shù)據類型中配置了Linear的CompuMethod生成代碼的時候會報錯。
一般,線性Compu Method的轉換適用于外部通信,發(fā)送方對處理的數(shù)據對象的表示與接收方對處理的數(shù)據對象的表示不同。通過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ù)據類型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ù)據轉換時,Delegation port的數(shù)據類型設置要注意什么?
Com映射的ISignal包含線性類型的compu方法,與此相連的delegation port中的Data element的數(shù)據類型是float(定義成整型可能會引起轉換錯誤),如果檢測到這種設置,RTE則會啟動數(shù)據的轉換。
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!





