В этом разделе описывается компонентный подход к проверке кода AUTOSAR с помощью Polyspace. Подход к интеграционному анализу см. в разделе Выбор между компонентным и интеграционным анализом кода AUTOSAR с Polyspace.
Polyspace ® для AUTOSAR выполняет статический программный анализ реализации кода программных компонентов AUTOSAR. Анализ проверяет возможные ошибки времени выполнения или несоответствие спецификациям в AUTOSAR XML (ARXML).
Polyspace for AUTOSAR считывает спецификации ARXML, которые предоставляются, и модулирует анализ на основе программных компонентов в спецификациях ARXML. Затем анализ проверяет каждый модуль на наличие:
Несоответствие спецификациям AUTOSAR: эти проверки направлены на подтверждение того, что определенные функции реализованы или используются в соответствии со спецификациями в ARXML. Проверки применяются к исполняемым модулям (функции, предоставляемые компонентами программного обеспечения) и к использованию функций, предоставляемых средой Run-Time Environment (RTE). См. также:
Например, если аргумент функции RTE имеет значение за пределами ограниченного диапазона, определенного в ARXML, анализ помечает возможную проблему.
Ошибки времени выполнения: эти проверки направлены на подтверждение отсутствия определенных типов ошибок времени выполнения в телах объектов выполнения (например, переполнение). Доказательство использует спецификации в ARXML для определения точных диапазонов для запускаемых аргументов и возвращаемых значений функции RTE и выходных аргументов. Например, доказательство учитывает только те значения запускаемых аргументов, которые указаны в их типах данных AUTOSAR.
После анализа можно открыть результаты для каждого модуля в интерфейсе пользователя Polyspace. При проверке несоответствия между кодом и спецификациями ARXML можно перейти к соответствующему извлечению ARXML.
В этом разделе показано, как Polyspace поддерживает AUTOSAR и помогает в процессе разработки AUTOSAR. Фактические шаги для запуска Polyspace см. в:
![]()
![]()

![]()
Polyspace for AUTOSAR модулирует код, повторно используя модуляризацию, уже имеющуюся в спецификациях ARXML. Модуляризация основана на программных компонентах в спецификациях ARXML. Модуляция кода необходима, чтобы избежать длительного времени анализа и обеспечить более точный анализ.
![]()
Программный компонент состоит из одного или нескольких запускаемых модулей. Выполняемые функции реализуются с помощью функций.
Программный компонент (SWC) - это блок функциональных возможностей прикладного уровня архитектуры AUTOSAR. Программный компонент имеет внутреннее поведение, состоящее из типов данных, событий, одного или нескольких исполняемых объектов (задач) и другой информации.
В XML-файле AUTOSAR перечисляется внутреннее поведение программного компонента (схема XML AUTOSAR версии 4.0):
<APPLICATION-SW-COMPONENT-TYPE>
<SHORT-NAME>swc001</SHORT-NAME>
<INTERNAL-BEHAVIORS>
<SWC-INTERNAL-BEHAVIOR>
<SHORT-NAME>bhv001</SHORT-NAME>
<DATA-TYPE-MAPPING-REFS>
...
</DATA-TYPE-MAPPING-REFS>
<EVENTS>
...
</EVENTS>
<RUNNABLE-ENTITY>
<SHORT-NAME>foo</SHORT-NAME>
...
</RUNNABLE-ENTITY>
</SWC-INTERNAL-BEHAVIOR>
</INTERNAL-BEHAVIORS>
<APPLICATION-SW-COMPONENT-TYPE>Как разработчик, тела этих исполняемых объектов реализуются с помощью рукописных C-функций или функций, созданных из модели Simulink ®.
iOperations_ApplicationError foo(
Rte_Instance const self,
app_Array_2_n320to320ConstRef aInput,
app_Array_2_n320to320Ref aOutput,
app_Enum001Ref aOut2)
{
/* Your implementation */
}![]()
Polyspace собирает исходный код для каждого программного компонента в модуль.
Используя информацию в AUTOSAR XML, Polyspace for AUTOSAR создает проект с отдельным модулем для каждого компонента программного обеспечения. В одном модуле Polyspace собирает исходный код (.c и .h файлы), содержащие реализацию всех исполняемых таблиц в программном компоненте и генерирующие любые дополнительные заголовочные файлы, необходимые для реализации.
Проект Polyspace с двумя модулями из двух программных компонентов может выглядеть следующим образом:
![]()

