exponenta event banner

Настройка выделения памяти для адаптивных служебных данных AUTOSAR

Для отправки данных о событиях обслуживания адаптивная платформа AUTOSAR поддерживает следующие методы:

  • По ссылке - функция отправки использует память в адресном пространстве приложения. После отправки возвратов приложение может изменить данные события.

  • Около ara::com выделенная память - запросы приложения ara::com промежуточное программное обеспечение для выделения памяти для данных. Этот метод позволяет избежать копирования данных ara::com промежуточное программное обеспечение и может быть более эффективным для частых отправлений или больших объемов данных. Но приложение теряет доступ к памяти после возврата отправки.

Чтобы настроить выделение памяти для отправки событий, откройте редактор Сопоставления кодов. Выберите вкладку «Выходы» и проверьте каждый выход. При выборе исходящего порта редактор отображает атрибут кода AllocateMemory. Отправка данных о событии по ara::com выделенная память, выберите значение true. Чтобы отправить данные события по ссылке, выберите false.

Если установить AllocateMemory кому true, в сгенерированном коде модели C++ соответствующее событие send использует ara::com выделенный буфер.

void autosar_LaneGuidanceModelClass::step()
{
...
  ara::com::SampleAllocateePtr<company::chassis::provided::skeleton::events::
    rightHazardIndicator::SampleType> *rightHazardIndicatorAllocateePtrRawPtr;
  std::shared_ptr< ara::com::SampleAllocateePtr<company::chassis::provided::
    skeleton::events::rightHazardIndicator::SampleType> >
    rightHazardIndicatorAllocateePtrSharedPtr;
...
  rightHazardIndicatorAllocateePtrSharedPtr = std::make_shared< ara::com::
    SampleAllocateePtr<company::chassis::provided::skeleton::events::
    rightHazardIndicator::SampleType> >
    (ProvidedPort->rightHazardIndicator.Allocate());
  rightHazardIndicatorAllocateePtrRawPtr =
    rightHazardIndicatorAllocateePtrSharedPtr.get();

  // Send: '<S8>/Message Send'
  *rightHazardIndicatorAllocateePtrRawPtr->get() = rtb_Merge1;

  // Send event
  ProvidedPort->rightHazardIndicator.Send(std::move
    (*rightHazardIndicatorAllocateePtrRawPtr));
}

Связанные примеры

Подробнее