هنگام تعریف نگاشتهای میانافزار سرویسگرای مقیاسپذیر روی IP (SOME/IP) در VSIDL، شما سریالسازی قالب سیم و کدگذاری بار مفید هر پیام SOME/IP را توصیف میکنید. با استفاده از تعاریف SomeIpType و SomeIpStruct ، میتوانید مقادیر اولیه، رشتهها، آرایهها و ساختارهای تو در تو را که با قوانین کدگذاری بار مفید پشته AUTOSAR ARXML ( SOMEIP-TRANSFORMATION-PROPS ) و SOME/IP (از جمله COVESA vsomeip ) مطابقت دارند، مدلسازی کنید.
این صفحه بر نحوه نوشتن تعریف نوع SomeIpStruct تمرکز دارد که در بلوکهای type_definition برای نگاشتهای رویداد و متد استفاده میشود.
پیام SomeIpStruct
یک پیام SomeIpStruct نشان دهنده یک payload ساختار یافته SOME/IP متشکل از چندین فیلد است. ساختار تعریف شده در اینجا توسط کارگزار SOME/IP برای ترجمه بین بایتهای خام SOME/IP و فیلدهای یک پیام SDV protobuf استفاده میشود.
هنگام تعریف یک struct، دو ویژگی اصلی را پیکربندی میکنید:
-
length_field_size(اختیاری): اندازه (به بایت) فیلد طول را که قبل از ساختار در payload سریالی شده قرار میگیرد، مشخص میکند. مقادیر استفاده شده از enumLengthFieldSizeشاملZERO(بدون فیلد طول)،ONE،TWOوFOURاست. -
field(تکرار شده): فهرستی از فیلدهایی که ساختار را تشکیل میدهند.
تعریف فیلدهای ساختار
هر فیلد درون SomeIpStruct نیاز دارد به:
-
field_name: نام فیلد. این نام باید دقیقاً با نام فیلد مربوطه که در پیام SDV protobuf تعریف شده است، مطابقت داشته باشد تا ترجمه صحیح پیام تضمین شود. -
field_type: نوع داده SOME/IP فیلد (SomeIpType). این میتواند یک نوع داده اولیه، رشته، آرایه یا یک ساختار تو در تو باشد.
نوشتن انواع فیلد SomeIpType
بلوک field_type نوع داده خاص را با استفاده از یکی از انواع زیر پیکربندی میکند:
- انواع اولیه:
someip_primitiveبا مقادیری مانندUINT8،UINT32،INT32،FLOAT32وBOOLاستفاده کنید. - رشتهها: از
someip_stringاستفاده کنید و کدگذاری (برای مثال،UTF_8یاUTF_16_LE) و اطلاعات طول (یاfixed_lengthیاlength_field_size) را مشخص کنید. - آرایهها: از
someip_arrayاستفاده کنید وarray_type(کهSomeIpTypeبازگشتی دیگر است) را به همراه اطلاعات طول (fixed_lengthیاlength_field_size) تعریف کنید. - ساختارهای تو در تو:
someip_structبرای جاسازی تعریف ساختار دیگر به صورت بازگشتی استفاده کنید.
مثال: تعریف نوع ساختار را بنویسید
در اینجا یک مثال عملی از نحوه نوشتن یک SomeIpStruct درون یک بلوک type_definition آورده شده است. این payload شامل یک عدد صحیح بدون علامت ۸ بیتی به نام interval و یک عدد صحیح بدون علامت ۳۲ بیتی به نام counter است:
type_definition {
# No length field precedes this struct
length_field_size: ZERO
# First field: interval
field {
field_name: "interval"
field_type {
someip_primitive: UINT8
}
}
# Second field: counter
field {
field_name: "counter"
field_type {
someip_primitive: UINT32
}
}
}
اضافه کردن انواع پیچیده
برای گنجاندن یک فیلد رشتهای با طول پویا و یک آرایه درون ساختار، فیلدها را به این صورت اضافه کنید:
field {
field_name: "status_message"
field_type {
someip_string {
string_encoding: UTF_8
length_field_size: FOUR
}
}
}
field {
field_name: "measurements"
field_type {
someip_array {
length_field_size: FOUR
array_type { someip_primitive: FLOAT32 }
}
}
}
کدگذاری بار داده AUTOSAR ARXML و vsomeip را نگاشت کنید
هنگام ادغام AAOS SDV با واحدهای کنترل الکترونیکی (ECU) خارجی AUTOSAR یا پشتههای SOME/IP مانند COVESA vsomeip ، اطمینان حاصل کنید که type_definition VSIDL شما با پارامترهای سریالسازی سیم تعریف شده در ARXML سیستم شما ( SOMEIP-TRANSFORMATION-PROPS و SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS ) یا پیکربندی vsomeip مطابقت دارد:
پارامتر AUTOSAR ARXML و vsomeip | معادل SomeIpType در VSIDL | سریالسازی سیم و قانون رمزگذاری بار مفید |
|---|---|---|
sizeOfStructLengthField ( 0 ، 1 ، 2 ، 4 بایت) | SomeIpStruct.length_field_size ( ZERO ، ONE ، TWO ، FOUR ) | یک پیشوند با طول بایت صریح را قبل از بار دادهی ساختار سریالی شده اضافه میکند. برای ساختارهای با طرحبندی ثابت و بدون پیشوند طول، روی ZERO تنظیم کنید. |
sizeOfArrayLengthField ( 0 ، 1 ، 2 ، 4 بایت) | SomeIpArray.length_field_size ( ZERO ، ONE ، TWO ، FOUR ) یا fixed_length | آرایههای پویا به یک پیشوند فیلد طول ( ONE ، TWO یا FOUR بایت) نیاز دارند که طول بایت عناصر آرایه سریالی شده را نشان میدهد. |
sizeOfStringLengthField و کدگذاری ( UTF-8 ، UTF-16LE ، UTF-16BE ) | SomeIpString.string_encoding و length_field_size یا fixed_length | قوانین سریالسازی رشته AUTOSAR (از جمله علامت ترتیب بایت و مدیریت پایان تهی) را برای رشتههای با طول متغیر و ثابت مطابقت میدهد. |
انواع پایه اولیه ( uint8 ، uint16 ، uint32 ، float32 ، boolean ) | SomeIpPrimitive ( UINT8 ، UINT16 ، UINT32 ، INT32 ، FLOAT32 ، BOOL ) | مقادیر اولیه را به ترتیب بایت شبکه (به طور پیشفرض طبق مشخصات SOME/IP از نوع big-endian) کدگذاری میکند و با فیلد protobuf هدف مطابقت دارد. |