![]()
Имя модуля соответствует полному имени внутреннего поведения компонента программного обеспечения.
Например, имя pkg.tst002.swc001.bhv001 соответствует этой структуре XML (AUTOSAR XML-схема версии 4.0):
<AR-PACKAGE>
<SHORT-NAME>pkg</SHORT-NAME>
<AR-PACKAGES>
<AR-PACKAGE>
<SHORT-NAME>tst002</SHORT-NAME>
<ELEMENTS>
<APPLICATION-SW-COMPONENT-TYPE>
<SHORT-NAME>swc001</SHORT-NAME>
...
<SWC-INTERNAL-BEHAVIOR>
<SHORT-NAME>bhv001</SHORT-NAME>
...
</SWC-INTERNAL-BEHAVIOR>
</APPLICATION-SW-COMPONENT-TYPE>
</ELEMENTS>
</AR-PACKAGE>
</AR-PACKAGES>
</AR-PACKAGE>bhv001 имеет одну выполняемую foo, Polyspace собирает файлы, содержащие функцию foo и функции, вызываемые в foo в один модуль.![]()
Для этой модуляризации необходимо просто предоставить двум папкам ARXML и исходные файлы.
Polyspace for AUTOSAR использует тот факт, что необходимая информация уже присутствует в спецификациях ARXML и модулирует код. Подробные сведения о спецификациях ARXML или реализации кода для выполнения анализа не требуются. Вы просто предоставляете папки, содержащие файлы ARXML и исходные файлы.
Без этой автоматической модуляризации необходимо вручную добавить реализацию каждого программного компонента (файлы с функциями точки входа, реализующими выполняемые объекты, функции, вызываемые в, и т.д.) в модуль. Не только это, вы должны определить интерфейс для каждого выполняемого, то есть диапазон значений для входных данных на основе их типов данных.
![]()
Polyspace for AUTOSAR обнаруживает несоответствие между спецификациями ARXML компонентов программного обеспечения AUTOSAR и их реализацией кода. Несоответствие может произойти во время выполнения между ограничениями данных в ARXML и фактическими значениями аргументов функции в коде. Обнаружение несоответствия происходит только для некоторых функций: функций, реализующих выполняемые и Rte_ функции, используемые в таблицах выполнения. Аргументы этих функций имеют типы данных, указанные в ARXML.
![]()
Runnables AUTOSAR обмениваются данными через Rte_ функции.
Реализация выполняемого AUTOSAR использует функции, предоставляемые средой выполнения (RTE) для связи с выполняемыми модулями в других SWC. Например, функция Rte_IWrite_ может использоваться для предоставления доступа на запись runnable_port_variable от текущей выполняемой.variable
Rte_IWrite_step_out_e4(self, e4);
![]()
Аргументы функции имеют типы данных, указанные в ARXML.
Эти функции имеют сигнатуры, определенные в стандарте AUTOSAR, с типами данных параметров, которые подробно описаны в спецификациях ARXML. Например, стандарт определяет подпись Rte_IWrite_ такая функция, где тип указывается в ARXML.data
void Rte_IWrite_re_p_o([IN Rte_Instance], IN data)
При развертывании внедрения генератор среды Run-Time использует информацию в спецификациях ARXML для создания файлов заголовков с определениями типов данных для приложения. При разработке внедрения не нужно беспокоиться о деталях связи с другими SWC. Вы просто используете Rte_ функции и типы данных, предоставляемые для внедрения.
Аналогично, типы данных входов, выходов и возвращаемых значений для выполняемой среды также перечислены в ARXML.
![]()
Типы данных в ARXML можно ограничить с помощью ограничений данных.
В спецификациях ARXML значения, связанные с типами данных, часто ограничиваются с помощью ограничений данных. Спецификация ограничения данных может выглядеть следующим образом (схема XML AUTOSAR версии 4.0):
<APPLICATION-PRIMITIVE-DATA-TYPE>
<SHORT-NAME>Float_n100p4321to100p8765</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<SW-DATA-DEF-PROPS>
...
<DATA-CONSTR-REF DEST="DATA-CONSTR">n320to320</DATA-CONSTR-REF>
..</SW-DATA-DEF-PROPS>
</APPLICATION-PRIMITIVE-DATA-TYPE>
...
<DATA-CONSTR>
<SHORT-NAME>n320to320</SHORT-NAME>
<DATA-CONSTR-RULES>
<DATA-CONSTR-RULE>
<PHYS-CONSTRS>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">-320</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">320</UPPER-LIMIT>
<UNIT-REF DEST="UNIT">/pkg/types/units/NoUnit</UNIT-REF>
</PHYS-CONSTRS>
</DATA-CONSTR-RULE>
</DATA-CONSTR-RULES>
</DATA-CONSTR>
Когда Rte_ функция использует типы данных, которые ограничены таким образом, ожидается, что значения, переданные функции, останутся в пределах ограниченного диапазона. Например, для предшествующего ограничения, если Rte_IWrite_ функция использует переменную типа n320to320, его значение должно находиться в пределах [-320, 320].
При создании ARXML в Simulink ограничения данных происходят из диапазонов сигналов в модели.
![]()
Во время выполнения реализация кода может нарушить ограничения данных.
Rte_ функции представляют порты в интерфейсе SWC. Таким образом, при ограничении типа данных аргумента в ARXML порты подготавливаются для данных в этом диапазоне. Однако в реализации кода при вызове Rte_ можно передать аргумент за пределы ограниченного диапазона.
Например, в этом вызове Rte_IWrite_step_out_e4:
Rte_IWrite_step_out_e4(self, e4);Rte_IWrite_step_out_e4 может иметь ранее определенный тип данных n320to320. Но во время выполнения реализация кода может передавать значение за пределы диапазона [-320, 320]. Аргумент может быть результатом серии предыдущих операций, и одна из этих операций может вызвать значение вне диапазона.app_Enum001 e4; e4 = Rte_IRead_step_in_e4(self); ... /* Some operation on e4*/ ... Rte_IWrite_step_out_e4(self, e4);
![]()
Polyspace Code Prover™ проверяет возможные нарушения ограничений данных.
Можно либо проверить каждый вызов Rte_ функция, чтобы проверить, находятся ли аргументы в ограниченном диапазоне, а также убедиться, что тесты охватывают все пути выполнения в выполняемом. Кроме того, можно использовать статический анализ, который гарантирует, что все пути выполнения, ведущие к Rte_ рассматривается вызов функции (до определенных обоснованных предположений). Polyspace использует статический анализ, чтобы определить, Rte_ функции находятся в ограниченном диапазоне, определенном в файлах ARXML.
Проверки на наличие несоответствий в анализе Polyspace могут показывать результаты, подобные этому. Здесь второй аргумент в вызове RTE_IWrite_step_out_e4 нарушает ограничения данных в спецификациях ARXML.
![]()

![]()
Invalid result of AUTOSAR runnable implementation | Invalid use of AUTOSAR runtime environment function